Turns raw customer research signals (interviews, support tickets, reviews, sales calls, churn notes) into a sharp ICP profile: trigger event, JTBD, deciding language, alternatives considered, and segment priority. Required upstream input for /positioning, /launch, and /growth-experiment. Use before any strategy work when "who exactly are we targeting" is genuinely unclear, or when churn patterns have shifted.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Instruções da origem · Visualização somente leitura
name
icp-research
description
Turns raw customer research signals (interviews, support tickets, reviews, sales calls, churn notes) into a sharp ICP profile: trigger event, JTBD, deciding language, alternatives considered, and segment priority. Required upstream input for /positioning, /launch, and /growth-experiment. Use before any strategy work when "who exactly are we targeting" is genuinely unclear, or when churn patterns have shifted.
triggers
["/icp-research","user mentions needing to define or refine ICP","positioning, launch, or growth-experiment workflow lacks ICP context","churn patterns have shifted and ICP assumptions need updating"]
Role: Customer Anthropologist. You read signals other people skim, find the language customers use that the team hasn't adopted yet, and turn messy qualitative data into a falsifiable ICP card. Not a persona with a stock photo. A decision tool.
Before starting
Confirm (ask or infer from context):
What the product does today — one paragraph of current capability, not vision-only.
Best-fit customers — 3–5 accounts that renewed, expanded, or had the shortest sales cycles (if any).
Alternatives — what buyers use today (tools, manual process, competitors, status quo).
Pricing motion — seat, usage, hybrid; rough ACV band if known.
Economic buyer — title and department signing today.
When ICP was last updated — if unknown or more than 90 days for a fast-moving category, label outputs as hypothesis-heavy until refreshed.
Inputs
Required before proceeding:
At least 5 independent signal sources (see accepted sources below)
Indication of the product stage (pre-PMF / early growth / scaling)
If fewer than 5 signal sources are available:
→ LABEL OUTPUT AS HYPOTHESIS, NOT SYNTHESIS. Return:
"Fewer than 5 independent signal sources available ([N] provided). Output is a hypothesis card, not a synthesized ICP. Validate with additional customer interviews or data before using to drive strategy."
Contract
This skill guarantees:
ICP output is grounded in evidence, not assumption — with minimum 5 sources enforced
Output explicitly distinguishes hypothesis (few sources) from synthesis (evidence-backed)
Competitive alternatives are named, not categorized
ICP card can serve as direct input to /positioning, /launch, and /growth-experiment without rework
PMF refresh cadence is explicitly declared so ICP does not go stale
Accepted signal sources (ranked by reliability)
Source
What to extract
Customer interviews (win/loss, onboarding, churn)
Trigger event, alternatives considered, exact deciding language
Sales call recordings / CRM notes
Objections, evaluation criteria, who else is in the room
Support tickets
Jobs the product is being stretched to do; friction points; what customers expected vs got
Churn notes / exit surveys
What pain was NOT solved; which alternative won
Public reviews (G2, Reddit, HN, Slack communities)
Unfiltered language; context of use; comparison framing
Usage data + activation metrics
Which ICP segments actually activate vs churn fast
ICP scoring model (quantitative layer)
When enrichment or CRM data is available, layer a numeric score alongside the qualitative ICP card. Use separate Fit and Intent dimensions — collapsing them hides whether an account is a structural fit that's not yet buying, or a poor fit that's actively searching.
New funding (30 pts), key hire in target dept (25 pts), tech stack change (25 pts), competitor churn signal (20 pts)
ICP prioritization matrix:
High Intent
│
NURTURE │ ACTIVATE
(Good fit, │ (Good fit,
not buying yet) │ actively buying)
│
─────────────────────────────────────────────
│
DEPRIORITIZE │ EDUCATE
(Poor fit, │ (Poor fit,
not buying) │ but looking)
│
Low Intent
X-axis = Intent Score │ Y-axis = Fit Score
Threshold: >60 = High │ Activate = highest-value ICP prospect pool
Example tools (2025–2026, not exhaustive): firmographic enrichment — Apollo, ZoomInfo, or equivalent; technographic signals — BuiltWith, HG Insights, or equivalent; third-party intent — Bombora, G2 Buyer Intent, or equivalent. Substitute tools appropriate to your stack and budget.
PMF perishability check
For AI-category, fast-moving, or newly competitive markets — flag if ICP refresh is overdue:
IF last_icp_update > 90 days AND (AI_product OR competitive_landscape_shifted):
→ WARN. Return:
"ICP may be stale. In fast-moving categories, PMF is perishable —
a positioning that won deals 4 months ago may not win deals today.
Recommend: run win/loss check on last 5–10 deals before finalizing.
Check: has the economic buyer title shifted? Has the competitor set changed?
Has the primary trigger event changed?"
IF Sean_Ellis_score = unknown:
→ NOTE. Return:
"Sean Ellis score not established. Recommend one-question survey to active users:
'How would you feel if you could no longer use [product]?'
40%+ 'very disappointed' = PMF signal. Below 40% = re-examine ICP assumptions."
Refresh cadence by product type:
Product type
Recommended ICP refresh
AI-native products
Every 90 days — model capabilities and buyer expectations shift quarterly
Fast-growing SaaS
Every 6 months or after major competitive entry
Stable infra / developer tools
Annually, or after major product change
Hardware GTM
After each product generation; after major channel or regulatory change
Decision logic
Step 1 — Five-layer extraction
For each signal source, extract evidence for all five layers:
Layer A — Job-to-be-done (JTBD)
Format: "When [situation], I want to [motivation], so I can [outcome]."
What it reveals: the underlying progress the customer is trying to make — not the feature they requested.
Example (good): "When our database hits a traffic spike during a sale event, I want the system to scale automatically, so I can avoid the 2 AM incident that cost us $40K last quarter."
Example (bad): "They needed better database performance." (This is a description, not a JTBD.)
Layer B — Trigger event
What specific event or change caused them to start looking for a solution now?
What it reveals: urgency, budget authority, and the specific circumstance that made the problem actionable.
Example (good): "We hit a production incident on Black Friday that cost $40K. The incident report went to the CTO. That's when budget was unlocked."
Example (bad): "We needed better performance." (No trigger — no urgency signal.)
Layer C — Alternatives considered
What were they doing before? What else did they evaluate?
What it reveals: the true competitive set (often not what the internal team assumes) and the switching cost.
Record the actual alternatives, not assumed competitors. Common real alternatives include: "Excel + manual process", "[existing tool] + custom scripts", "hiring someone to do it manually", "doing nothing and accepting the cost/risk."
Layer D — Deciding language
The exact phrases customers use to describe their pain and the solution. NOT paraphrases. NOT cleaned-up marketing language. The actual words.
Method: pull quotes directly from interviews, reviews, tickets. Do not rewrite them.
These words go directly into:
Headline copy and A/B test variants
HN post titles and Reddit thread starters
Email subject lines
Landing page above-the-fold
Layer E — Developer emotional outcome
Beyond the rational job-to-be-done, capture the emotional state the developer or practitioner is trying to reach. This is not a marketing flourish — it is the closing proof point that resonates after the rational argument has already been won.
Format: "After adopting [product], they should feel ___."
Common patterns:
"ship faster without worrying about breaking things" (reliability anxiety → relief)
"finally stopped maintaining two systems" (complexity debt → operational calm)
"no more 2 AM pages about [specific operational failure]" (operational fragility → sleep)
"production-grade in minutes, not weeks" (legitimacy + speed for builders)
"experiment without fear" (safety to iterate quickly on architecture or process)
This field feeds directly into headline copy, developer-facing hook writing, and ICP-specific content tone. When a practitioner says "I can finally sleep through the weekend," that is deciding language that resonates beyond the feature comparison.
Step 2 — Segment and prioritize
After extracting the five layers across all signal sources, group customers by tightness of fit:
Segment
Criteria
Core ICP
Trigger is strong and recent; alternatives are clearly inadequate; deciding language matches product's actual strength; activated and retained
Adjacent ICP
Fits 2 of 3 dimensions; requires more education or can work around a feature gap
Out of ICP
Churned fast, or bought for a use case the product doesn't serve well; expensive to acquire and retain
For each segment, estimate:
Size (rough order of magnitude)
Motion fit (PLG / SLG / MLG / Community-led)
Channel implication (2-3 specific surfaces where they can be reached)
Step 3 — Operational filters (Layer F)
Activate when: the ICP card will feed any outreach motion, paid acquisition, ABM program, or enrichment-based segmentation. Skip if this output is positioning-only.
Layer F converts qualitative ICP attributes into specific, search-ready parameters. The test: every field must be expressible as a value you can enter directly into a CRM segment, enrichment query, or channel targeting interface — not a description.
Inclusion filter table:
Dimension
Value(s)
Source in this skill
Job titles
2–5 exact title strings
Deciding language (Layer D) + CRM win data
Seniority
e.g., Director, VP, Head of
Economic buyer declared in "Before starting"
Company headcount
e.g., 50–500 employees
Firmographic component of Fit Score
Industry / vertical
2–4 specific vertical or sector tags
Core ICP segment; avoid broad category codes
Geography
Country / metro if constrained
Closed-deal history
Technographic signals
Specific tools or stack markers
Technographic component of Fit Score
Trigger signals
Funding event, new hire in target dept, stack change
IF any filter value is a description rather than a specific string or range →
BLOCK. Return:
"Filter '[X]' is too vague to use as a search parameter.
Rephrase as: exact title string / headcount range / named industry tag / geography."
IF total inclusion tag count > 12 →
WARN. Return:
"Filter set is broad and may produce noisy results.
Target: ≤5 title strings + ≤4 industry tags + 1 headcount range.
Use exclusions to narrow — not additional inclusion tags."
IF exclusion table is empty or skipped →
WARN. Return:
"No exclusion filters defined. Without exclusions, out-of-ICP accounts
enter the acquisition pipeline (see Out of ICP segment from Step 2).
Define at least 2 exclusion dimensions before routing to outreach."
Operational test: Ask — could this filter set be entered directly into your CRM, LinkedIn Campaign Manager, enrichment tool, or similar without further interpretation? If any field requires a human to translate it into a query value, it needs sharpening.
Agent-agnostic tools: Use whatever enrichment or CRM access is available to validate filter precision. No specific vendor required.
Brain reads
If a companion aether-growth-brain repo is connected:
Before starting: read knowledge/icp-map.md — load prior ICP definition, historical ICP fits, and previous win/loss notes
Read knowledge/competitor-map.md — named alternatives from prior research
Read experiments/experiment-log.md — check if prior growth experiments revealed ICP signals (which cohorts retained; which segments converted fastest)
Brain write: On completion, update knowledge/icp-map.md with:
Core ICP definition (updated or confirmed)
Secondary ICP definition (if new)
3 competitive alternatives (latest)
last_updated date and data sources used
Brain not connected: proceed with available signals; note in output that ICP card is not persisted.
Output format
One ICP card per segment. Compact. Falsifiable.
## ICP Card — [Segment name]
Trigger: [The specific event that causes them to start searching now]
Job-to-be-done: [One sentence in the customer's own voice —
"When X, I want to Y, so I can Z"]
Alternatives they considered:
- [Real alternative 1]
- [Real alternative 2]
- [Real alternative 3 if present]
Deciding language:
- "[Exact phrase 1 from customer quotes]"
- "[Exact phrase 2 from customer quotes]"
- "[Exact phrase 3 from customer quotes]"
Developer emotional outcome: [The feeling/state they want to reach —
"ship without fear of X", "finally stop doing Y", "no more 2 AM pages about Z"]
Motion fit: [PLG / SLG / MLG / Community-led]
Channels most likely to reach them:
- [Surface 1]
- [Surface 2]
Red flags (signals this is NOT this segment):
- [Disqualifying signal 1]
- [Disqualifying signal 2]
Evidence base: [N interviews, N reviews, N support tickets, N sales calls]
Status: [Synthesized ICP (5+ sources) / Hypothesis (fewer than 5 sources)]
## Layer F: Operational filters *(activate if this ICP feeds outreach, paid, or ABM)*
Include:
Titles: [2–5 exact strings]
Seniority: [levels]
Headcount: [range, e.g. 50–500]
Industries: [2–4 specific tags]
Geography: [if constrained]
Tech signals: [specific tools or stack markers]
Trigger signals: [event types]
Exclude:
Titles: [exact strings with no budget authority]
Industries: [tags with no win history]
Company types: [descriptors]
Size extremes: [ranges that economics don't support]
Specific entities: [existing customers, competitors, partners]
What an ICP card is NOT
Not a persona (no demographics, no stock photo, no age range)
Not a wishful description of who you want to sell to
Not stable: update the ICP card when:
Churn patterns shift
A new segment emerges from usage data
After every 10+ new customer interviews
When a strategic pivot changes the product's strongest use case
Cross-workflow outputs
The ICP card feeds directly into:
Downstream workflow
How the ICP card is used
/positioning
Alternatives considered → competitive alternative; deciding language → messaging copy
/launch
Motion fit → channel selection; ICP segment → audience targeting
/growth-experiment
Core ICP segment → audience targeting in hypotheses
/funnel-audit
If Core ICP is churning, the bottleneck may be a fit-gap upstream
pmm/DOMAIN.md
Deciding language → headline copy and hook variants
Example usage
Startup context: B2B developer tool (any category — infrastructure, data, API, security, etc.). Pre-Series A. Team has 8 customer interviews, 23 review site entries, 45 support tickets, and churn notes from 12 lost accounts.
Invocation:/icp-research
Expected output: 2-3 ICP cards (Core ICP + 1 Adjacent), each with trigger event, JTBD in customer voice, actual alternatives they considered (e.g. manual workaround, an open-source alternative, or hiring a specialist), and exact phrases from reviews that the team can use directly in headlines.
Anti-patterns
Anti-pattern
Why it fails
Fix
"Our ICP is mid-market B2B SaaS"
Category descriptor, not a segment — cannot derive messaging or channel from this
Add trigger event, pain signal, and current alternative
Defining ICP from wishful thinking ("Fortune 500s")
Targets companies you want, not companies with evidence of fit
Run win/loss analysis on last 10 closed deals first
Single ICP defined from one customer
N=1 creates bias toward that customer's context, not the pattern
Minimum 5 data sources (interviews + deals + usage)
Not naming the competitive alternative
Forces generic positioning; downstream messaging will be indistinguishable from competitors
Block and return: require named alternative from Layer C
ICP unchanged for 12+ months in AI category
PMF is perishable; buyer expectations shift with model capability improvement
Run PMF perishability check; refresh quarterly
Mixing Fit score with Intent score
High-fit / low-intent accounts need different tactics than low-fit / high-intent
Keep Fit and Intent separate; use the 2x2 matrix to route accounts
Conflating ICP with buyer persona
ICP is who to target (company + context); persona is how they buy and decide
Produce both; do not use one in place of the other
ICP attributes that cannot become search filters (e.g., "innovative teams", "tech-forward companies")
Vague descriptors produce noisy acquisition lists; operators cannot execute
Apply Layer F filter-sharpening rules: convert every dimension to an exact title string, headcount range, or named industry tag before handing off to any outreach or paid motion
Related skills
Skill
When to use
pmm/positioning/SKILL.md
After ICP card is complete: build the positioning artifact
growth/funnel-audit/SKILL.md
If bottleneck type is "fit gap" — ICP may be wrong
growth/retention-analysis/SKILL.md
If cohort diagonal is declining — check ICP drift
pmm/positioning-review/SKILL.md
After positioning is drafted; positioning-review checks ICP definition quality
Benchmarks (2025–2026)
Benchmark
Value
Source
Win rate for well-defined ICP (sales-led B2B SaaS)
25–40%
Gartner 2025, Winning by Design 2025
Win rate without ICP rigor
10–15%
Gartner 2025
Churn rate for "fit churn" cohorts (wrong ICP)
3–5× higher than ICP-fit cohorts
Reforge 2025
Time to get first 5 ICP interviews (warm network)
2–3 weeks
agent-gtm-skills benchmark
ICP interviews needed for pattern confidence
10–15 minimum; 20+ for AI products
April Dunford 2024
Data decay rate for B2B contact data
2.1% per month (25% annually)
B2B data enrichment research, 2025
ICP refresh frequency for AI-native products
Every 90 days
agent-gtm-skills recommendation
Validation criteria
At least 5 independent signal sources cited, or output labeled as hypothesis
Each layer (JTBD, trigger, alternatives, deciding language, developer emotional outcome) filled for Core ICP
Deciding language contains actual customer quotes, not paraphrases
Developer emotional outcome captures the post-adoption feeling, not a feature benefit
Competitive alternatives are real ones customers named, not assumed industry competitors
Motion fit is specified per segment
Evidence base count is included
If output feeds outreach / paid / ABM: Layer F filter tables present, at least 2 exclusion dimensions defined, and no filter value is a description rather than a specific string or range
References & Sources
Tier 1 (authoritative frameworks):
Jobs-to-be-Done (Clayton Christensen): JTBD format for Layer A extraction; "When/want/so I can" structure
Tier 2 (operator templates — adapted, not authoritative):