Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

lead-contact-enrichment-agent

v1.0.0

Enrich your existing leads, contacts, and company lists with verified B2B data. Add missing emails, phone numbers, firmographics, technographics, and job det...

0· 304·0 current·0 all-time
MIT-0
Download zip
LicenseMIT-0 · Free to use, modify, and redistribute. No attribution required.
Security Scan
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The skill's name, description, SKILL.md, setup.sh, and CLI (bin/agentsource.py) all align: they call https://api.explorium.ai/v1 to enrich leads/companies and require an EXPLORIUM_API_KEY. However, the registry metadata claims no required environment variables or primary credential, which contradicts both SKILL.md and the CLI code that require an API key. Also _meta.json.ownerId differs from the registry Owner ID, and the package has no homepage — these metadata mismatches reduce confidence.
Instruction Scope
Runtime instructions are narrowly focused on discovering and running the included CLI, matching/enriching records, writing results to temp files, and presenting previews — all appropriate for enrichment. Two items to note: (1) the discovery snippet searches broad filesystem globs (e.g., scanning /sessions/*/mnt/**/*) which can traverse many paths and may be broader than necessary; (2) the CLI supports an optional --call-reasoning argument that will send the user's query text as metadata to the remote API (the code documents this and marks it opt-in, but it is a potential privacy leak if used without consent).
Install Mechanism
There is no remote download; the provided setup.sh copies included bin/agentsource.py to ~/.agentsource/bin and can optionally write a config file (mode 600). That local install approach is lower risk than fetching arbitrary remote code. But the package is marked as 'instruction-only' in the registry even though it includes an installer and a CLI — that inconsistency is noteworthy.
Credentials
The only credential the skill needs is an Explorium API key (EXPLORIUM_API_KEY), which is proportionate to its stated purpose. The problem is the registry metadata omitted this requirement; the SKILL.md and CLI explicitly require the API key (or a ~/.agentsource/config.json). The setup script offers to save the API key to disk (mode 600), which is convenient but you should consider whether you want the key persisted.
Persistence & Privilege
The skill does not request elevated platform privileges or 'always: true'. Installation writes its own files under $HOME/.agentsource and may persist the API key there (config.json, mode 600) if the user opts in — this is normal for a CLI. It does not alter other skills or global agent configs.
What to consider before installing
This package appears to be an Explorium AgentSource CLI wrapper that will enrich contacts/companies via api.explorium.ai and needs your Explorium API key. Before installing or using it: 1) Verify the source and owner (no homepage is provided and registry metadata mismatches are present). 2) Inspect bin/agentsource.py yourself (it is included) to confirm network endpoints and behaviors; it writes results to /tmp and sends calls to https://api.explorium.ai/v1, which matches the documentation. 3) Consider not persisting your API key to disk (declines the setup prompt) and instead export EXPLORIUM_API_KEY in a session-only manner if you prefer. 4) Be aware the runtime discovery code glob-scans wide filesystem paths — run setup and CLI in a controlled account or sandbox if you are concerned. 5) Avoid using --call-reasoning (or only use it with explicit consent) because that option sends the user query text to the remote service as metadata. If you need higher assurance, ask the publisher for an authoritative homepage, confirm the ownerId, or run the CLI in an isolated environment first.

Like a lobster shell, security has layers — review code before you run it.

latestvk974460bng61hyrfekwssfzhbd821asm

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

SKILL.md

Lead & Contact Data Enrichment Agent

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.


Prerequisites

Before starting any workflow:

  1. 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.

  2. 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).


Enrichment Conversation Flow

When a user wants to enrich data, guide them through this workflow:

Step 1 — Understand the Input Data

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

Step 2 — Define Enrichment Needs

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

Step 3 — Execute the Right Workflow

Based on input type, follow the appropriate workflow below.


Workflow A: Enrich a Single Contact

When the user mentions a specific person:

PLAN_ID=$(python3 -c "import uuid; print(uuid.uuid4())")
QUERY="<user's original request>"

# Match the person
MATCH_RESULT=$(python3 "$CLI" match-prospect \
  --prospects '[{"full_name":"Jane Smith","company_name":"Acme Corp","email":"jane@acme.com"}]' \
  --plan-id "$PLAN_ID" --call-reasoning "$QUERY")
cat "$MATCH_RESULT"

Check match results. If matched, enrich:

