--- name: lead-researcher description: > Qualify and prioritize sales leads against an ICP definition, score lead lists for outreach worthiness, and draft personalized outreach hooks. Use when building a target account list, qualifying inbound leads, prepping for outreach, or when the user mentions lead research, prospecting, sales outreach, ICP scoring, or account targeting. license: MIT + Commons Clause metadata: version: 1.0.0 author: borghei category: personal-productivity domain: sales-prospecting updated: 2026-05-04 python-tools: lead_qualifier.py tech-stack: sales, outbound, CRM --- # Lead Researcher Score and qualify sales leads against an Ideal Customer Profile (ICP) definition, then draft outreach hooks tied to specific ICP signals. --- ## Table of Contents - [Keywords](#keywords) - [Quick Start](#quick-start) - [Core Workflows](#core-workflows) - [Tools](#tools) - [Reference Guides](#reference-guides) - [Templates](#templates) - [Best Practices](#best-practices) --- ## Keywords lead, leads, prospect, prospecting, sales, outbound, ICP, ideal customer profile, qualify, qualification, scoring, account list, target account, outreach, cold email, BDR, SDR, account executive --- ## Quick Start ### Score a Lead List in 10 Minutes 1. Define your ICP in `icp.json` using the schema in `assets/icp_schema.json` 2. Save your lead list as a CSV with columns: `company,industry,size,country,website,signals` 3. Run the qualifier: ```bash python scripts/lead_qualifier.py icp.json leads.csv ``` 4. Review the ranked output — top 20% is your A-tier outreach list --- ## Core Workflows ### Workflow 1: ICP-Based Lead Scoring **Goal:** Rank a list of candidate accounts so the top of the list reflects the best fit, not the most recent import. **Steps:** 1. Build your ICP in `icp.json` — see `assets/icp_schema.json` for the full schema 2. Capture leads in a CSV with at minimum: `company,industry,size,country` 3. Run: `python scripts/lead_qualifier.py icp.json leads.csv` 4. Sort the result by `score` (highest first); the top 20% is your A-tier 5. Discard everything below the disqualification threshold rather than mass-emailing **Expected Output:** Ranked list with score, tier (A/B/C/disqualified), and reason per lead. **Time Estimate:** 10-15 minutes for a list of 200 leads. ### Workflow 2: ICP Definition **Goal:** Convert a fuzzy "we sell to ops teams at mid-market SaaS" intuition into a structured ICP that the qualifier can actually score against. **Steps:** 1. Pull the company names of your last 20-50 best customers 2. Identify the shared signals: industry, size band, geography, tech stack, pain trigger 3. For each, decide whether it's a **must-have**, **nice-to-have**, or **disqualifier** 4. Encode in `icp.json` per `references/icp_framework.md` 5. Pressure-test by scoring last quarter's closed-won and closed-lost accounts — the model should rank the wins above the losses **Expected Output:** A versioned `icp.json` that retroactively predicts your past wins. **Time Estimate:** 1-2 hours for first pass, 30 minutes per quarterly refresh. ### Workflow 3: Outreach Hook Drafting **Goal:** Write outreach where the personalization actually mentions a real signal, not a fake "I noticed you posted on LinkedIn." **Steps:** 1. Take the qualifier output for an A-tier lead 2. Read the matched ICP signals — these are your hooks 3. Use the outreach template in `assets/outreach_template.md` 4. Personalize the opening line with the strongest signal (e.g., recent funding, hiring spike, product launch, public quote about a pain you solve) 5. Keep the rest of the email short — sub-90 words **Expected Output:** First-touch outreach email under 90 words with a real signal-based hook. **Time Estimate:** 5 minutes per A-tier lead. --- ## Tools ### lead_qualifier.py Reads an ICP JSON file and a leads CSV, returns a scored & tiered list. ```bash # Human-readable python scripts/lead_qualifier.py icp.json leads.csv # JSON for programmatic use python scripts/lead_qualifier.py icp.json leads.csv --json ``` **Scoring model:** - Each ICP attribute has a weight (default 10) and direction (must / nice / disqualify) - Must-have hits: full weight - Nice-to-have hits: half weight - Disqualifier hits: lead drops out of consideration entirely - Score is normalized to 0-100 --- ## Reference Guides - **`references/icp_framework.md`** — How to define an ICP that actually predicts deal velocity, with worked examples by GTM motion (PLG, sales-led, channel) --- ## Templates - **`assets/icp_schema.json`** — JSON schema for an ICP definition file - **`assets/outreach_template.md`** — Cold-touch email template with placeholder slots tied to ICP signals --- ## Best Practices - **Disqualify hard.** Mediocre leads are worse than no leads — they consume rep time and damage sender reputation. - **Keep ICP versioned.** When deal velocity drops, your ICP is often stale. Re-derive every quarter. - **One signal per email.** Multi-signal openers feel like research dumps; one well-chosen signal feels human. - **Leads are not opportunities.** A scored A-tier lead is permission to reach out, not a forecasted deal. - **Logs over feel.** Track which signals correlate with closed-won — let data update the ICP, not vibes. --- ## Integration Points - Pairs with `marketing/cold-email/` for sequence design - Pairs with `sales-success/` skills for account executive handoff - Feeds into `business-growth/` revenue forecasting