the research underneath
GTM research compendium
The research the engine is built on, kept in one place so every stage can point at its sources.
Everything researched and decided about ICPs, trigger detection and the pipeline, in one place: the vocabulary, the method, the sources, the data feeds, the playbooks, the loop, and the worked examples. Each section ends with what it settled, so it can be read as a reference or as a record.
Category, then ICP, then segment.
Category is where they are, ICP is who they are, segment is who is looking this week. The brief is the input; the campaign is the product.
Evidence is tiered by its source.
A: what paying customers did and said. B: how signups behave. C: the market, what buyers and competitors' customers say in public. D: claims and guesses, including anything a model infers. A model never sets a tier.
The founder sends the first message.
It writes it, says why it chose that person, and a human presses send. Everything after a reply, and everything to opted-in contacts, runs.
1 · the words
The vocabulary
One term per concept, in the order the chain produces them. Every later section uses these words and only these.
| Term | Definition we settled on | It is not |
|---|---|---|
| Brief | What the product says about itself, read from the URL and corrected by the founder. The input to everything. | The product. It is the input, not the output. |
| Category | The page you would be on: the market label a stranger uses to find things like yours. Millions of people. | Your ICP. A category is a page; an ICP is a query. |
| ICP | A filter. The short list of observable attributes that predict someone pays, stays and refers. Passes the list, denominator and reference tests. | A persona, an identity ("indie hackers"), or a description of you. |
| Trigger | The event that opens the window: something happened that makes them look now. Perishable. Industry term: trigger event; also called a buying moment. | A fit attribute. Timing is qualification, not ICP (Kellogg). |
| Detector | A monitoring rule for one trigger: where to watch (source), what to match, how fresh, what to exclude. | A signal. The detector is the rule; the signal is what it catches. |
| Signal | One real person caught in one trigger by a detector (intent signal). | A lead. A signal needs ICP fit to become one. |
| Lead | A person with fresh signals who fits the ICP (qualified lead), tiered Hot, Warm or Watch. | Everyone who matched a keyword. |
| Segment | The slice of the ICP that is inside the window right now, defined by one trigger. | A sub-persona. The word we chose over beachhead; the first one is the starting segment. |
| Starting segment | The narrowest segment with the clearest trigger, run first. | The biggest one. |
| Playbook | One repeatable way to reach one segment on one channel. | A campaign. A playbook is the recipe; the campaign is one cooking of it. |
| Campaign | One segment × one playbook × one offer × one window, with a hypothesis and a kill date. | A collection of segments. Several campaigns can run; each is one. |
| Sequence | A playbook's steps in order, with timing (cadence). | Automated sending. The founder still sends. |
| Funnel | reached × visit% × signup% × activate% × pay%. Each term measured or assumed, dated. | A dashboard. |
| Constraint | The weakest measured term, or the first term with no data. Where next week goes. | The smallest number. An unmeasured step outranks a small one. |
| Evidence tier | A: what paying customers did and said. B: how signups behave. C: the market, what buyers and competitors' customers say in public. D: claims and guesses, including a model's paraphrase. Set from the source, never by the model. | A confidence score. |
| Permission | Derived from where the contact came from: signup/newsletter → opted_in; Stripe → transactional; mention/DM → mentioned_you; scrape/directory → research_only. | A setting. |
settled
the funnel from wide to narrow is category → ICP → segment. Category is where they are, ICP is who they are, segment is who is looking this week. The brief is the input; the campaign is the product.
2 · fit
ICP: the method, and what each source gave us
An ICP is a filter over observable attributes, derived from payers first, and it is only real if it passes three tests. That is the synthesis; the sources below each contributed one piece.
The three tests an ICP must pass
List test — Lenny's founder survey · can you build a list of them from the attributes alone? If not, it is a wish, not a hypothesis.
Denominator test — Kyle Poyar · how many exist, as a number? Without a denominator every rate downstream is meaningless. "If you can't state the denominator, you don't have one."
Reference test — Geoffrey Moore · would one of them vouch for you to the next? References only transfer inside a segment.
The four parts of the ICP object
- Observable attributes, each checked one of a fixed set of ways (a page check, a directory field, a feed field, a search hit, a numeric range). The model fills in the parameters; it never invents a new kind of check.
- The trigger it is tied to (lives in the timing layer, not the fit layer).
- The pain, verbatim, with its evidence tier.
- Exclusions: who looks like a fit and is not.
Who said what
| Source | What it gave the method | Where it is applied |
|---|---|---|
| Dave Kellogg, "Your ICP starts as an aspiration and becomes a regression" | ICP = ideal person at ideal company with the problem you solve. Starts as a guess, becomes a regression on outcomes (win rate, retention, referenceability). Timing is qualification, not ICP. "Faux focus" as the failure mode. | Fit layer vs timing layer split; derive from payers first |
| April Dunford, quickstart guide, on Lenny's | Best-fit customers identified by sales behaviour first (understand fast, buy fast, no discount, refer), firmographics reverse-engineered after. Positioning order: competitive alternatives → unique attributes → value → who cares most → category. "Target as narrowly as you can to meet your near-term sales objectives." "Better a little boring than completely baffling." | The derivation order in the extraction chain; the brief's competitor step comes before the ICP step |
| Geoffrey Moore, Crossing the Chasm, on Lenny's podcast | A market is a set of customers who reference each other. Beachhead: "big enough to matter, small enough to lead, a good fit with your crown jewels." Documentum's beachhead: ~40 regulatory-affairs departments. Reachability is a gating criterion. | Reference test; starting segment; the word we replaced with segment |
| Kyle Poyar, ICP funnel note | Finite-account funnel: know how many accounts are in the ICP, how many you have touched, how many converted. "99% say they are focused on their ICP; few can show this chart." Technographics, intent, job postings as attributes. | Denominator test; the funnel as the ICP's proof |
| Rahul Vohra, First Round Review | The 40% survey is a segmentation instrument, not a verdict: look only at the "very disappointed," build the profile from their answers, ignore the rest. Paul Graham via Vohra: build something a small number of people want a large amount. | Derive the ICP from payers' words (tier A); ignore the lukewarm |
| Lenny Rachitsky, how to identify your ideal customer | Nine attribute categories. Founders treat cold outbound conversion as the strongest ICP signal because warm intros contaminate. "Almost comically narrow." "Most founders initially got their ICP wrong"; iteration speed beat initial accuracy. | List test; outbound reply rate as the validation instrument; narrowness |
| Jason Cohen, "Selling to Carol" | Current problems in their own words, as if complaining. Why they are searching now. The three-to-ten-second test: if the ad cannot grab Carol, it grabs nobody. Saying no to non-ICP revenue separates seasoned founders. | Pain verbatim as a required part; the draft gate's hook check |
| Amy Hoy / Alex Hillman, Sales Safari, Stacking the Bricks EP42 | Zero-customer method: structured observation of where the audience already congregates; look for emotion, not feature requests; observe, do not solution. | Tier C evidence when there are no payers; the seed stage reads forums the way Safari does |
| Craig Elias, SHiFT preview chapter | Trigger events break path dependency. The Window of Dissatisfaction is when to reach them. Claims 60–90% close inside the window; unverified, his own marketing. | The timing layer; the day 3–45 window |
| Rob Walling, Start Small Stay Small | Smaller niches congregate on identifiable sites, so they are cheaper to reach. | Reachability as a design constraint |
| Unusual Ventures field guide, Clearbit TAM/ICP/personas, Bowery Capital, Winning by Design blueprint | The hierarchy TAM → ICP → persona; buyer vs user persona; segments live inside the ICP; 1M search results filtered to ~2,000 individuals. | Category vs ICP vs segment ordering |
| Bob Apollo, Inflexion-Point | ICP fit runs before any other qualification; green/amber/red scorecard. No published numbers. | Fit filter runs before trigger detection |
| Four Forces, jobstobedone.org | Push, pull, anxiety, habit. Produces trigger events and competitive alternatives. | Inputs to the trigger list |
Three things the sources disagree on, and how we resolved them
- Do trigger events belong in the ICP? Kellogg no, Bowery and Winning by Design yes. Resolution: two layers in one object, a stable fit layer that filters and a perishable timing layer that queues.
- How narrow? Lenny "comically narrow," Dunford "as narrow as your near-term sales number allows," Moore "small enough to lead." Resolution: the starting segment is sized by the denominator test, and it must still produce enough candidates to measure (about 30 a month to read a rate).
- Where do you start with zero customers? Kellogg regression needs payers; Hoy/Hillman observation does not. Resolution: tier A from payers when they exist, tier C from the ICP's and competitors' public words when they do not, and the tier is recorded so the derivation knows how much to trust itself.
not verified
YC's own "how to talk to users" material (Migicovsky) could not be extracted; Paul Graham's essay was not fetched directly, the quote is as relayed by First Round. Julie Supan's HXC definition is secondhand.
3 · timing
Triggers and timing
Fit tells you who; timing tells you when. The timing layer is a queue of people inside the fit filter who just said something that means they are looking. It is perishable and re-read daily.
The window. Day 3 to 45 after the triggering event, peak day 5 to 21, a second smaller spike at day 28 to 35 (the first billing cycle). Day 0 to 2 is euphoric and unreachable; after day 60 the founder is rationalising the exit.
The seven detectable states (each maps to a phrase pattern a detector looks for):
| What they said | Example verbatim |
|---|---|
| Did the launch, got nothing. Elapsed time + zero. | "4 days after launching: 0 signups, 0 sales, $0 MRR" |
| Pays for the alternative and complains about it | "paying $49/mo for X and the widget still adds 180kb" |
| Did the setup step, the outcome never came | "set up the changelog three months ago, nobody reads it" |
| Posted their numbers publicly | bio reads "$0 MRR"; TrustMRR row |
| Doing manually what the product automates | "I email each customer a changelog by hand" |
| Hit the number where the product starts to matter | "just passed 100 users and support is a mess" |
| Second launch, same result | A day-3 "no traction" post in March, then a day-4 post for a new product in September, same author |
The compound phrase pattern. Elapsed time + a zero ("4 days", "0 signups") is the highest-precision signal in the corpus. Either half alone is noise.
Nine noise classes the detector must reject at zero false positives: retrospective wins ("a year ago I had 0, now…"), advice-givers quoting the pattern, engagement bait built on it, hiring posts, agencies fishing, launches with paid promotion, product-hunt hunters posting for others, people describing someone else's launch, and pre-launch "about to launch" posts (outside the window).
Evidence tiers decide how much a phrase is trusted: A is what paying customers did and said, B is how signups behave, C is the market (what buyers and competitors' customers say in public), D is claims and guesses, including a model's paraphrase. The tier comes from the source the phrase was found in, checked by matching the phrase against the source text; a model never sets a tier, and D is never used as a live query.
settled
timing is qualification, not ICP. The segment is the ICP filtered by one state inside the window. The reference positive is a tried-and-failed post on day 4 with the compound phrase, from a founder explicitly asking for help, whose launch post months earlier makes it a repeat attempt.
4 · where we read
Data sources, verified
Where the seed stage reads. Each was opened and its terms checked; limits are as found on 2026-09-19/20.
| Source | Endpoint | What it gives | Limits and notes |
|---|---|---|---|
| Hacker News (Show HN) | hn.algolia.com/api/v1/search_by_date?tags=show_hn | Every Show HN with points, author, URL, timestamp | Free, keyless. Measured volume: ~118/day, 3,537 in 30 days; 2,862 (81%) under 5 points, 1,081 under 2. The under-5 set is the segment. |
| PeerPush | peerpush.net/api/v1/launches | Launches with maker, date, URL | 5,000 req/hr. Maker field gives the founder handle. |
| Product Hunt | Atom feed | Launch, maker, date | GraphQL API forbids commercial use; feed only. |
| Uneed | Site, explicit launch dates | Launch, date | No API; dates are on the page. |
| BetaList | HTML only | Launch, maker handle, date | Scrape; treat as fragile. |
| TrustMRR | trustmrr.com/api/ai, /api/ai/discovery, /recent | Public verified MRR per product, slug, host | Public JSON. Lookups must go by host, not slug: two products can have near-identical slugs. |
search.rss per subreddit, paced | Threads matching a phrase | Read-only and paced. Many fetchers and AI tools are blocked from reddit.com; .json on a post works from a browser. Never a DM channel. Reddit ends RSS feeds on Nov 13, 2026 and closes public API access in March 2027 (PPC Land), so plan a replacement. | |
| X | A search API from an approved provider; oEmbed as verifier | Posts matching a phrase; post existence check | Search only through that provider; x.com blocks direct fetches. |
| Stripe | Webhook | Paid rows, and nothing else writes them | The only writer of paid. |
Directory-level facts that shaped the design: Show HN's real volume, once measured, was about three times the first estimate; the launch check must be evaluated relative to a frozen as_of date or every fixture row ages out in a month; a promo price displayed larger than the list price (a $6 promo shown over a struck $29) and prose figures near the real price ("burns $500/month", a "$40,000" ad-budget illustration) are the three ways a naive price check fails.
5 · learn
Campaigns, the funnel, the loop
Campaign = one segment × one playbook × one offer × one window, with a written hypothesis and a kill date. Several can run at once under the contention rules; each is measured alone.
The funnel equation
paying = reached × visit% × signup% × activate% × pay%
Every term is labelled measured or assumed with its inputs and an as-of date. The constraint is the weakest measured term, or the first term with no data at all; an unmeasured step outranks a small one. Capacity binds past about 40 candidates a month, which is why the starting segment is sized to what one founder can hold.
Read tiers (how a rate is allowed to be stated):
| Sample | What you may say |
|---|---|
| under 10 | counts only |
| 10 to 29 | a direction |
| 30 and over | a rate with a Wilson interval |
| ~100 per arm | enough to compare two variants |
No bandits under 100 per arm. No "winner" on 12 clicks.
Attribution
- Touch id in
utm_contenton every link the engine sends; carried through visit, signup, payment. - The Stripe webhook is the sole writer of paid rows.
- Three columns per customer, first touch / last touch / self-reported, never summed. Self-report ("how did you hear about us") is the primary instrument because most of the funnel is dark.
The three-speed loop
Minutes — draft variants, scored by replies.
Weeks — one 80/20 test per campaign, held for a full window, on the constraint.
Months and cross-account — which playbooks and segments earn a place.
Deterministic weekly triggers (Monday read). Prompts never rewrite themselves; every change is a decision with a date, a reason and a number. The Monday report names the funnel, the constraint, this week's one test, and what was retired.
Build order: stages 1 to 4 (harvest, derive, gate, seed) get built and run against a real brief, not skipped. The gate has four preconditions and refuses to start a campaign the funnel cannot measure.
6 · data and experiments
Data capture and the experimentation engine
Every stage of the pipeline is a decision, and every decision is training data if it is recorded in the right shape from day one.
The data spine: eight rules every stage follows
- Log the decision, not just the result: every choice by the system, the founder or the lead is an append-only event naming who made it.
- Version whatever decided: model, prompt, rule, scorer, ICP and detector versions on each row.
- Freeze the inputs: store the features as they were at decision time; recomputing them later leaks the future into training data.
- Keep the negatives: discarded matches, skipped leads, blocked sends and "no" replies, each with its reason.
- Log the odds: the probability of each choice, plus a small random slice, so a new model can be judged on old data.
- Every human touch is a label: edits, corrections, skips and never-contact marks, with before, after and reason.
- One chain of ids: detector → signal → person → lead → move → touch → account → Stripe customer.
- Keep the raw, with a retention rule: full text, the url, posted and captured timestamps; public data only, deleted on request.
The experimentation engine sits across all 12 stages: any stage's rule, prompt, threshold or play is a knob it can test.
| Part | What it holds |
|---|---|
| Hypothesis registry | One row per test: the knob, the change, the metric, the win rule and judge-by date, written before it runs |
| Knobs per stage | What can change: brief prompt, ICP lines, trigger freshness window, detector rule, judge prompt, lead scorer, play choice, offer, opener, send time, stop rule |
| Assignment | Randomization unit (post, lead, campaign), arms and shares, the logged probability of each assignment, and a holdout |
| Exposure log | One row per unit that saw an arm (experiment units), joined to outcomes by id |
| Metrics | One primary metric per test, plus guardrails (stop and block rates, founder minutes, tool spend) |
| Readout | The pre-set win rule, in one of three modes: offline replay on logged data for listen-side changes (detectors, judge, scorer); randomized A/B for act-side changes (drafts, openers, plays); holdout lift for campaigns |
| Decision and learnings | Ship, kill or rerun; the learning, written once and used as the prior for the next test |
The per-stage detail (what each stage records, the label it creates, and the model it trains) is on the pipeline overview.
7 · reference
Sources
Every page opened during the research, grouped, with what it gave us. Section 2's table has the per-source method notes; this is the flat list for citation.
ICP method
- Kellogg, Your ICP starts as an aspiration and becomes a regression — the fit/timing split, regression on outcomes
- Dunford, quickstart guide to positioning — best-fit by behaviour, positioning order
- Dunford on Lenny's podcast — don't over-commit pre-PMF
- Obviously Awesome notes, Nat Eliason and Will Patrick — the exercise
- Dunford, positioning exercise on HackerNoon
- Crossing the Chasm notes and Moore on Lenny's — beachhead, referenceability, Documentum's 40 departments
- Lenny Rachitsky, how to identify your ideal customer — founder survey, nine attributes, outbound as the instrument
- First Round Review, Superhuman's PMF engine — the 40% survey as segmentation; PG quote
- Kyle Poyar, ICP funnel note — the denominator test
- Jason Cohen, Selling to Carol — pain in their words, the 3-to-10-second test
- Alex Hillman on Sales Safari and Stacking the Bricks EP42 — zero-customer observation
- Craig Elias, SHiFT preview chapter — trigger events, Window of Dissatisfaction
- Rob Walling, Start Small Stay Small notes — niches congregate
- Four Forces, jobstobedone.org
- Unusual Ventures field guide, Clearbit, TAM/ICP/personas, Bowery Capital founder's guide, Winning by Design blueprint, Bob Apollo, no fit no deal — hierarchy and qualification order
- HXC, secondhand; PG notes, How to Get Startup Ideas; YC library, how to talk to users (not extractable)
Data feeds
- HN Algolia
search_by_date?tags=show_hn; PeerPush/api/v1/launches; Product Hunt Atom feed; Uneed; BetaList; TrustMRR/api/ai,/api/ai/discovery,/recent