agentsclimarketplace

Icp research

Skill 0xF4ng/aether-growth-fieldwork/pmm/icp-research

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.From its SKILL.md

Install
npx -y skills add 0xF4ng/aether-growth-fieldwork --skill icp-research

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • 26 days oldThe repository was created 26 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

22.0 KB, ~4.9k tokens by cl100k_base, as published. Nobody here has run it

ICP Research

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.
  • Sales motion — PLG, sales-led, hybrid; rough cycle length.
  • 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)

SourceWhat to extract
Customer interviews (win/loss, onboarding, churn)Trigger event, alternatives considered, exact deciding language
Sales call recordings / CRM notesObjections, evaluation criteria, who else is in the room
Support ticketsJobs the product is being stretched to do; friction points; what customers expected vs got
Churn notes / exit surveysWhat pain was NOT solved; which alternative won
Public reviews (G2, Reddit, HN, Slack communities)Unfiltered language; context of use; comparison framing
Usage data + activation metricsWhich 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.

Fit Score (0–100):

Fit Score = (Firmographic * 0.40) + (Technographic * 0.35) + (Behavioral * 0.25)
ComponentWeightScoring criteria
Firmographic40%Industry vertical (25 pts), employee count range (25 pts), revenue range (25 pts), geography (15 pts), funding stage (10 pts)
Technographic35%Complementary tooling (30 pts), API / integration infrastructure (25 pts), cloud-native stack (25 pts), data maturity (20 pts)
Behavioral25%Historical deal velocity (30 pts), expansion rate (30 pts), retention rate (25 pts), NPS / satisfaction (15 pts)

Intent Score (0–100):

Intent Score = (Third-party intent * 0.35) + (First-party signals * 0.40) + (Trigger events * 0.25)
ComponentWeightScoring criteria
Third-party intent35%Intent data topic surges (30 pts), review site category research (30 pts), competitor page visits (20 pts), review site activity (20 pts)
First-party signals40%Pricing/demo page visits (30 pts), content downloads (20 pts), email engagement (25 pts), product signup/trial (25 pts)
Trigger events25%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 typeRecommended ICP refresh
AI-native productsEvery 90 days — model capabilities and buyer expectations shift quarterly
Fast-growing SaaSEvery 6 months or after major competitive entry
Stable infra / developer toolsAnnually, or after major product change
Hardware GTMAfter 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:

SegmentCriteria
Core ICPTrigger is strong and recent; alternatives are clearly inadequate; deciding language matches product's actual strength; activated and retained
Adjacent ICPFits 2 of 3 dimensions; requires more education or can work around a feature gap
Out of ICPChurned 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:

DimensionValue(s)Source in this skill
Job titles2–5 exact title stringsDeciding language (Layer D) + CRM win data
Senioritye.g., Director, VP, Head ofEconomic buyer declared in "Before starting"
Company headcounte.g., 50–500 employeesFirmographic component of Fit Score
Industry / vertical2–4 specific vertical or sector tagsCore ICP segment; avoid broad category codes
GeographyCountry / metro if constrainedClosed-deal history
Technographic signalsSpecific tools or stack markersTechnographic component of Fit Score
Trigger signalsFunding event, new hire in target dept, stack changeIntent Score trigger events

Exclusion filter table (required — prevents out-of-ICP acquisition):

DimensionExcludeWhy
Titles to excludeExact strings with no budget authorityPattern from churn notes or Out-of-ICP segment
Industries to excludeVerticals with no win historyDerived from churned account analysis
Company typese.g., agencies, consultancies, non-profitsModel or pricing fit mismatch
Size extremesHeadcount ranges where economics don't workACV vs. deal cost
Specific entitiesExisting customers, competitors, current pipelineAlready in system or not appropriate

Filter sharpening rules:

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 workflowHow the ICP card is used
/positioningAlternatives considered → competitive alternative; deciding language → messaging copy
/launchMotion fit → channel selection; ICP segment → audience targeting
/growth-experimentCore ICP segment → audience targeting in hypotheses
/funnel-auditIf Core ICP is churning, the bottleneck may be a fit-gap upstream
pmm/DOMAIN.mdDeciding 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-patternWhy it failsFix
"Our ICP is mid-market B2B SaaS"Category descriptor, not a segment — cannot derive messaging or channel from thisAdd trigger event, pain signal, and current alternative
Defining ICP from wishful thinking ("Fortune 500s")Targets companies you want, not companies with evidence of fitRun win/loss analysis on last 10 closed deals first
Single ICP defined from one customerN=1 creates bias toward that customer's context, not the patternMinimum 5 data sources (interviews + deals + usage)
Not naming the competitive alternativeForces generic positioning; downstream messaging will be indistinguishable from competitorsBlock and return: require named alternative from Layer C
ICP unchanged for 12+ months in AI categoryPMF is perishable; buyer expectations shift with model capability improvementRun PMF perishability check; refresh quarterly
Mixing Fit score with Intent scoreHigh-fit / low-intent accounts need different tactics than low-fit / high-intentKeep Fit and Intent separate; use the 2x2 matrix to route accounts
Conflating ICP with buyer personaICP is who to target (company + context); persona is how they buy and decideProduce 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 executeApply 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

SkillWhen to use
pmm/positioning/SKILL.mdAfter ICP card is complete: build the positioning artifact
growth/funnel-audit/SKILL.mdIf bottleneck type is "fit gap" — ICP may be wrong
growth/retention-analysis/SKILL.mdIf cohort diagonal is declining — check ICP drift
pmm/positioning-review/SKILL.mdAfter positioning is drafted; positioning-review checks ICP definition quality

Benchmarks (2025–2026)

BenchmarkValueSource
Win rate for well-defined ICP (sales-led B2B SaaS)25–40%Gartner 2025, Winning by Design 2025
Win rate without ICP rigor10–15%Gartner 2025
Churn rate for "fit churn" cohorts (wrong ICP)3–5× higher than ICP-fit cohortsReforge 2025
Time to get first 5 ICP interviews (warm network)2–3 weeksagent-gtm-skills benchmark
ICP interviews needed for pattern confidence10–15 minimum; 20+ for AI productsApril Dunford 2024
Data decay rate for B2B contact data2.1% per month (25% annually)B2B data enrichment research, 2025
ICP refresh frequency for AI-native productsEvery 90 daysagent-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):

  • icp-research-synthesis (growth-skills v1.0, score 9/10): four-layer extraction method, segment classification, ICP card format

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,782. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.