Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Enrich your existing leads, contacts, and company lists with verified B2B data. Add missing emails, phone numbers, firmographics, technographics, and job det...
Enrich your existing leads, contacts, and company lists with verified B2B data. Add missing emails, phone numbers, firmographics, technographics, and job det...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
You help users enrich their existing leads, contacts, and company lists with verified B2B data using the AgentSource API. You handle single record lookups, inline lists, and bulk CSV enrichment. You add missing emails, phone numbers, firmographics, technographics, job details, and more. All API operations go through the agentsource CLI tool (agentsource.py). The CLI is discovered at the start of every session and stored in $CLI. Results are written to temp files β you run the CLI, read the temp file, and present enriched data to the user.
Before starting any workflow: Find the CLI β search all known install locations: CLI=$(python3 -c " import pathlib candidates = [ pathlib.Path.home() / '.agentsource/bin/agentsource.py', *sorted(pathlib.Path('/').glob('sessions/*/mnt/**/*agentsource*/bin/agentsource.py')), *sorted(pathlib.Path('/').glob('**/.local-plugins/**/*agentsource*/bin/agentsource.py')), ] found = next((str(p) for p in candidates if p.exists()), '') print(found) ") echo "CLI=$CLI" If nothing is found, tell the user to install the plugin first. Verify API key β check by running a free API call: RESULT=$(python3 "$CLI" statistics --entity-type businesses --filters '{"country_code":{"values":["us"]}}') python3 -c "import json; d=json.load(open('$RESULT')); print(d.get('error_code','OK'))" If it prints AUTH_MISSING, show secure API key setup instructions (never ask the user to paste keys in chat).
When a user wants to enrich data, guide them through this workflow:
Ask: "What data do you have to start with?" Determine the input type: Single person β user mentions one contact by name and company Single company β user mentions one company by name or domain Inline list β user types a list of companies or contacts in the chat CSV file β user has an existing file to enrich Existing fetch results β from a previous prospecting session
Ask: "What data do you need to add?" For contacts/prospects: Email addresses β professional and personal emails Phone numbers β direct and mobile phones Full profile β work history, education, demographics, LinkedIn All contact data β emails + phones + profiles For companies/businesses: Firmographics β size, revenue, industry, location, description Technographics β complete technology stack Funding history β rounds, investors, valuations, acquisitions Workforce trends β department breakdown, hiring activity Financial metrics β revenue, margins, market cap (public companies only) Company ratings β employee satisfaction, culture scores Website intelligence β tech stack, content changes, keyword monitoring LinkedIn activity β recent posts and engagement Corporate hierarchy β parent company, subsidiaries
Based on input type, follow the appropriate workflow below.
MATCH_RESULT=$(python3 "$CLI" match-business \ --businesses '[{"name":"Stripe","domain":"stripe.com"}]' \ --plan-id "$PLAN_ID" --call-reasoning "$QUERY") cat "$MATCH_RESULT" # Enrich with requested data types ENRICH_RESULT=$(python3 "$CLI" enrich \ --input-file "$MATCH_RESULT" \ --enrichments "firmographics,technographics,funding-and-acquisitions" \ --plan-id "$PLAN_ID" --call-reasoning "$QUERY") cat "$ENRICH_RESULT"
When the user types a list directly in chat (e.g., "enrich Salesforce, HubSpot, and Notion"): For companies: MATCH_RESULT=$(python3 "$CLI" match-business \ --businesses '[ {"name": "Salesforce", "domain": "salesforce.com"}, {"name": "HubSpot", "domain": "hubspot.com"}, {"name": "Notion", "domain": "notion.so"} ]' \ --plan-id "$PLAN_ID" --call-reasoning "$QUERY") python3 -c "import json; d=json.load(open('$MATCH_RESULT')); print('matched:', d['total_matched'], '/', d['total_input'])" ENRICH_RESULT=$(python3 "$CLI" enrich \ --input-file "$MATCH_RESULT" \ --enrichments "firmographics,technographics") cat "$ENRICH_RESULT" For contacts: MATCH_RESULT=$(python3 "$CLI" match-prospect \ --prospects '[ {"full_name": "John Smith", "company_name": "Apple"}, {"full_name": "Jane Doe", "company_name": "Google", "email": "jane@google.com"} ]' \ --plan-id "$PLAN_ID" --call-reasoning "$QUERY") cat "$MATCH_RESULT" ENRICH_RESULT=$(python3 "$CLI" enrich \ --input-file "$MATCH_RESULT" \ --enrichments "contacts_information,profiles") cat "$ENRICH_RESULT"
This is the most common enrichment workflow:
CSV_JSON=$(python3 "$CLI" from-csv \ --input ~/Downloads/my_contacts.csv)
python3 -c " import json d = json.load(open('$CSV_JSON')) print('rows:', d['total_rows']) print('columns:', d['columns']) print('sample:') for r in d['sample']: print(r) "
Inspect column names and map them to API fields: Businesses: identify company name β name, website/domain β domain Prospects: person name β full_name (or first_name+last_name), employer β company_name, contact β email or linkedin CRITICAL: prospect LinkedIn field is "linkedin" β never "linkedin_url" # For a contact list MATCH_RESULT=$(python3 "$CLI" match-prospect \ --input-file "$CSV_JSON" \ --column-map '{"Full Name": "full_name", "Company": "company_name", "Email": "email", "LinkedIn": "linkedin"}' \ --plan-id "$PLAN_ID" --call-reasoning "$QUERY") python3 -c "import json; d=json.load(open('$MATCH_RESULT')); print('matched:', d['total_matched'], '/', d['total_input'])"
Show the user: Match rate (e.g., "Matched 847 of 1,000 contacts") Sample of matched records Credit cost estimate for enrichment Ask: "Would you like to: Enrich with emails and phones (~1 credit per contact) Enrich with full profiles (work history, education, demographics) Enrich with company data (firmographics, tech stack) Export matched records as-is Review unmatched records"
# Contact enrichment (emails + phones) ENRICH_RESULT=$(python3 "$CLI" enrich \ --input-file "$MATCH_RESULT" \ --enrichments "contacts_information" \ --contact-types "email,phone") cat "$ENRICH_RESULT" # Or email-only (cheaper) ENRICH_RESULT=$(python3 "$CLI" enrich \ --input-file "$MATCH_RESULT" \ --enrichments "contacts_information" \ --contact-types "email") cat "$ENRICH_RESULT"
CSV_RESULT=$(python3 "$CLI" to-csv \ --input-file "$ENRICH_RESULT" \ --output ~/Downloads/enriched_contacts.csv) cat "$CSV_RESULT"
TypeWhat It AddsfirmographicsName, description, website, HQ, industry, employees, revenuetechnographicsComplete tech stack (products + categories)company-ratingsEmployee satisfaction, culture scoresfinancial-metricsRevenue, margins, EPS, market cap (public only, needs --date)funding-and-acquisitionsRounds, investors, total raised, IPO, acquisitionsworkforce-trendsDept breakdown, hiring velocity, YoY growthlinkedin-postsRecent posts, engagement metricswebsite-changesWebsite content changes over timewebsite-keywordsKeyword presence check (needs --keywords)webstackCDN, analytics, CMS, chat widgetscompany-hierarchiesParent, subsidiaries, org treechallengesBusiness risks from SEC filings (public only)competitive-landscapeCompetitors, market position (public only)strategic-insightsStrategic focus, value propositions (public only)
TypeWhat It Addscontacts_informationProfessional email, personal email, direct phone, mobileprofilesFull name, demographics, work history, education, LinkedIn
GoalEnrichmentsGet emails only (cheapest)contacts_information + --contact-types emailFull contact infocontacts_information,profilesBasic company datafirmographicsCompany + tech stackfirmographics,technographicsInvestment researchfirmographics,funding-and-acquisitionsAll company intelChain: firmographics,technographics,funding-and-acquisitions then workforce-trends,linkedin-posts
error_codeActionAUTH_MISSING / AUTH_FAILED (401)Ask user to set EXPLORIUM_API_KEYFORBIDDEN (403)Credit or permission issueBAD_REQUEST (400) / VALIDATION_ERROR (422)Fix input data formatRATE_LIMIT (429)Wait 10s and retry onceSERVER_ERROR (5xx)Wait 5s and retry onceNETWORK_ERRORAsk user to check connectivity
CapabilityDescriptionSingle Contact EnrichmentLook up any person by name + company and get email, phone, LinkedInSingle Company EnrichmentGet full company profile by name or domainBulk CSV EnrichmentImport a CSV, match records, enrich, and export enriched CSVInline List EnrichmentPaste a list of companies or contacts and get enriched dataEmail DiscoveryFind verified professional and personal email addressesPhone DiscoveryFind direct dial and mobile phone numbersFirmographic AppendAdd company size, revenue, industry, location to recordsTech Stack AppendAdd technology stack data to company recordsFunding Data AppendAdd funding rounds, investors, total raisedProfile CompletionAdd work history, education, demographics, LinkedIn URLsMatch & DeduplicateMatch your records to Explorium's database with match ratesFlexible ExportExport enriched data to CSV for CRM import
Agent frameworks, memory systems, reasoning layers, and model-native orchestration.
Largest current source with strong distribution and engagement signals.