Skip to content
Marketing
Skill

/outreach-icp-finder

Find your PROVEN ideal customer profile from your own outreach data — who actually replies, accepts and shows interest — then find more like them. Reads La Growth Machine via its MCP, or a CSV export from any outreach tool (lemlist, Instantly, Smartlead, HeyReach, Apollo,

From plugin
gtm-system
4013 skills
Install
$ npx -y skills add LaGrowthMachine/gtm-system --skill outreach-icp-finder --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/outreach-icp-finder

Context preview

The summary Claude sees to decide when to auto-load this skill.

Find your PROVEN ideal customer profile from your own outreach data — who actually replies, accepts and shows interest — then find more like them. Reads La Growth Machine via its MCP, or a CSV export from any outreach tool (lemlist, Instantly, Smartlead, HeyReach, Apollo,

SKILL.md

outreach-icp-finder.SKILL.md
name: outreach-icp-finder
description: "Find your PROVEN ideal customer profile from your own outreach data — who actually replies, accepts and shows interest — then find more like them. Reads La Growth Machine via its MCP, or a CSV export from any outreach tool (lemlist, Instantly, Smartlead, HeyReach, Apollo, Waalaxy…). Use when someone asks which job titles, seniorities, industries, company sizes or countries reply to their cold outreach, wants reply or positive-reply rate by segment, the ICP behind their replies, who to stop contacting, or a data-driven lookalike from engagement. Triggers: 'who replies to my outreach', 'ICP from my campaigns', 'analyze my replies', 'reply rate by job title', 'who should I target next', 'what's my real ICP', 'qui répond à mes campagnes', 'profil des leads qui répondent'. For SDRs, Heads of Sales/Growth, RevOps, GTM engineers, founders, agencies. Statistically guarded (confidence intervals, minimum volumes, confounding check). Hands off to sales-nav-search-builder. Maintained by La Growth Machine."
category: fuel-my-pipeline
type: use-case
tags: [analysis, extrapolating]

Outreach ICP Finder

Turns the outreach you already ran into a **proven** ideal customer profile — which job titles, seniorities, industries, company sizes and countries actually reply and show interest, which ones waste your touches — then helps find more of the good ones.

Output discipline — read this first

When you run this skill, **return only the deliverables — nothing else.** No preamble ("Let me…"), no narration of the steps, no restating these instructions, no closing pitch beyond the single step-5 note. **Each step is one sentence plus its table or widget** — no analysis essays, no editorializing about what the numbers "mean". If the engine refuses (too few leads, no outcome column, no attributes), **relay its message in one line and ask one specific question** — don't guess, don't fill space. Otherwise: output the five deliverables and stop.

Authority — read this first

**Everything you need is inline in this file.**

  • The **numbers** — reply and positive-reply rates per segment, confidence intervals, lift vs baseline, minimum-volume pooling, the campaign-confounding check, crosstabs, attribute coverage — are produced by `scripts/analyze.py`. **Never compute these yourself.** Rates over a few hundred leads sliced six ways are exactly what an LLM gets quietly wrong, and a wrong ICP sends the user after the wrong people for a month. Run the script; reason over its JSON.
  • The **labeling** — sorting reply texts into the five fixed labels — is your job when the data has reply text but no labels (see *Labeling replies*). You label; the script counts.
  • The **judgment** — clustering the significant segments into 2–3 named archetypes, reading confounds, deciding what to flag — is your job, using the rules below.
  • `references/title-taxonomy.json` holds the job-title → seniority/function rules and the reply-label vocabulary. The script loads it; **you don't need to read it** unless a title family is systematically misclassified and you want to extend a rule.
  • `examples/sample-outreach.csv` is a fictional 620-row dataset for a worked run. `scripts/analyze.py --test` is the self-test.

What it does

The job, in four moves:

1. **Assemble** one row per contacted lead: attributes (job title, industry, location, company size) + outcomes (accepted, replied, reply label) + the campaign it came from. 2. **Label** replies where needed, so "interested" and "no thanks" stop counting the same. 3. **Run the engine** — it picks the primary outcome (positive replies when labels allow, plain replies otherwise), computes per-segment rates with 95% Wilson intervals, flags segments that only look good because one strong campaign targeted them, and pools anything below the volume floor. 4. **Read it** into 2–3 ICP archetypes with a one-click "find more like this", plus a short "stop contacting" list.

Workflow

1. **Get the data** — one of three lanes (see *Getting the data*): the La Growth Machine MCP, a CSV export from any outreach tool, or another tool's MCP. Persist to a file (`/tmp/outreach.csv` or `.json`). 2. **Label replies** if the file has reply text but no label column (see *Labeling replies*). Write labels back into the file. 3. **Run the engine:**

   python3 scripts/analyze.py /tmp/outreach.csv

Useful flags: `--min-cell 30` (contacted leads a segment needs to be reported alone; lower to 20 only on very homogeneous data), `--min-contacted 100`, `--min-outcomes 20`, `--today YYYY-MM-DD`. The script **refuses** when it genuinely can't proceed — fewer than 100 contacted leads, fewer than 20 replies, no outcome column, no attribute column. When it refuses, relay the reason and ask how to widen the data (more campaigns, longer window); don't lower thresholds to force an answer. 4. **Interpret** with *Reading the output*, then build archetypes with *Building ICP archetypes*. 5. **Present** the five deliverables (see *Output & handoff*).

Getting the data

Whatever the source, the file must carry, per lead: **an identifier** (lead id or email — used for dedup only, never output), **attributes** (job title at minimum; industry, location, company size when available), **outcomes** (replied; accepted and a reply label when available), and **the campaign** (so the engine can check for confounding). Headers are matched loosely, English or French (`Job title` / `Poste`, `Industry` / `Secteur`, `Location` / `Pays`, `Company size` / `Effectifs`, `Replied` / `A répondu`, `Reply label` / `Catégorie`, `Campaign` / `Campagne`). Dates, `yes`/`1`/`true`, or any non-empty text count as truthy.

Lane A — La Growth Machine MCP (native)

Bounded work: a handful of calls per campaign, not an investigation. **Hard budget: ~100 tool calls in total — about 40 for steps 1–3 (campaigns, outcomes, attributes) and up to 60 for step 4 (one call per labeled reply).** Whe

Read more
Ships withgtm-system

The open-source GTM toolkit for Claude: skills and an MCP server to run outbound from the chat.

Get the whole plugin

Other skills on gtm-system.