Lead Dossier — a skill by Eric Siu.
Library skill — the default version is maintained in GitHub; edits you make live in your own clone.
name: lead-dossier description: > Multi-source account research, cascade enrichment, and lead pipeline. Combines website scraping, tech stack detection, CRM enrichment, hiring/news signals into structured dossiers. Includes full lead sourcing pipeline: search → verify → dedupe → upload. Triggers on: "research account", "build dossier", "enrich leads", "lead pipeline", "source leads", "prospect research", "account intel", "cascade enrichment", "lead scoring", "find leads", "verify emails", "upload leads".
Multi-source account research and lead enrichment pipeline for AI coding assistants.
requests installed.env.example)All API keys are configured via environment variables. Copy .env.example to .env:
| Variable | Description |
|---|---|
LEAD_SOURCE_API_KEY |
People/company search API |
EMAIL_VALIDATION_API_KEY |
Email verification service |
EMAIL_VALIDATION_API_URL |
Email verification endpoint |
CAMPAIGN_TOOL_API_KEY |
Outbound campaign platform |
CRM_API_KEY |
CRM API key |
CRM_BASE_URL |
CRM API base URL |
BUILTWITH_API_KEY |
BuiltWith tech detection (free tier works) |
Use when asked to research a company or build a prospect dossier.
| Parameter | Required | Example |
|---|---|---|
| Domain | Yes | acme.com |
| Company name | No | Acme Corp |
| Contact name | No | Jane Doe |
| Contact title | No | VP Marketing |
python3 scripts/account-researcher.py --domain acme.com --company "Acme Corp"
For batch research:
python3 scripts/account-researcher.py prospects.json
Results are cached for 7 days in data/account-research/.
The engine produces a structured JSON dossier with: - Website analysis (title, description, body snippet, marketing gaps) - Tech stack (CRM, marketing tools, enterprise signals) - Hiring signals (growth indicators) - News/funding signals - 3-5 sentence research brief
Use when enriching a list of prospects with verified email addresses.
Create data/enrichment-config.json:
{
"email_validation_api_key": "YOUR_KEY",
"email_validation_api_url": "https://api.your-provider.com/v1/people/email-finder",
"email_validation_timeout_seconds": 10,
"fallback_tag": "linkedin-outreach-only"
}
python3 scripts/cascade-enricher.py input.json output.json
Waterfall logic: 1. Has email from primary source? → Done 2. Try email finder API → Found? → Done 3. Has LinkedIn URL? → Tag as fallback 4. None → Tag as no-contact
Use when sourcing, verifying, and uploading leads end-to-end.
| Parameter | Required | Example |
|---|---|---|
| Titles | Yes | VP Marketing, CMO |
| Industries | Yes | Marketing, SaaS |
| Company size | Yes | 11-50, 51-200 |
| Locations | Yes | United States |
| Campaign ID | Yes | Campaign UUID |
| Volume | Yes | 500 |
python3 scripts/lead-pipeline.py \
--source-api-key "$LEAD_SOURCE_API_KEY" \
--validation-api-key "$EMAIL_VALIDATION_API_KEY" \
--campaign-api-key "$CAMPAIGN_TOOL_API_KEY" \
--titles "VP Marketing,CMO,Head of Growth" \
--industries "Marketing,Advertising" \
--company-size "11,50" \
--locations "United States" \
--campaign-id "CAMPAIGN_UUID" \
--volume 500 \
--output-dir ./data/pipeline-runs/
Optional flags:
- --exclude-file /path/to/burned-emails.csv — additional exclusion list
- --dry-run — run everything except the final upload
- --keywords "SaaS,B2B" — additional search keywords
Pipeline saves a JSON run log to the output directory with full stats: - Sourced count, verification rate, dedup stats, upload results - Complete list of leads processed
Use for enriching inbound leads from webhooks, forms, or CRM triggers.
python3 scripts/lead-enricher.py [--dry-run] [--backfill N]
The enricher: 1. Parses inbound lead data (website forms, voice agent calls, etc.) 2. Looks up contact and company in CRM 3. Runs account research for context 4. Builds an enriched lead card with all available data
data/account-research/ to force refresh