# Get emails and phones
ENRICH_RESULT=$(python3 "$CLI" enrich \
  --input-file "$MATCH_RESULT" \
  --enrichments "contacts_information,profiles" \
  --plan-id "$PLAN_ID" --call-reasoning "$QUERY")
cat "$ENRICH_RESULT"

Present the enriched profile in a structured format:

## Jane Smith — Enriched Profile

**Contact Info**
- Professional Email: jane.smith@acme.com
- Phone: +1 (555) 123-4567
- LinkedIn: linkedin.com/in/janesmith

**Current Role**
- Title: VP of Engineering
- Company: Acme Corp
- Department: Engineering
- Seniority: Vice President

**Background**
- Education: [details]
- Previous: [work history]

Workflow B: Enrich a Single Company

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"

Workflow C: Enrich an Inline List

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"

Workflow D: Enrich a CSV File (Bulk Enrichment)

This is the most common enrichment workflow:

Step D1 — Import the CSV

CSV_JSON=$(python3 "$CLI" from-csv \
  --input ~/Downloads/my_contacts.csv)

Step D2 — Read Metadata Only (never cat full file)

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)
"

Step D3 — Map Columns and Match

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'])"

Step D4 — Present Match Results and WAIT for Confirmation

Show the user:

  1. Match rate (e.g., "Matched 847 of 1,000 contacts")
  2. Sample of matched records
  3. Credit cost estimate for enrichment
  4. 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"

Step D5 — Enrich

# 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"

Step D6 — Export Enriched CSV

CSV_RESULT=$(python3 "$CLI" to-csv \
  --input-file "$ENRICH_RESULT" \
  --output ~/Downloads/enriched_contacts.csv)
cat "$CSV_RESULT"

Available Enrichment Types

Business Enrichments (max 3 per call, chain for more)

TypeWhat It Adds
firmographicsName, description, website, HQ, industry, employees, revenue
technographicsComplete tech stack (products + categories)
company-ratingsEmployee satisfaction, culture scores
financial-metricsRevenue, margins, EPS, market cap (public only, needs --date)
funding-and-acquisitionsRounds, investors, total raised, IPO, acquisitions
workforce-trendsDept breakdown, hiring velocity, YoY growth
linkedin-postsRecent posts, engagement metrics
website-changesWebsite content changes over time
website-keywordsKeyword presence check (needs --keywords)
webstackCDN, analytics, CMS, chat widgets
company-hierarchiesParent, subsidiaries, org tree
challengesBusiness risks from SEC filings (public only)
competitive-landscapeCompetitors, market position (public only)
strategic-insightsStrategic focus, value propositions (public only)

Prospect Enrichments

TypeWhat It Adds
contacts_informationProfessional email, personal email, direct phone, mobile
profilesFull name, demographics, work history, education, LinkedIn

Common Combinations

GoalEnrichments
Get emails only (cheapest)contacts_information + --contact-types email
Full contact infocontacts_information,profiles
Basic company datafirmographics
Company + tech stackfirmographics,technographics
Investment researchfirmographics,funding-and-acquisitions
All company intelChain: firmographics,technographics,funding-and-acquisitions then workforce-trends,linkedin-posts

Error Handling

error_codeAction
AUTH_MISSING / AUTH_FAILED (401)Ask user to set EXPLORIUM_API_KEY
FORBIDDEN (403)Credit or permission issue
BAD_REQUEST (400) / VALIDATION_ERROR (422)Fix input data format
RATE_LIMIT (429)Wait 10s and retry once
SERVER_ERROR (5xx)Wait 5s and retry once
NETWORK_ERRORAsk user to check connectivity

Key Capabilities Summary

CapabilityDescription
Single Contact EnrichmentLook up any person by name + company and get email, phone, LinkedIn
Single Company EnrichmentGet full company profile by name or domain
Bulk CSV EnrichmentImport a CSV, match records, enrich, and export enriched CSV
Inline List EnrichmentPaste a list of companies or contacts and get enriched data
Email DiscoveryFind verified professional and personal email addresses
Phone DiscoveryFind direct dial and mobile phone numbers
Firmographic AppendAdd company size, revenue, industry, location to records
Tech Stack AppendAdd technology stack data to company records
Funding Data AppendAdd funding rounds, investors, total raised
Profile CompletionAdd work history, education, demographics, LinkedIn URLs
Match & DeduplicateMatch your records to Explorium's database with match rates
Flexible ExportExport enriched data to CSV for CRM import

Files

11 total
Select a file
Select a file to preview.

Comments

Loading comments…