Install
openclaw skills install @upkuajing/b2b-lead-generationAggregate B2B lead generation using customs trade data, global company due diligence, and LinkedIn professional network info to analyze markets, profile firm...
openclaw skills install @upkuajing/b2b-lead-generationAggregate skill for B2B lead generation: customs trade intelligence + global-company deep due-diligence + LinkedIn professional data. 38 scripts across 3 data sources, routed by domain index.
Three data sources, each behind a domain index (intent → script decision table):
| Data source | What it answers | Index |
|---|---|---|
| Customs - HS code analysis | Market distribution / trends / share for a product (HS code) | indexes/customs-analysis.md |
| Customs - company trade | One company's trade scale, partners, products, ports, trends | indexes/customs-company.md |
| Customs - macro overview | Country-level trade totals, top buyers/suppliers, US imports | indexes/customs-overview.md |
| Global company - deep | Firmographics, shareholders/UBO, employees, decision-makers (全球企业库) | indexes/global-depth.md |
| Professional network: companies, people, colleagues, alumni, career | indexes/linkedin.md |
python --versionpip install -r requirements.txtScript directory: scripts/*.py
Important: Always use direct script invocation like python scripts/customs_analysis_area.py. Do NOT use shell compound commands like cd scripts && python customs_analysis_area.py.
indexes/<domain>.md - it is an intent→script decision table that pins each intent to exactly one script.references/<xxx>-api.md for exact parameter names/formats - never guess parameters.| User Intent | Route to |
|---|---|
| Analyze an HS code's market distribution / trends / share / overview | indexes/customs-analysis.md |
| Profile one company's trade scale / partners / products / ports / trends | indexes/customs-company.md |
| Macro country trade overview / Top buyers & suppliers / US imports | indexes/customs-overview.md |
| Company firmographics / shareholders-UBO / employees / decision-makers (background check) | indexes/global-depth.md |
| LinkedIn companies / people / professional network / career & education | indexes/linkedin.md |
These belong to standalone companion skills - hand off when the user needs them:
| User wants | Hand off to |
|---|---|
| Buyers/suppliers with real trade records (trade record search) | upkuajing-customs-trade-company-search (= upkuajing-trade-company-search) |
| Quick company/person lookup + contact info (shallow search) | upkuajing-company-people-search (= upkuajing-global-company-people-search) |
| Validate / clean contact info before outreach | b2b-outreach (phone/email/domain validity) or upkuajing-contact-info-validity-check |
| Send email / SMS / map merchant harvesting after leads found | b2b-outreach |
upkuajing-customs-trade-company-search (find buyers with trade records) → this skill global-depth/linkedin (find decision-makers) → b2b-outreach validity (clean contacts) → b2b-outreach (reach out).global-depth (global_company_search → company_shareholder_list / company_employee_list) → customs-company (customs_company_stats to gauge real trade scale).linkedin (linkedin_company_employee_list) → linkedin_person_experience_list / linkedin_person_education_list (background).customs-overview (summary / top_n to size a market) → customs-analysis (trade_percent to find dominant players) → global-depth (background the top players).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.
When an API call fails or returns abnormal data (server error, timeout, malformed response, etc.), explain the anomaly to the user in natural language and ask whether to report it to the platform for troubleshooting. Only run the report after user confirmation:
python scripts/error_report.py --params '{"requestPath":"/agent/customs/analysis/area","requestId":"f47ac10b58cc4372a5670e02b2c3d479","context":"Customs area distribution query failed with a server error"}'
All API calls incur fees; billing methods differ per interface.
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.)
global_company_search, global_company_person_search, linkedin_company_search, linkedin_person_search): billed by calls = ceil(query_count / 20); each call returns up to 20 records (query_count range 20–1000). When query_count > 20, inform the user of the expected call count first.cursor from the previous response to fetch the next page; single-record scripts (stats, summary, date, school detail) return one result per call.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 guesspython scripts/error_report.py (see Report Skill Call Errors)customs-analysis (route: indexes/customs-analysis.md)
customs-company (route: indexes/customs-company.md)
customs-overview (route: indexes/customs-overview.md)
global-depth (route: indexes/global-depth.md)
linkedin (route: indexes/linkedin.md)
countryType: 1 = exporting countries (suppliers), 2 = importing countries (buyers).pid/hid is not the same as a LinkedIn pid/hid - stay within one source per investigation.*_search) return a task_id + file_url; resume with --task_id to append. Customs & list scripts use cursor pagination - pass the cursor from the previous response (inside --params) to fetch the next page.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: