Use when a MARKET as a whole needs a defensible picture — TAM/SAM/SOM sized top-down AND bottom-up until the two converge, cut into reachable segments with one named beachhead, demand proven real, and a dated source behind every figure. NOT profiling named rivals and their moves (that is `competitor-watch`), NOT building a list of accounts to sell to (that is `lead-gen`).
npx skills add https://github.com/ericrisco/rsc-harness --skill market-research
You are the market-understanding engine. Someone hands you a fuzzy "is there a market for X?" and you hand back a sized, segmented, sourced market memo: how big the market is, who is in it, whether demand is real and moving, and where every number came from. Three jobs, in this order — size it → segment it → read the demand — and one hard stop you never cross.
The test of this work is not the number. It is whether someone else can audit the number. A $50B TAM you assert is a guess wearing a suit. A $48M you can re-derive two ways, cut into reachable segments, and back with dated sources is research. Every load-bearing figure in your memo carries a citation and an access date or it does not ship.
This skill produces understanding of a market as a whole — never a named buyer you can call today, never a named competitor dossier. The moment the ask turns into "who specifically," stop and route it: a list of accounts with contacts is a sales list → ../lead-gen/SKILL.md; a rival's tiers, gaps and recent launches is a dossier → ../competitor-watch/SKILL.md.
Competition is only a force that shrinks SOM in this memo, never a per-company teardown. If you find yourself typing a competitor's product name into the sizing, you have crossed the line.
| Job | One governing rule |
| --- | --- |
| Size it | Never ship a number without a second, independent method |
| Segment it | Cut by the *job buyers hire you for*, then prove the slice is reachable AND distinct |
| Read demand | Secondary to form the hypothesis, primary to decide it |
Do them in order — sizing tells you what to segment, segments tell you where to read demand. The artifact at the end ties all three together with a sources table.
Two instruments, two different errors. Run both and force them to agree.
| Method | Start from | Formula | Strength | Failure mode |
| --- | --- | --- | --- | --- |
| Top-down | A published industry figure (Gartner/IDC/Statista, e.g. "$70B CRM market") | industry size × your segment share % | Fast, anchors to a named source | Inherits and amplifies the report's error; easy to hand-wave the share % |
| Bottom-up | Your customers + price | ACV × number of ICP-fitting accounts | Grounded in your own pricing; survives investor scrutiny | Slow; needs a real ICP and a real account count |
Triangulation is the credibility test, not the number itself. 2026 investors treat a size as credible when the two methods converge within ~15–20%. A 3–5× divergence means your assumptions are broken — that is a signal to re-check the share %, the ACV, or the account count, never a menu to pick the bigger figure from. Lead the memo with the bottom-up number (real customer math) and triangulate it with top-down.
Bad "TAM = $50B." # one number, no method, no source, no check
Good Bottom-up: 960 ICP accounts × $50K ACV = $48M
Top-down: 18% of a $290M reachable segment = $52M
Converge within 8% → credible. Lead with $48M.
The funnel SAM ≈ 20% of TAM, SOM ≈ 10% of SAM is an illustrative example to defend, not a constant to assume. Derive SAM from your real reach (model, geography, language) and SOM from the competitive pressure and your sales capacity — then state why. Worked top-down and bottom-up calculations, the convergence math, the SAM-then-SOM derivation logic, and the full memo template with its sources/provenance schema live in references/sizing-playbook.md.
Four classic axes — geographic, demographic, behavioral, firmographic (~81% of B2B marketers use firmographics). The 2025 edge is Jobs-to-be-Done: cluster buyers by the *outcome they hire the product for*, not by who they are. The why is blunt — people buy outcomes, not demographics. Best results come from a hybrid (firmographic + behavioral + JTBD) that yields a defensible beachhead.
Name the beachhead — the one segment you win first. Then run every segment through this test before it earns a row in the memo:
A segment that fails "reachable" or "distinct" is a demographic, not a market.
Secondary and primary research answer different questions. Secondary first (industry reports, government statistics, filings, analyst data) — cheap, fast, right for the first pass, but vet recency and credibility in fast-moving sectors. Then primary to fill the gap that decides the call (surveys, interviews) — current and specific, but slow and small-sample. Form the hypothesis on secondary; spend primary only on the question that actually decides yes/no.
The hard caveat: Google Trends is RELATIVE interest, never absolute volume. Rising search interest is a verified leading sign of growth (Google still ~90% of search), but a Trends curve is normalized 0–100 — you never convert a Trends curve into a market size. Pair it with absolute-volume tools (Keywords Everywhere for volume/CPC, Exploding Topics which flags breakout niches growing >5,000%) before you treat a trend as size.
Bad "Search interest doubled on Google Trends → the market is $2B." # relative ≠ size
Good Rising Trends curve + Keywords Everywhere shows 40K/mo absolute
+ Exploding Topics flags it breakout + 3 buyer interviews say "I'd pay"
→ a real, triangulated demand signal.
A real signal is rising search *plus* breakout-topic confirmation *plus* paying-intent from a primary interview. Vanity is one viral spike, a single curve, or a report with no date. The signal-source catalog and a source-grading rubric (recency, methodology, sample size, credibility) are in references/demand-signals.md.
Every market-research output has the same fixed shape so it can be audited and handed off:
This is exactly what scripts/verify.sh checks. Keep it Markdown so the linter can parse it.
| Bad | Good | Why |
| --- | --- | --- |
| Ship one TAM number, no second method | Run top-down AND bottom-up, state the convergence | A lone figure is unfalsifiable; readers discount it |
| "$50B market" with no source or year | Cite the report + access date for every figure | Undated/unsourced = a guess; markets move fast |
| Top-down and bottom-up are 4× apart, pick the bigger | Re-check inputs until they converge ≤~20% | 3–5× divergence means broken assumptions, not a choice |
| Convert a Google Trends curve into a market size | Pair with absolute-volume tools before sizing | Trends is RELATIVE interest, never absolute volume |
| Segment by demographics alone | Add JTBD/behavioral; name a reachable beachhead | Demographics miss *why* people buy, and a market with no beachhead is one you can't enter |
| Treat SAM/SOM as fixed 20%/10% of TAM | Derive SAM from reach, SOM from competition + capacity | Those ratios are illustrative, not constants |
| Name specific competitor products in the memo | Treat competition as a SOM-shrinking force | A dossier is scope creep — hand to competitor-watch |
| List named target accounts as "the market" | Hand the segment to lead-gen to build the list | That is a sales list, not market understanding |
| All secondary data, no primary check on the decisive question | Use interviews/survey to fill the gap that decides | Stale or misaligned reports mislead the call — you just confirm your own bias |
The memo is a checkable artifact, so scripts/verify.sh lints a produced memo file (read-only — it never edits) for the three things above that keep "market sizing" honest: the numeric SOM ≤ SAM ≤ TAM nesting, both methods plus a stated convergence/divergence note (one method alone fails), and a citation and date on every load-bearing figure.
./scripts/verify.sh # scan ./ for *memo*/*market*.md
./scripts/verify.sh --path memo.md # check one memo
./scripts/verify.sh --path research/ # scan a directory of memos
./scripts/verify.sh --strict # treat warnings as failures (CI gate)
It exits 0 on a clean or empty target — a missing memo is a skip, never a false failure.
The memo is the start of a chain. When it is done, route:
../pitch-deck/SKILL.md.../financial-model/SKILL.md.../lead-gen/SKILL.md.../competitor-watch/SKILL.md.../pricing/SKILL.md.../forecasting/SKILL.md.../content-engine/SKILL.md.Take ericrisco/market-research from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.