understand · brief intake
Evidence tiers
A to D and site claims, and how they're assigned.
In Brief intake
Every fact in the brief carries how far to trust it. That one label decides what a fact is allowed to drive: a customer quote, a fit line, a search term, or nothing. It is how the pipeline stays honest when most of what it knows on day one is a guess.
Payers beat opinions.
What paying customers did outranks what signups did, outranks the market, outranks what the founder or the model believes.
The higher tier wins.
When two sources disagree, the higher tier wins and the fact is marked conflicting until someone resolves it.
Gates, not vibes.
Weak evidence is kept out of anything that runs a search or speaks for customers, by rule, in code.
what it is
Evidence grading, in industry terms
Industry names: evidence grading, confidence levels, source reliability. Research teams and intelligence analysts use the same idea: separate how reliable the source is from what it claims, and never let a weak source drive an action alone.
Tier — evidence level · A, B, C, D or site claim: where the fact came from.
Status — state of the fact · observed, founder-confirmed, inferred, unknown, conflicting: how it stands now.
Gate — use rule · what a fact at this tier is allowed to drive downstream.
Stated vs evidenced ICP — two columns · what the founder says the buyer is, kept apart from what evidence shows. Evidence overrules the stated version only above roughly five paying customers.
how it works
How a fact gets its tier, and what the tier unlocks
Tiers come from the source, not from the model's confidence. The model may extract a fact; it may not promote one. Promotion only happens when new evidence of a higher tier arrives, or the founder confirms.
- A fact arrives — from the site, the founder, signups, payers or market
- Tier from source — payers A, signups B, market C, belief D, site
- Status set — observed, inferred, founder-confirmed, unknown
- Conflict check — same field, different value? higher tier wins; mark it
- Gates applied — quotes need A or B; D never a search term
- Feeds downstream — fit lines, detector vocabulary, opening lines
- Confidence rolls up — an ICP line takes the highest tier it cites
- Promotion on evidence — new A or B evidence upgrades; nothing else does
- A fact arrives — from the site, the founder, signups, payers or market
- Tier from source — payers A, signups B, market C, belief D, site
- Status set — observed, inferred, founder-confirmed, unknown
- Conflict check — same field, different value? higher tier wins; mark it
- Gates applied — quotes need A or B; D never a search term
- Feeds downstream — fit lines, detector vocabulary, opening lines
- Confidence rolls up — an ICP line takes the highest tier it cites
- Promotion on evidence — new A or B evidence upgrades; nothing else does
The ladder
A
Paying customers
What payers did and said: Stripe records, their answer to "why did you buy", cancel reasons, testimonial authors' own profiles.
may drive: customer quotes, fit lines, search terms
B
Signups and structural facts
How signups behave (who activates, who goes quiet), plus hard facts like a pricing floor or listed integrations, and community search on category terms.
may drive: customer quotes, fit lines, search terms
C
The market
Competitors' customers, public reviews, switching threads, what buyers say in their communities.
may drive: fit lines marked as market evidence; search terms
D
Beliefs and guesses
The founder's beliefs, the stated ICP, anything the model infers. Recorded, never a query on its own.
may drive: hypotheses only; a search term only if the founder confirms
site claim Site claim — Anything read off the product's own site. The model never sets it higher.
may drive: product and price facts; never customer evidence
the object
A brief fact, with its tier and status
The same shape for every fact, whatever its source, so one gate function can read all of them.
brief_fact
| field | type | what it holds |
|---|---|---|
field | enum | which brief field it fills |
value | text | the claim |
evidence | enum | A, B, C, D or site_claim |
status | enum | observed, founder_confirmed, inferred, unknown, conflicting |
source | object | kind (stripe, signup data, review, interview, site), URL or record id, quote |
captured_at | timestamp | when it entered the brief |
conflicts_with | list of ids | other facts on the same field with different values |
gates | derived | what this fact may feed: quote, fit_line, search_term |
promoted_from | id | set when new evidence upgrades a fact; the old row stays |
sample
{
"field": "voice_of_customer",
"value": "nobody knows it exists",
"evidence": "C",
"status": "observed",
"source": {
"kind": "public_post",
"url": "https://www.reddit.com/r/SaaS/…",
"quote": "launched 3 weeks ago, nobody knows it exists"
},
"captured_at": "2026-10-14T09:12:00Z",
"conflicts_with": [],
"gates": [
"fit_line",
"search_term"
],
"promoted_from": null
}The URL is shortened for illustration. Field names are a sketch of the shape, not the exact schema.
gate catalog
What each tier may drive
The gates, as rules. Each card is one use downstream and the tiers allowed into it.
| use downstream | A | B | C | D | site claim |
|---|---|---|---|---|---|
| Customer quote ("customers say…") | yes | yes | no | no | no |
| Fit line in the ICP | yes | yes | yes, marked market | only as a hypothesis | product facts only |
| Detector search term | yes | yes | yes | only if the founder confirms | no |
| Opening line in a message | yes, verbatim | yes | yes, paraphrased | no | no |
| Hard filter (must have) | yes | yes | with care | no | yes, for integrations and requirements |
| Price and stage | yes | yes | no | no | yes |
conflict
Two values on one field
The site says "for agencies"; three payers are solo founders.
- rule
- the higher tier wins: A over site claim
- keep
- both rows
conflict
Founder vs market
The founder says buyers live on LinkedIn; buyers' complaints are on Reddit.
- rule
- C over D
- action
- use Reddit as the source; keep LinkedIn as a hypothesis to test
promotion
A belief confirmed
The founder's phrase shows up in 12 public posts.
- from
- D
- to
- C, with the posts as sources
- unlocks
- search term
promotion
A market guess confirmed by payers
Payers' onboarding answers match the competitor-review pattern.
- from
- C
- to
- A
- unlocks
- customer quote
gate
Model inference
The model guesses team size from the site's tone.
- tier
- D, status inferred
- may drive
- nothing until confirmed
gate
Unreadable price
Pricing is behind a login.
- value
- unknown
- rule
- an unreadable price never demotes a lead
failure modes
How it goes wrong, and how to catch it
Tier inflation — The model labels its own inference as tier B because it sounds factual. · Catch it: tiers come from the source kind, set in code; the model can't write a tier.
Silent conflicts — A re-read changes a value and the old one vanishes. · Catch it: append-only rows with conflicts_with; conflicts surface to the founder.
Gate leaks — A tier D phrase ends up in a detector's vocabulary. · Catch it: a test that every search term traces to a fact at C or above, or a founder confirmation.
Stale A — A payer's reason from a year ago still drives the ICP. · Catch it: date every fact; weight recent payers higher; re-check on churn.
Over-trusting volume — Fifty tier C posts outvote three tier A payers. · Catch it: tier beats count: A is never outvoted by C, only refined.
data to capture
Record it so a model can learn from it later
Every decision on this page is training data if it is recorded in the guide's shape from day one.
1 · log the decision · 2 · version whatever decided · 3 · freeze the inputs · 4 · keep the negatives · 5 · log the odds · 6 · every human touch is a label · 7 · one chain of ids · 8 · keep the raw
record
- every fact with tier, status, source and captured_at
- every conflict and how it was resolved (who, when, which value won)
- every promotion, with the evidence that caused it
- every gate decision: which fact was allowed into which use, and which were blocked
label
per fact: later confirmed or contradicted; per gate block: whether the blocked fact turned out true
trains
tier calibration (does tier A really mean right more often than tier C?) and a conflict resolver that predicts which value the founder keeps
test
- knob: gate thresholds (for example, whether C may write search terms)
- mode: offline replay: rebuild detector vocabularies under each rule and compare match precision on labelled posts
- win rule: higher signal precision with no drop in yield