Lead Dossier Skill

Multi-source account research, cascade enrichment, and lead pipeline.

by ericosiu·MIT license·★ 3,615 Stars on the repo·GitHub ↗

Use now

Files of Lead Dossier Skill

ericosiu/main1 file shown
SKILL.md
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 requests installed
  • 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:

  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

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:

  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

Safety Rules

  1. Never upload unverified leads — every email must pass validation
  2. Always deduplicate — check existing contacts before uploading
  3. Log everything — every run produces an auditable JSON log
  4. Rate limit aware — built-in delays and exponential backoff
  5. Idempotent — safe to re-run; duplicates are caught by dedup step
  6. 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```bash
6# Version check (silent if up to date)
7python3 telemetry/version_check.py 2>/dev/null || true
8 
9# Telemetry opt-in (first run only, then remembers your choice)
10python3 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---
16name: lead-dossier
17description: >
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 
28Multi-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 
38All 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 
52Use 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```bash
66python3 scripts/account-researcher.py --domain acme.com --company "Acme Corp"
67```
68 
69For batch research:
70```bash
71python3 scripts/account-researcher.py prospects.json
72```
73 
74Results are cached for 7 days in `data/account-research/`.
75 
76### Output Format
77 
78The 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 
87Use when enriching a list of prospects with verified email addresses.
88 
89### Prepare Config
90 
91Create `data/enrichment-config.json`:
92```json
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```bash
104python3 scripts/cascade-enricher.py input.json output.json
105```
106 
107Waterfall logic:
1081. Has email from primary source? → Done
1092. Try email finder API → Found? → Done
1103. Has LinkedIn URL? → Tag as fallback
1114. None → Tag as no-contact
112 
113## Workflow 3: Full Lead Pipeline
114 
115Use 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```bash
131python3 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 
144Optional 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 
151Pipeline 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 
157Use for enriching inbound leads from webhooks, forms, or CRM triggers.
158 
159### Run Enricher
160 
161```bash
162python3 scripts/lead-enricher.py [--dry-run] [--backfill N]
163```
164 
165The enricher:
1661. Parses inbound lead data (website forms, voice agent calls, etc.)
1672. Looks up contact and company in CRM
1683. Runs account research for context
1694. Builds an enriched lead card with all available data
170 
171## Safety Rules
172 
1731. **Never upload unverified leads** — every email must pass validation
1742. **Always deduplicate** — check existing contacts before uploading
1753. **Log everything** — every run produces an auditable JSON log
1764. **Rate limit aware** — built-in delays and exponential backoff
1775. **Idempotent** — safe to re-run; duplicates are caught by dedup step
1786. **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