| name | gtm-pipeline:pipeline |
| description | Plan and execute a full GTM lead generation pipeline. Use when a client needs end-to-end pipeline orchestration — from company discovery to enriched contacts. Determines workflow (Company-First vs Signal-First), assesses starting data, plans skill sequence with cost estimates, and chains skill outputs. Also triggers on "run the pipeline", "start pipeline for [client]", "full pipeline", "Stripe payment trigger". |
Pipeline
Plan and orchestrate a full GTM pipeline — from discovery to enriched contact list. Determines which skills to run, in what order, based on client requirements and starting data.
Read .agents/skills/_shared/conventions.md before executing.
When to Use
- Client needs a complete lead generation pipeline (not just one skill)
- You need to determine the right workflow based on what data exists
- Stripe payment trigger: execute full pipeline
- Any request that spans multiple GTM skills
Step 1 — Assess Starting Point
Ask: What data does the user have?
| Starting Point | Available Data | Next Action |
|---|
| Nothing (just an ICP description) | ICP prompt only | Determine workflow → full pipeline |
| Company list | CSV with company names/domains | Skip company-search → company-enrichment |
| Contacts CSV | Names + companies, missing contact info | Skip to people-enrichment |
| Signal data | Companies found via signals | Skip to company-enrichment/scoring |
| Demo webhook | ICP prompt, ~10 contacts scope | Run demo skill |
| SN search URL | Sales Navigator saved search | Run company-search (SN+PB) → continue |
Step 2 — Determine Workflow
Company-First Workflow (Finite Markets)
When: Client provides a company list, known industry, or uses Sales Navigator. The market is bounded — you know (or can enumerate) the target companies.
Full sequence:
1. Company Search → csv/input/companies_raw.csv
2. Company Enrichment → csv/intermediate/companies_enriched.csv
3. ICP Scoring → csv/intermediate/companies_scored.csv (credit-saving gate: icp_score >= 70)
4. Signal Search → csv/intermediate/signals.csv (runs on gated set; doesn't read icp_score)
5. People Search → csv/intermediate/contacts_found.csv
6. Contact Filter → csv/intermediate/contacts_filtered.csv
7. People Enrichment → csv/output/contacts_enriched.csv
The icp_score >= 70 gate at step 3 is for credit savings only — signal-search itself doesn't depend on the ICP score. Skip the gate if you want to score signals on the full enriched set.
Signal-First Workflow (Infinite Markets)
When: No company list — discover companies via buying intent signals. The market is unbounded — you find companies by their behavior.
Full sequence:
1. Signal-based Discovery → companies found via signals (FindAll, Firecrawl Agent, LinkedIn Jobs)
writes csv/input/companies_raw.csv
2. Company Enrichment → csv/intermediate/companies_enriched.csv
3. ICP Scoring → csv/intermediate/companies_scored.csv (optional gate)
4. People Search → csv/intermediate/contacts_found.csv
5. Contact Filter → csv/intermediate/contacts_filtered.csv
6. People Enrichment → csv/output/contacts_enriched.csv
In Signal-First, signal-search runs on raw company names from the discovery channels (no enrichment needed yet). Company enrichment and ICP scoring happen after to filter the discovered set.
Shortcut Flows
| Starting Point | Skills Invoked |
|---|
| Demo webhook (ICP prompt only) | demo skill (people-search → contact-filter → people-enrichment → messages, 10 contacts, no phone) |
| Company list provided | company-enrichment → (optional: signal-search) → people-search → contact-filter → people-enrichment |
| Contacts CSV provided | people-enrichment only |
| Persona prospecting (no companies) | people-search (persona mode) → contact-filter → people-enrichment |
| Full pipeline (Stripe payment) | Full Workflow 1 or 2 based on requirements |
Step 3 — Clarify Requirements
Before executing, confirm with the user:
ICP Definition
- Industry / vertical
- Target roles / job titles
- Company size (headcount range)
- Location / geography
- Revenue range (if relevant)
- Exclusions (e.g. no software companies, no enterprise)
Scope & Budget
- How many contacts needed? (10 for demo, 100+, 500+?)
- Credit budget constraints?
- Enrichment scope: email only? email + phone?
- Message generation needed?
Trigger Context
- Demo mode? (no phone, ~10 contacts)
- Stripe payment? (full pipeline, budget confirmed)
- Manual request? (flexible scope)
Save ICP to {client-slug}-gtm/context/icp.md.
Step 4 — Plan the Sequence
Based on workflow + starting point, build the execution plan:
- List which skills run, in what order
- Recommend providers at each step (with costs from skill docs)
- Estimate total credits and cost across all steps
- Identify n8n flow customizations needed:
- ICP Google Doc (for ICP scoring in company-enrichment)
- Offering section (for signal scoring in signal-search)
- Present plan for user approval before executing anything
Cost Estimation Template
## Pipeline Cost Estimate
### Step 1: Company Search
- Provider: [recommended]
- Records: ~{n}
- Est. cost: {credits} credits (~${cost})
### Step 2: Company Enrichment
- Provider: [recommended]
- Records: ~{n}
- Est. cost: {credits} credits (~${cost})
### Step 3: ICP Scoring
- LLM: [ask user which model]
- Records: ~{n}
- Est. cost: ~${cost} (LLM token pricing)
### Step 4: Signal Search (companies with icp_score >= 70 if gating)
- Sources: [which of the 4 sources]
- LLM for scoring: [ask user]
- Records: ~{n} (est. {pct}% pass ICP gate, or full set if no gate)
- Est. cost: {credits} credits + ~${llm_cost}
### Step 5: People Search
- Provider: [recommended]
- Records: ~{n} contacts across ~{m} companies
- Est. cost: {credits} credits (~${cost})
### Step 6: Contact Filter
- No API cost — local classification only
- Records: ~{n} contacts in → ~{n_filtered} contacts out (est. {pct}% pass ICP filter)
- ICP dimensions: job tier, industry tier, location tier, company size
### Step 7: People Enrichment
- Email provider: [recommended]
- Phone provider: [recommended or "skip — demo mode"]
- Records: ~{n}
- Est. cost: {credits} credits (~${cost})
### Total
- Credits: ~{total_credits}
- Cost: ~${total_cost}
Step 5 — Execute and Chain
Invoke skills in order. After each step:
- Review output quality — hit rates, data completeness, issues
- Log to run_log.md — timestamp, provider, records, credits, duration
- Log provider performance — to
context/provider_performance.md
- Chain output → input — each skill's output CSV becomes the next skill's input
- Decide whether to proceed — if quality is poor, flag and discuss before continuing
Chaining Rules
| Skill Output | Next Skill Input |
|---|
csv/input/companies_raw.csv | company-enrichment reads this |
csv/intermediate/companies_enriched.csv | ICP scoring reads this |
csv/intermediate/companies_scored.csv | signal-search reads this (optional credit-saving gate: icp_score >= 70) |
csv/intermediate/signals.csv | Used for outreach context, not a direct input |
csv/intermediate/contacts_found.csv | contact-filter reads this |
csv/intermediate/contacts_filtered.csv | people-enrichment reads this |
csv/output/contacts_enriched.csv | Final output — ready for outreach or message generation |
After Each Step
Print the standardized Run Summary (from conventions.md) and ask:
- Results look good? Proceed to next step?
- Any issues to address first?
- Want to adjust providers or parameters?
Step 6 — Customize Per Client
For n8n-backed steps, customize:
ICP Scoring (company-enrichment Phase 2)
- Create/connect a Google Doc with the client's ICP definition
- Or write to
context/icp.md and use that as the reference
- Adjust score threshold (default: >= 70) based on selectivity
Signal Assessment (signal-search)
- Replace the offering section in the Signal Assessment user prompt with the client's value proposition
- Adjust the web search objective query for client-specific signal types
- Adjust Firecrawl crawl prompt if the client's signals differ from the default
Working Directory
The pipeline creates and manages the full directory structure:
{client-slug}-gtm/
├── context/
│ ├── icp.md
│ └── provider_performance.md
├── prompts/
│ └── message_prompt.md (demo only)
├── csv/
│ ├── input/
│ │ ├── companies_raw.csv
│ │ └── contacts_raw.csv
│ ├── intermediate/
│ │ ├── companies_enriched.csv
│ │ ├── companies_scored.csv
│ │ ├── signals.csv
│ │ ├── contacts_found.csv
│ │ ├── contacts_filtered.csv
│ │ └── request_ids.json
│ └── output/
│ ├── contacts_enriched.csv
│ └── messages.csv (demo only)
└── run_log.md
Decision Logic Summary
IF demo mode:
→ Run demo skill directly
IF user has contacts CSV:
→ people-enrichment only
IF user has company list:
→ company-enrichment → (optional: signal-search) → people-search → people-enrichment
IF user has nothing (just ICP):
→ Ask: Company-First or Signal-First?
→ Company-First: company-search → company-enrichment → signal-search → people-search → contact-filter → people-enrichment
→ Signal-First: signal-search (discovery) → company-enrichment → people-search → contact-filter → people-enrichment
IF paid trigger (e.g. Stripe webhook):
→ Full pipeline based on workflow determination above
What's Missing (To Document)
- Payment trigger integration (e.g. Stripe webhook → pipeline invocation)
- Automated webhook integration for demo triggers
- Orchestration platform (e.g. n8n) integration for creating client-specific flow copies
- Pipeline recovery: resuming a partially completed pipeline from the last successful step
- Cost tracking dashboard / running totals across multiple pipeline runs