Systems Lab

Agent skill

prospect-discovery-pipeline

Use when a teammate wants a full discovery-to-outreach pipeline anchored on existing clients.

activeNeeds a keyActs undeclared761 words

Filed under Prospecting and list building and Calls, demos and discovery.

From Othmane-Khadri/YALC-the-GTM-operating-system · 61 skills · 290 · pushed 2026-08-20

What it does when it runs

Use when a teammate wants a full discovery-to-outreach pipeline anchored on existing clients. Triggers include "find prospects like [client]", "build a target list like [domain]", "lookalike discovery for [client]", "discovery to outreach for [criteria]", "10 companies similar to [X] with a CMO", or any multi-step request combining lookalike search + decision-maker identification + signal enrichment + LinkedIn variant drafting.

Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
  • CRUSTDATA_API_KEY
  • PREDICTLEADS_API_KEY
  • PREDICTLEADS_API_TOKEN
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
shell

Ask about prospect-discovery-pipeline

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/Othmane-Khadri/YALC-the-GTM-operating-system.git /tmp/YALC-the-GTM-operating-system
git -C /tmp/YALC-the-GTM-operating-system sparse-checkout set ".claude/skills/prospect-discovery-pipeline"
mkdir -p ~/.claude/skills/prospect-discovery-pipeline
cp -R "/tmp/YALC-the-GTM-operating-system/.claude/skills/prospect-discovery-pipeline/." ~/.claude/skills/prospect-discovery-pipeline/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Before you install: this skill will not complete its job on a bare agent. It needs CRUSTDATA_API_KEY, PREDICTLEADS_API_KEY, PREDICTLEADS_API_TOKEN, which you have to obtain separately.

Reproduced in full from Othmane-Khadri/YALC-the-GTM-operating-system/blob/5686d1f2f526346133f78eef3349fc5a655757b4/.claude/skills/prospect-discovery-pipeline/SKILL.md, which is licensed MIT (repository). 761 words, 14 headings.

Prospect Discovery Pipeline

End-to-end pipeline: PredictLeads lookalikes → ICP filter → Crustdata CMO finder → multi-signal enrichment → 2 LinkedIn variants drafted with per-lead personalization. Pauses for user review before any expensive operation. Always quotes credit cost up front.

When to use

  • Building a target account list anchored on 1–2 known clients
  • Generating a campaign-ready batch (10–25 leads with full signal context)
  • Producing 2 A/B-testable LinkedIn message variants tied to actual signal data per lead

Don't use when: ad-hoc lookup of one company (use predictleads-signals); just lookalike domains without contacts (use predictleads-lookalikes); enriching a list you already have qualified leads for (use signals:enrich --result-set directly).

The 5-phase flow

Always follow this order. Quote credit cost before each phase.

Phase 1 — Discovery (2 PL credits for 2 anchors)

npx tsx src/cli/index.ts signals:similar --domain anchor1.com --limit 50
npx tsx src/cli/index.ts signals:similar --domain anchor2.com --limit 50

Merge into a candidate pool, dedupe by domain. Expect 30–80 unique candidates per pair.

Phase 2 — ICP filter (FREE, pause for user review)

Hand-filter the pool against the user's ICP criteria:

  • Employee count (use Crustdata company_identify — FREE — only when judgement uncertain)
  • Industry vertical (back-office SaaS, commerce infra, HR-tech, etc.)
  • HQ region
  • Marketing maturity proxies (visible content investment)

STOP and present the 10 finalists to the user before spending more credits. Surface any obvious gaps or weak fits. Wait for explicit approval.

Phase 3 — CMO finder (3 Crustdata credits, batch)

Single batch search across all 10 companies:

filters = {
  op: 'and',
  conditions: [
    { column: 'current_employers.company_website_domain', type: 'in', value: ['10 domains'] },
    { column: 'current_employers.title', type: '[.]', value: 'Marketing' },
    { column: 'current_employers.seniority_level', type: 'in', value: ['CXO', 'Vice President', 'Director'] },
  ],
}
limit: 50

Pick 1 marketing leader per company (prefer CMO > VP > Head > Director).

Common gotcha: some companies' websites are stored in Crustdata as ATS or marketing domains (e.g., hubs.li for Shopware), not their actual .com. If a company returns 0 hits, do a fallback search by current_employers.name substring.

Skip people_enrich unless the campaign needs emails (LinkedIn-only campaigns don't). Saves ~30 credits.

Phase 4 — Multi-signal enrichment (40 PL credits for 10 finalists)

for d in domain1.com domain2.com ...; do
  npx tsx src/cli/index.ts signals:fetch --domain "$d"
done

Or use the bulk shortcut if leads already in a result set:

npx tsx src/cli/index.ts signals:enrich --result-set <id>

Phase 5 — Hydrate templates + draft 2 variants (FREE)

Pick the single most outreach-relevant signal per company (most recent news > recent financing > recent job_opening). Build a personalization_natural line per lead that:

  • Never says "I saw your [signal]" (per outbound rules)
  • Embeds the signal as context for a category insight
  • Stays ≤18 words per sentence
  • Has no dashes, no I openers, says Hello, ends with a specific CTA

Draft both variants with different angles (e.g., results-led case study vs. category-shift narrative). Save the full draft to 00_Inbox/predictleads-discovery-{date}.md.

Do not push to Notion or activate the campaign without explicit user approval.

Total cost (typical)

PhaseCredits
1. Lookalikes (2 anchors)2 PL
2. ICP filter0
3. CMO batch search3 Crustdata
4. Multi-signal enrichment (10 companies × 4 types)40 PL
5. Template hydration0
Total~45 credits (42 PL + 3 Crustdata)

If people_enrich is needed: +30 Crustdata credits.

Verification checkpoints

The pipeline pauses at:

  1. End of Phase 2 — present 10 finalists, wait for "approved"
  2. End of Phase 5 — present hydrated drafts, wait for "approved"

Never push to Notion / activate Unipile campaign without explicit user approval at the second checkpoint.

Output artifacts

  • SQLite: company_signals rows for the 10 finalists
  • File: 00_Inbox/predictleads-discovery-{date}.md with the 2 hydrated variants
  • Optional: HTML dashboard via predictleads-dashboard skill

Common pitfalls

  • Megacaps in the lookalike pool: PredictLeads returns SAP/Microsoft/Oracle for B2B SaaS seeds. Filter manually before Phase 3.
  • Crustdata domain mismatch: search by company name as fallback when domain returns 0.
  • Personalization that flag-waves: "I saw your funding round" violates outbound rules. Reframe as category context.

Required env

PREDICTLEADS_API_KEY, PREDICTLEADS_API_TOKEN, CRUSTDATA_API_KEY in ~/.gtm-os/.env. See TEAM_SETUP.md.

Related skills

  • predictleads-signals — single-company ad-hoc
  • predictleads-lookalikes — discovery only, no outreach
  • predictleads-dashboard — HTML viz of enriched signals
  • unipile-campaign — what runs the actual outreach after this skill drafts the variants

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what prospect-discovery-pipeline does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.