# Outreach Research Pass

> Do the research before a single cold line is written. Gates on ICP first, sources prospects by the intent signal itself (not generic lists scored after the fact), stacks and dates every signal onto one identity, then runs a strict two-pass: score and classify and emit a single angle, then personalise from that angle. Spend is gated on the score; every claim must trace to a verified signal. Use this before personalising any outreach at scale. Produces a per-prospect dossier and stops.

- Skill: `robdasi/outreach-research-pass` (Agent Skill)
- Install (CLI): `npx skillmds@latest add robdasi/outreach-research-pass`
- Raw SKILL.md: https://api.skillmd.com/api/skills/robdasi/outreach-research-pass/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- License: MIT
- Author: robdasi (https://skillmd.com/u/robdasi)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/robdasi/outreach-research-pass

---


# Outreach Research Pass

Cold email is dead and signal email works, but only if the system actually knows something. Most "AI outreach" writes the email and skips the part that makes personalisation true. The result is mail-merge with a thesaurus.

This skill does the research, not the writing. It's the pass I run before any message exists: source by intent, stack the signals, score and pick one angle, and only then hand off to a writing step. The whole discipline is that personalisation is *downstream* of structured research, never freestyled. The thing it builds is a dossier a writing step consumes, not a draft.

Run the pass, then stop.

## Inputs (ask for whatever is missing)

- **Who you sell to** (required): the offer, and the buying profile of a fit.
- **The raw input**: the prospects or the source you're pulling from (a search, a list, an export).
- *Optional:* what paid enrichment costs you per lead, and any disqualifiers you already know.

## The method

1. **Gate on ICP first, and hard-skip.** Define the fit by *buying profile* — who they are, their size band, what they already use, who has authority — not by a topic-affinity proxy like "has posted about AI." Write the disqualifiers explicitly (wrong vertical, wrong size, a competitor's tool is their default answer) and skip those before spending a cent or a token on them.

2. **Engineer the intent into the source.** Don't scrape a generic list and hope to score intent back out of it. Search for the signal directly: people asking for help, expressing pain, naming a competitor they want to leave, struggling to hire, or hitting a budget/timing trigger. A query built around expressed pain returns leads with active intent; a query built around a topic returns an audience. Source high-intent, don't filter low-intent.

3. **Stack and date every signal onto one identity.** Each signal carries a **strength** (high / medium / low), a **source**, and a **date**. A post author outranks a commenter outranks a liker. Recency is a tier: a job change inside 30 days is high, inside 90 is medium; funding inside 60 days is high. Merge signals for the same person or company onto one record and rank by how many stacked — three medium signals on one identity beat one high on another.

4. **Pass one — research, don't write.** Score the lead 1-100, classify it into a small `leadType` set (so the angle and the offer can branch on it), write the one-line reasoning, and emit a single **suggested angle** — the specific hook this outreach should lead with. The output of pass one is structure, not prose.

5. **Pass two — personalise from the angle.** The writing step consumes the suggested angle. It never invents a hook of its own. If pass one didn't produce a defensible angle, that's a signal the lead is thin, not a cue to improvise.

6. **Gate spend on the score.** Only leads above the outreach threshold get a message generated; only the strongest get paid enrichment (find/verify the email), and estimate the credit cost before each batch. Everything below the line is dropped, not messaged. Cheap filtering protects the expensive steps.

7. **No signal, no claim.** Every personalised line must trace to a signal you can point at — a URL and a date. If you can't cite it, you don't say it. This is the rule that separates research-led outreach from a hallucinated compliment.

8. **Tag the fallbacks.** When the model fails and you drop to a default score or default copy, mark that record (`source: fallback`) so you can audit later how much of a batch was genuinely researched versus filled in. A batch that's 60% fallback isn't a researched batch.

## Output

Produce a per-prospect dossier: the **signals** (each with strength, source, date), the **score** and **leadType**, the single **suggested angle** with the URL+date it rests on, and the **keep / kill / enrich** verdict with the reason. Flag any prospect kept without a verified signal — that one needs research, not a message.

Then stop. The dossier is the deliverable. Writing from it is the next step, and now every line in that message has something true underneath it.

