Install
openclaw skills install @upkuajing/b2b-outreachB2B outreach toolkit: send bulk cold email and global SMS, harvest Google Maps merchants, and validate contact info (phone/WhatsApp, email, domain) before reaching out. Monitor email/SMS delivery status, cleanse CRM contact lists, and run end-to-end cross-border outreach campaigns. Trigger: bulk cold email, email send, email open rate tracker, business domain emails, mass mail for exporters, global bulk SMS, two-way SMS replies, SMS delivery reports, cross-border SMS marketing, Google maps business scraper, merchant data download, radius-based lead search, distributor sourcing, phone number validation, WhatsApp status check, email address validation, domain validity security check, CRM data cleansing, bulk SMS pre-verification, B2B outreach campaign
openclaw skills install @upkuajing/b2b-outreachAggregate skill for outbound engagement: email + SMS + map merchant harvesting + contact validation. 11 scripts, flat layout (no indexes - script count is small enough to list directly).
Four capability groups:
| Group | Scripts | Purpose |
|---|---|---|
| mail_send, mail_task_list, mail_task_record_list | Bulk cold email + delivery tracking | |
| SMS | sms_send, sms_task_list, sms_task_record_list | Global SMS (two-way) + delivery tracking |
| Map merchants | merchants_search, geography_list | Google Maps business data harvesting |
| Validation | phone_validity_check, email_validity_check, domain_validity_check | Clean/verify contacts before outreach |
python --versionpip install -r requirements.txtScript directory: scripts/*.py
Important: Always use direct script invocation like python scripts/mail_send.py. Do NOT use shell compound commands like cd scripts && python mail_send.py.
mail_send.py - Send emailsSend emails to one or many recipients.
python scripts/mail_send.py \
--subject "Test Email" \
--content "This is the email content" \
--emails '["recipient@example.com"]'
mail_task_list.py - Email task listView email tasks with optional time-range / status filter.
python scripts/mail_task_list.py --page_no 1 --page_size 10
mail_task_record_list.py - Email task recordsView delivery records for a specific email task.
python scripts/mail_task_record_list.py --task_id 1496 --page_no 1 --page_size 10
sms_send.py - Send SMSSend SMS to phone numbers; --channel_type 1 enables two-way (reply) mode.
python scripts/sms_send.py \
--content "This is SMS content" \
--phones '["13800138000"]'
sms_task_list.py - SMS task listpython scripts/sms_task_list.py --page_no 1 --page_size 10
sms_task_record_list.py - SMS task recordspython scripts/sms_task_record_list.py --task_id 1496 --page_no 1 --page_size 10
merchants_search.py - Merchant searchSearch Google Maps merchants by keywords + location. Two modes: country/province/city search, or nearby (lat/lon + radius via geoDistance).
python scripts/merchants_search.py \
--params '{"keywords":["restaurant"],"countryCodes":["BR"]}' \
--query_count 100
geography_list.py - Geography listGet country/province/city IDs to build merchants_search parameters.
python scripts/geography_list.py --type country
python scripts/geography_list.py --type province --country_id 1
python scripts/geography_list.py --type city --country_id 1
phone_validity_check.py - Phone validityCheck phone validity, type, and WhatsApp registration status.
python scripts/phone_validity_check.py --phones "+8613812345678 +14155551234"
email_validity_check.py - Email validityCheck email address validity / deliverability.
python scripts/email_validity_check.py --emails "a@example.com b@example.com"
domain_validity_check.py - Domain validityCheck domain validity and security.
python scripts/domain_validity_check.py --domains "example.com foo.org"
The signature workflow this aggregate enables (clean -> reach -> monitor):
merchants_search (map), or receive from b2b-lead-generation (decision-maker lookup).phone_validity_check / email_validity_check / domain_validity_check to drop invalid contacts. (Reduces wasted sends & fees.)mail_send (cold email) and/or sms_send (global SMS, two-way for replies).mail_task_list / sms_task_list -> *_task_record_list to check delivery status.Validation is itself billable - but it is far cheaper than sending to dead contacts. Inform the user of the validation cost first.
This skill requires an API key, stored in ~/.upkuajing/.env:
cat ~/.upkuajing/.env
UPKUAJING_API_KEY=your_api_key_here
First check if ~/.upkuajing/.env has UPKUAJING_API_KEY. If not, prompt the user to choose:
~/.upkuajing/.env)auth.py --new_key (auto-saved to ~/.upkuajing/.env)Wait for user selection.
When API response indicates insufficient balance:
auth.py --new_rec_order)python scripts/auth.py --account_info
Newly applied keys must be registered/bound at UpKuaJing Open Platform.
Send/search/validate calls incur fees; task list & record list queries are free.
Latest pricing: visit Detailed Price Description, or run:
python scripts/auth.py --price_info
(returns complete pricing for all interfaces - the aggregate auth.py queries the full price list and falls back to per-original-skill lookup if needed.)
ceil(query_count / 100).geography_list; all *_task_list / *_task_record_list.references/<xxx>-api.md.Any operation that incurs fees must first inform the user and wait for explicit confirmation in a separate message. Do not execute in the same message as the notification. When query_count exceeds one page, inform the user of the expected number of calls first.
UPKUAJING_API_KEY in ~/.upkuajing/.envreferences/ - get correct parameter names/formats from documentation, do not guessSMS
Map merchants
Validation (prefixed validity- to distinguish from email-send docs)
status via task records. Email status: 0-pending 1-sending 2-completed. SMS status: 1-sending 2-completed 3-failed 4-partial.task_data/ stores results under UUID subdirectories.auth.py --price_info for accurate pricing.references/<xxx>-api.md first.Other UpKuaJing skills you might find useful: