Lead Dossier Skill
Multi-source account research, cascade enrichment, and lead pipeline.
by ericosiu·MIT license·★ 3,615 Stars on the repo·GitHub ↗
npx degit ericosiu/ai-marketing-skills/lead-dossier#main ~/.claude/skills/lead-dossierChecked ·commit main
Files of Lead Dossier Skill
Show the full text186 lines
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".
Lead Dossier Skill
Multi-source account research and lead enrichment pipeline for AI coding assistants.
Prerequisites
- Python 3.9+ with
requestsinstalled - API keys configured as environment variables (see
.env.example) - Optional: CRM access for contact/company enrichment
Environment Variables
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) |
Workflow 1: Account Research
Use when asked to research a company or build a prospect dossier.
Collect Parameters
| Parameter | Required | Example |
|---|---|---|
| Domain | Yes | acme.com |
| Company name | No | Acme Corp |
| Contact name | No | Jane Doe |
| Contact title | No | VP Marketing |
Run Research
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/.
Output Format
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
Workflow 2: Cascade Enrichment
Use when enriching a list of prospects with verified email addresses.
Prepare Config
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"
}
Run Enrichment
python3 scripts/cascade-enricher.py input.json output.json
Waterfall logic:
- Has email from primary source? → Done
- Try email finder API → Found? → Done
- Has LinkedIn URL? → Tag as fallback
- None → Tag as no-contact
Workflow 3: Full Lead Pipeline
Use when sourcing, verifying, and uploading leads end-to-end.
Collect Parameters
| 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 |
Run Pipeline
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
Review Output
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
Workflow 4: Real-Time Lead Enrichment
Use for enriching inbound leads from webhooks, forms, or CRM triggers.
Run Enricher
python3 scripts/lead-enricher.py [--dry-run] [--backfill N]
The enricher:
- Parses inbound lead data (website forms, voice agent calls, etc.)
- Looks up contact and company in CRM
- Runs account research for context
- Builds an enriched lead card with all available data
Safety Rules
- Never upload unverified leads — every email must pass validation
- Always deduplicate — check existing contacts before uploading
- Log everything — every run produces an auditable JSON log
- Rate limit aware — built-in delays and exponential backoff
- Idempotent — safe to re-run; duplicates are caught by dedup step
- Security gates — scan all inbound web content before processing
Troubleshooting
- Search API returns no results: Check title/industry spelling; try broader criteria
- Email validation 429s: Script handles with backoff; if persistent, reduce volume
- Campaign tool silent failures: Some APIs silently block at high request rates; scripts include batch delays
- Cache stale: Delete files in
data/account-research/to force refresh
| 1 | |
| 2 | |
| 3 | ## Preamble (runs on skill start) |
| 4 | |
| 5 | |
| 6 | # Version check (silent if up to date) |
| 7 | python3 telemetry/version_check.py 2>/dev/null || true |
| 8 | |
| 9 | # Telemetry opt-in (first run only, then remembers your choice) |
| 10 | python3 telemetry/telemetry_init.py 2>/dev/null || true |
| 11 | |
| 12 | |
| 13 | > **Privacy:** This skill logs usage locally to `~/.ai-marketing-skills/analytics/`. Remote telemetry is opt-in only. No code, file paths, or repo content is ever collected. See `telemetry/README.md`. |
| 14 | |
| 15 | |
| 16 | name: lead-dossier |
| 17 | description: > |
| 18 | Multi-source account research, cascade enrichment, and lead pipeline. |
| 19 | Combines website scraping, tech stack detection, CRM enrichment, hiring/news signals |
| 20 | into structured dossiers. Includes full lead sourcing pipeline: search → verify → dedupe → upload. |
| 21 | Triggers on: "research account", "build dossier", "enrich leads", "lead pipeline", |
| 22 | "source leads", "prospect research", "account intel", "cascade enrichment", |
| 23 | "lead scoring", "find leads", "verify emails", "upload leads". |
| 24 | |
| 25 | |
| 26 | # Lead Dossier Skill |
| 27 | |
| 28 | Multi-source account research and lead enrichment pipeline for AI coding assistants. |
| 29 | |
| 30 | ## Prerequisites |
| 31 | |
| 32 | Python 3.9+ with `requests` installed |
| 33 | API keys configured as environment variables (see `.env.example`) |
| 34 | Optional: CRM access for contact/company enrichment |
| 35 | |
| 36 | ## Environment Variables |
| 37 | |
| 38 | All API keys are configured via environment variables. Copy `.env.example` to `.env`: |
| 39 | |
| 40 | | Variable | Description | |
| 41 | |----------|-------------| |
| 42 | | `LEAD_SOURCE_API_KEY` | People/company search API | |
| 43 | | `EMAIL_VALIDATION_API_KEY` | Email verification service | |
| 44 | | `EMAIL_VALIDATION_API_URL` | Email verification endpoint | |
| 45 | | `CAMPAIGN_TOOL_API_KEY` | Outbound campaign platform | |
| 46 | | `CRM_API_KEY` | CRM API key | |
| 47 | | `CRM_BASE_URL` | CRM API base URL | |
| 48 | | `BUILTWITH_API_KEY` | BuiltWith tech detection (free tier works) | |
| 49 | |
| 50 | ## Workflow 1: Account Research |
| 51 | |
| 52 | Use when asked to research a company or build a prospect dossier. |
| 53 | |
| 54 | ### Collect Parameters |
| 55 | |
| 56 | | Parameter | Required | Example | |
| 57 | |-----------|----------|---------| |
| 58 | | Domain | Yes | acme.com | |
| 59 | | Company name | No | Acme Corp | |
| 60 | | Contact name | No | Jane Doe | |
| 61 | | Contact title | No | VP Marketing | |
| 62 | |
| 63 | ### Run Research |
| 64 | |
| 65 | |
| 66 | python3 scripts/account-researcher.py --domain acme.com --company "Acme Corp" |
| 67 | |
| 68 | |
| 69 | For batch research: |
| 70 | |
| 71 | python3 scripts/account-researcher.py prospects.json |
| 72 | |
| 73 | |
| 74 | Results are cached for 7 days in `data/account-research/`. |
| 75 | |
| 76 | ### Output Format |
| 77 | |
| 78 | The engine produces a structured JSON dossier with: |
| 79 | Website analysis (title, description, body snippet, marketing gaps) |
| 80 | Tech stack (CRM, marketing tools, enterprise signals) |
| 81 | Hiring signals (growth indicators) |
| 82 | News/funding signals |
| 83 | 3-5 sentence research brief |
| 84 | |
| 85 | ## Workflow 2: Cascade Enrichment |
| 86 | |
| 87 | Use when enriching a list of prospects with verified email addresses. |
| 88 | |
| 89 | ### Prepare Config |
| 90 | |
| 91 | Create `data/enrichment-config.json`: |
| 92 | |
| 93 | { |
| 94 | "email_validation_api_key": "YOUR_KEY", |
| 95 | "email_validation_api_url": "https://api.your-provider.com/v1/people/email-finder", |
| 96 | "email_validation_timeout_seconds": 10, |
| 97 | "fallback_tag": "linkedin-outreach-only" |
| 98 | } |
| 99 | |
| 100 | |
| 101 | ### Run Enrichment |
| 102 | |
| 103 | |
| 104 | python3 scripts/cascade-enricher.py input.json output.json |
| 105 | |
| 106 | |
| 107 | Waterfall logic: |
| 108 | Has email from primary source? → Done |
| 109 | Try email finder API → Found? → Done |
| 110 | Has LinkedIn URL? → Tag as fallback |
| 111 | None → Tag as no-contact |
| 112 | |
| 113 | ## Workflow 3: Full Lead Pipeline |
| 114 | |
| 115 | Use when sourcing, verifying, and uploading leads end-to-end. |
| 116 | |
| 117 | ### Collect Parameters |
| 118 | |
| 119 | | Parameter | Required | Example | |
| 120 | |-----------|----------|---------| |
| 121 | | Titles | Yes | VP Marketing, CMO | |
| 122 | | Industries | Yes | Marketing, SaaS | |
| 123 | | Company size | Yes | 11-50, 51-200 | |
| 124 | | Locations | Yes | United States | |
| 125 | | Campaign ID | Yes | Campaign UUID | |
| 126 | | Volume | Yes | 500 | |
| 127 | |
| 128 | ### Run Pipeline |
| 129 | |
| 130 | |
| 131 | python3 scripts/lead-pipeline.py \ |
| 132 | --source-api-key "$LEAD_SOURCE_API_KEY" \ |
| 133 | --validation-api-key "$EMAIL_VALIDATION_API_KEY" \ |
| 134 | --campaign-api-key "$CAMPAIGN_TOOL_API_KEY" \ |
| 135 | --titles "VP Marketing,CMO,Head of Growth" \ |
| 136 | --industries "Marketing,Advertising" \ |
| 137 | --company-size "11,50" \ |
| 138 | --locations "United States" \ |
| 139 | --campaign-id "CAMPAIGN_UUID" \ |
| 140 | --volume 500 \ |
| 141 | --output-dir ./data/pipeline-runs/ |
| 142 | |
| 143 | |
| 144 | Optional flags: |
| 145 | `--exclude-file /path/to/burned-emails.csv` — additional exclusion list |
| 146 | `--dry-run` — run everything except the final upload |
| 147 | `--keywords "SaaS,B2B"` — additional search keywords |
| 148 | |
| 149 | ### Review Output |
| 150 | |
| 151 | Pipeline saves a JSON run log to the output directory with full stats: |
| 152 | Sourced count, verification rate, dedup stats, upload results |
| 153 | Complete list of leads processed |
| 154 | |
| 155 | ## Workflow 4: Real-Time Lead Enrichment |
| 156 | |
| 157 | Use for enriching inbound leads from webhooks, forms, or CRM triggers. |
| 158 | |
| 159 | ### Run Enricher |
| 160 | |
| 161 | |
| 162 | python3 scripts/lead-enricher.py [--dry-run] [--backfill N] |
| 163 | |
| 164 | |
| 165 | The enricher: |
| 166 | Parses inbound lead data (website forms, voice agent calls, etc.) |
| 167 | Looks up contact and company in CRM |
| 168 | Runs account research for context |
| 169 | Builds an enriched lead card with all available data |
| 170 | |
| 171 | ## Safety Rules |
| 172 | |
| 173 | **Never upload unverified leads** — every email must pass validation |
| 174 | **Always deduplicate** — check existing contacts before uploading |
| 175 | **Log everything** — every run produces an auditable JSON log |
| 176 | **Rate limit aware** — built-in delays and exponential backoff |
| 177 | **Idempotent** — safe to re-run; duplicates are caught by dedup step |
| 178 | **Security gates** — scan all inbound web content before processing |
| 179 | |
| 180 | ## Troubleshooting |
| 181 | |
| 182 | **Search API returns no results**: Check title/industry spelling; try broader criteria |
| 183 | **Email validation 429s**: Script handles with backoff; if persistent, reduce volume |
| 184 | **Campaign tool silent failures**: Some APIs silently block at high request rates; scripts include batch delays |
| 185 | **Cache stale**: Delete files in `data/account-research/` to force refresh |
| 186 |
Discussion
Browse more free Claude skills.