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.
Installs into .claude/skills of the current project.
Are you the author of Lead Researcher?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/borghei-lead-researcher)
---
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