Market research skill
Use when doing upstream market-research methodology — sizing a market as TAM/SAM/SOM computed BOTH top-down and bottoms-up (never a single unsourced number), planning a survey sample size with finite-population correction and per-segment minimums, or scoring candidate market segments against Kotler's measurable/substantial/accessible/differentiable/actionable criteria.
by alirezarezvani·MIT license·★ 26,349 Stars on the repo·GitHub ↗
npx degit alirezarezvani/claude-skills/research-ops/skills/market-research#main ~/.claude/skills/market-research-2Checked ·commit main
Files of Market research
Show the full text147 lines
market-research
Upstream market-research methodology: market sizing, survey/sampling design, and segmentation. The discipline here is method + assumptions: a TAM is never a single number, a survey is never powered only in aggregate, and a segment is never a demographic slice.
Purpose
Market-research analysts, product marketers, and strategy teams need rigorous evidence before anyone optimizes a campaign or sets a strategy. This skill structures three methodology decisions:
Three deterministic tools:
market_sizer.py— Computes TAM/SAM/SOM by both top-down and bottoms-up methods side-by-side, reports the divergence, and flags failed triangulation. Never returns a single number.sample_size_planner.py— Survey sample size from confidence, margin of error, and expected proportion, with the finite-population correction and per-segment minimums (a survey powered overall is not powered per reported segment).segmentation_scorer.py— Scores candidate segments against Kotler's five criteria and enforces a substantiality + accessibility gate; a slice that is too small or unreachable is dropped.
When to use
Invoke this skill when:
- A board or exec asks "how big is this market?" and you need a defensible, triangulated answer.
- You are fielding a survey and need a sample size that holds up per segment, not just overall.
- You have a list of candidate segments and need to know which are real markets vs demographic slices.
- You are synthesizing competitive intelligence and need a methodological backbone.
Do NOT use this skill to: measure a live campaign (attribution, ROAS, CPA → marketing-skill/campaign-analytics), build demand-gen / paid-media plans (marketing-skill/marketing-demand-acquisition), set positioning / GTM strategy (marketing-skill/marketing-strategy-pmm), or set pricing (commercial/pricing-strategist).
Workflow
- Write the brief — Fill
assets/market_research_brief_template.md(objective, the decision this informs, sizing approach, sampling plan, assumptions register). - Size the market — Run
market_sizer.py --input market.json --method both --profile {b2b-saas|consumer|enterprise|marketplace|hardware|services}. Reconcile the top-down/bottoms-up delta before quoting anything. - Plan the survey — Run
sample_size_planner.py --input survey.json. Fund the per-segment floors, not just the overall n. - Score the segments — Run
segmentation_scorer.py --input segments.json --profile <same>. Drop segments failing the substantiality/accessibility gate. - Assemble the evidence pack — Combine into a brief. Every number carries its method + assumptions + confidence.
Scripts
| Script | Purpose | Profiles |
|---|---|---|
scripts/market_sizer.py |
TAM/SAM/SOM top-down AND bottoms-up + triangulation flag | b2b-saas, consumer, enterprise, marketplace, hardware, services |
scripts/sample_size_planner.py |
Survey n + FPC + per-segment minima | n/a (parameter-driven) |
scripts/segmentation_scorer.py |
Kotler 5-criteria scoring + gate | b2b-saas, consumer, enterprise, marketplace, hardware, services |
All three: stdlib-only, --help, --sample, --output {human,json}.
Onboarding & customization
Run the onboarding questionnaire once before you start — it captures your defaults so every tool in this skill is pre-configured. Customization is the point: the answers actually change tool behavior.
python3 scripts/onboard.py # interactive (also: --defaults, --set key=value, --reset)
python3 scripts/onboard.py --show # see the questions + current effective config
Answers are saved to ~/.config/research-ops/market-research.json (global) or ./.research-ops/market-research.json (--scope project) and are read automatically by config_loader.py. They set the default market profile, the default survey confidence and margin of error, and the default sizing method. CLI flags always override saved config; RESEARCH_OPS_NO_CONFIG=1 ignores it.
The four questions: market profile · survey confidence · margin of error · sizing method.
Optimize with autoresearch (opt-in)
This skill ships an isolated, opt-in bridge to engineering/autoresearch-agent. Only when you ask to "optimize" / "reconcile the sizing" / "run a loop" does an autoresearch experiment iteratively reconcile your market model so top-down and bottoms-up triangulate. scripts/ar_evaluator.py is the ground-truth evaluator; it prints tam_divergence: <fraction> (lower is better).
/ar:setup --domain custom --name tam-triangulation \
--target market.json \
--eval "python3 ar_evaluator.py --target market.json" \
--metric tam_divergence --direction lower
/ar:loop custom/tam-triangulation
Isolated: no hard dependency — autoresearch runs only on demand, and the loop edits market.json, never the evaluator.
References
references/market_sizing_canon.md— TAM/SAM/SOM frameworks (Bessemer, a16z); top-down vs bottoms-up; Fermi estimation; market-model conventions; common sizing fallacies.references/survey_methodology.md— Cochran Sampling Techniques; Dillman Tailored Design Method; Groves Survey Methodology; question-wording bias (Schuman & Presser); AAPOR standards.references/segmentation_and_ci.md— Kotler segmentation criteria; needs-based vs firmographic; Porter Five Forces; SCIP ethics; Christensen JTBD; conjoint/MaxDiff primer.
Assumptions
- The sizer reports both methods but cannot validate your inputs — a top-down "1% of a $40B market" is only as good as the cited source and the serviceable fraction.
- Sample-size uses the conservative p=0.5 (maximum variance) unless you supply an expected proportion.
- Segment scores are inputs you provide; the tool enforces the gates and the weighting, it does not gather the underlying evidence.
- Competitive intelligence must follow the SCIP code of ethics — no misrepresentation, no protected information.
Anti-patterns
- A single TAM number with no method. Always triangulate top-down against bottoms-up.
- Spurious precision. Size to the decision's tolerance; "$3.7142B" implies a confidence you do not have.
- Powering only the total. Each reported segment needs its own sample floor.
- Leading or double-barreled survey questions. Pre-test wording against the bias literature.
- Calling a demographic slice a segment. It must be substantial AND accessible.
Distinct from
| Neighbor | Scope | Difference |
|---|---|---|
marketing-skill/campaign-analytics |
Attribution, ROAS, CPA, funnel of a live campaign | That measures spend deployed; this is upstream methodology |
marketing-skill/marketing-demand-acquisition |
Demand-gen, paid media, channel mix | That runs acquisition; this builds the evidence |
marketing-skill/marketing-strategy-pmm |
Positioning, GTM, category | That sets strategy; this sizes and segments the market |
commercial/pricing-strategist |
Pricing model + WTP + packaging | That sets price; this sizes the market |
product-research (sibling) |
User/product discovery methods | That studies users; this studies the market |
Quick examples
python3 scripts/market_sizer.py --sample
python3 scripts/sample_size_planner.py --population 62000 --confidence 0.95 --moe 0.05
python3 scripts/segmentation_scorer.py --sample --output json
The sample market triangulates a ~$1.47B top-down SAM against the bottoms-up figure and flags the divergence; the segmentation sample drops the "solopreneurs who might want analytics" slice for failing the substantiality and accessibility gates.
Forcing-question library (Matt Pocock grill discipline)
Walked one at a time by /cs:grill-research-ops or the orchestrator. Recommended answer + canon citation per question. Never bundled.
"Is your TAM top-down or bottoms-up — and have you computed it both ways to triangulate?" Recommended: both; reconcile the delta before quoting a number. Canon: Bessemer / a16z market-sizing; Fermi estimation.
"What decision will this market size actually drive — and at what precision does it matter?" Recommended: size to the decision's tolerance, not to a spurious-precision number. Canon: market-model conventions (Gartner/Forrester); decision-driven analysis.
"What's your target margin of error and confidence — and does your sample clear it per segment, not just overall?" Recommended: power each reported segment, not only the total. Canon: Cochran Sampling Techniques; AAPOR standards.
"Are your survey questions free of leading and double-barreled wording?" Recommended: pre-test the wording; cite the bias source. Canon: Schuman & Presser; Dillman Tailored Design Method.
"Do your segments pass measurable / substantial / accessible / actionable — or are they just demographic slices?" Recommended: drop segments that fail substantiality or accessibility. Canon: Kotler segmentation criteria.
Walk depth-first. Lock 1-2 before opening 3-5. After all are answered, invoke market_sizer.py → sample_size_planner.py → segmentation_scorer.py.
| 1 | |
| 2 | name market-research |
| 3 | description Use when doing upstream market-research methodology — sizing a market as TAM/SAM/SOM computed BOTH top-down and bottoms-up (never a single unsourced number), planning a survey sample size with finite-population correction and per-segment minimums, or scoring candidate market segments against Kotler's measurable/substantial/accessible/differentiable/actionable criteria. Outputs always show the method and the assumptions. For market-research analysts and product-marketing at the sizing/survey/segmentation moment. Distinct from marketing-skill (campaign analytics, attribution, demand-gen) — this is the evidence-building methodology, not live-campaign optimization. |
| 4 | version 2.9.0 |
| 5 | author claude-code-skills |
| 6 | license MIT |
| 7 | tags [research-ops, market-research, tam-sam-som, market-sizing, survey, sampling, segmentation, competitive-intelligence] |
| 8 | compatible_tools [claude-code, codex-cli, cursor, antigravity, opencode, gemini-cli] |
| 9 | |
| 10 | |
| 11 | # market-research |
| 12 | |
| 13 | Upstream market-research methodology: market sizing, survey/sampling design, and segmentation. The discipline here is **method + assumptions**: a TAM is never a single number, a survey is never powered only in aggregate, and a segment is never a demographic slice. |
| 14 | |
| 15 | ## Purpose |
| 16 | |
| 17 | Market-research analysts, product marketers, and strategy teams need rigorous evidence *before* anyone optimizes a campaign or sets a strategy. This skill structures three methodology decisions: |
| 18 | |
| 19 | Three deterministic tools: |
| 20 | |
| 21 | `market_sizer.py` — Computes TAM/SAM/SOM by **both** top-down and bottoms-up methods side-by-side, reports the divergence, and flags failed triangulation. Never returns a single number. |
| 22 | `sample_size_planner.py` — Survey sample size from confidence, margin of error, and expected proportion, with the finite-population correction and **per-segment minimums** (a survey powered overall is not powered per reported segment). |
| 23 | `segmentation_scorer.py` — Scores candidate segments against Kotler's five criteria and enforces a substantiality + accessibility gate; a slice that is too small or unreachable is dropped. |
| 24 | |
| 25 | ## When to use |
| 26 | |
| 27 | Invoke this skill when: |
| 28 | |
| 29 | A board or exec asks "how big is this market?" and you need a defensible, triangulated answer. |
| 30 | You are fielding a survey and need a sample size that holds up per segment, not just overall. |
| 31 | You have a list of candidate segments and need to know which are real markets vs demographic slices. |
| 32 | You are synthesizing competitive intelligence and need a methodological backbone. |
| 33 | |
| 34 | **Do NOT use this skill to**: measure a live campaign (attribution, ROAS, CPA → `marketing-skill/campaign-analytics`), build demand-gen / paid-media plans (`marketing-skill/marketing-demand-acquisition`), set positioning / GTM strategy (`marketing-skill/marketing-strategy-pmm`), or set pricing (`commercial/pricing-strategist`). |
| 35 | |
| 36 | ## Workflow |
| 37 | |
| 38 | **Write the brief** — Fill `assets/market_research_brief_template.md` (objective, the decision this informs, sizing approach, sampling plan, assumptions register). |
| 39 | **Size the market** — Run `market_sizer.py --input market.json --method both --profile {b2b-saas|consumer|enterprise|marketplace|hardware|services}`. Reconcile the top-down/bottoms-up delta before quoting anything. |
| 40 | **Plan the survey** — Run `sample_size_planner.py --input survey.json`. Fund the per-segment floors, not just the overall n. |
| 41 | **Score the segments** — Run `segmentation_scorer.py --input segments.json --profile <same>`. Drop segments failing the substantiality/accessibility gate. |
| 42 | **Assemble the evidence pack** — Combine into a brief. Every number carries its method + assumptions + confidence. |
| 43 | |
| 44 | ## Scripts |
| 45 | |
| 46 | | Script | Purpose | Profiles | |
| 47 | |---|---|---| |
| 48 | | `scripts/market_sizer.py` | TAM/SAM/SOM top-down AND bottoms-up + triangulation flag | b2b-saas, consumer, enterprise, marketplace, hardware, services | |
| 49 | | `scripts/sample_size_planner.py` | Survey n + FPC + per-segment minima | n/a (parameter-driven) | |
| 50 | | `scripts/segmentation_scorer.py` | Kotler 5-criteria scoring + gate | b2b-saas, consumer, enterprise, marketplace, hardware, services | |
| 51 | |
| 52 | All three: stdlib-only, `--help`, `--sample`, `--output {human,json}`. |
| 53 | |
| 54 | ## Onboarding & customization |
| 55 | |
| 56 | Run the onboarding questionnaire **once before you start** — it captures your defaults so every tool in this skill is pre-configured. Customization is the point: the answers actually change tool behavior. |
| 57 | |
| 58 | |
| 59 | python3 scripts/onboard.py # interactive (also: --defaults, --set key=value, --reset) |
| 60 | python3 scripts/onboard.py --show # see the questions + current effective config |
| 61 | |
| 62 | |
| 63 | Answers are saved to `~/.config/research-ops/market-research.json` (global) or `./.research-ops/market-research.json` (`--scope project`) and are read automatically by `config_loader.py`. They set the default market **profile**, the default survey **confidence** and **margin of error**, and the default **sizing method**. CLI flags always override saved config; `RESEARCH_OPS_NO_CONFIG=1` ignores it. |
| 64 | |
| 65 | **The four questions:** market profile · survey confidence · margin of error · sizing method. |
| 66 | |
| 67 | ## Optimize with autoresearch (opt-in) |
| 68 | |
| 69 | This skill ships an **isolated, opt-in** bridge to `engineering/autoresearch-agent`. Only when you ask to "optimize" / "reconcile the sizing" / "run a loop" does an autoresearch experiment iteratively reconcile your market model so top-down and bottoms-up triangulate. `scripts/ar_evaluator.py` is the ground-truth evaluator; it prints `tam_divergence: <fraction>` (**lower** is better). |
| 70 | |
| 71 | |
| 72 | /ar:setup --domain custom --name tam-triangulation \ |
| 73 | --target market.json \ |
| 74 | --eval "python3 ar_evaluator.py --target market.json" \ |
| 75 | --metric tam_divergence --direction lower |
| 76 | /ar:loop custom/tam-triangulation |
| 77 | |
| 78 | |
| 79 | Isolated: no hard dependency — autoresearch runs only on demand, and the loop edits `market.json`, never the evaluator. |
| 80 | |
| 81 | ## References |
| 82 | |
| 83 | `references/market_sizing_canon.md` — TAM/SAM/SOM frameworks (Bessemer, a16z); top-down vs bottoms-up; Fermi estimation; market-model conventions; common sizing fallacies. |
| 84 | `references/survey_methodology.md` — Cochran *Sampling Techniques*; Dillman *Tailored Design Method*; Groves *Survey Methodology*; question-wording bias (Schuman & Presser); AAPOR standards. |
| 85 | `references/segmentation_and_ci.md` — Kotler segmentation criteria; needs-based vs firmographic; Porter Five Forces; SCIP ethics; Christensen JTBD; conjoint/MaxDiff primer. |
| 86 | |
| 87 | ## Assumptions |
| 88 | |
| 89 | The sizer reports both methods but cannot validate your inputs — a top-down "1% of a $40B market" is only as good as the cited source and the serviceable fraction. |
| 90 | Sample-size uses the conservative p=0.5 (maximum variance) unless you supply an expected proportion. |
| 91 | Segment scores are inputs you provide; the tool enforces the gates and the weighting, it does not gather the underlying evidence. |
| 92 | Competitive intelligence must follow the SCIP code of ethics — no misrepresentation, no protected information. |
| 93 | |
| 94 | ## Anti-patterns |
| 95 | |
| 96 | **A single TAM number with no method.** Always triangulate top-down against bottoms-up. |
| 97 | **Spurious precision.** Size to the decision's tolerance; "$3.7142B" implies a confidence you do not have. |
| 98 | **Powering only the total.** Each reported segment needs its own sample floor. |
| 99 | **Leading or double-barreled survey questions.** Pre-test wording against the bias literature. |
| 100 | **Calling a demographic slice a segment.** It must be substantial AND accessible. |
| 101 | |
| 102 | ## Distinct from |
| 103 | |
| 104 | | Neighbor | Scope | Difference | |
| 105 | |---|---|---| |
| 106 | | `marketing-skill/campaign-analytics` | Attribution, ROAS, CPA, funnel of a live campaign | That **measures spend deployed**; this is **upstream methodology** | |
| 107 | | `marketing-skill/marketing-demand-acquisition` | Demand-gen, paid media, channel mix | That **runs acquisition**; this **builds the evidence** | |
| 108 | | `marketing-skill/marketing-strategy-pmm` | Positioning, GTM, category | That **sets strategy**; this **sizes and segments the market** | |
| 109 | | `commercial/pricing-strategist` | Pricing model + WTP + packaging | That **sets price**; this **sizes the market** | |
| 110 | | `product-research` (sibling) | User/product discovery methods | That studies **users**; this studies **the market** | |
| 111 | |
| 112 | ## Quick examples |
| 113 | |
| 114 | |
| 115 | python3 scripts/market_sizer.py --sample |
| 116 | python3 scripts/sample_size_planner.py --population 62000 --confidence 0.95 --moe 0.05 |
| 117 | python3 scripts/segmentation_scorer.py --sample --output json |
| 118 | |
| 119 | |
| 120 | The sample market triangulates a ~$1.47B top-down SAM against the bottoms-up figure and flags the divergence; the segmentation sample drops the "solopreneurs who might want analytics" slice for failing the substantiality and accessibility gates. |
| 121 | |
| 122 | ## Forcing-question library (Matt Pocock grill discipline) |
| 123 | |
| 124 | Walked one at a time by `/cs:grill-research-ops` or the orchestrator. Recommended answer + canon citation per question. Never bundled. |
| 125 | |
| 126 | **"Is your TAM top-down or bottoms-up — and have you computed it both ways to triangulate?"** |
| 127 | Recommended: both; reconcile the delta before quoting a number. |
| 128 | Canon: Bessemer / a16z market-sizing; Fermi estimation. |
| 129 | |
| 130 | **"What decision will this market size actually drive — and at what precision does it matter?"** |
| 131 | Recommended: size to the decision's tolerance, not to a spurious-precision number. |
| 132 | Canon: market-model conventions (Gartner/Forrester); decision-driven analysis. |
| 133 | |
| 134 | **"What's your target margin of error and confidence — and does your sample clear it per segment, not just overall?"** |
| 135 | Recommended: power each reported segment, not only the total. |
| 136 | Canon: Cochran *Sampling Techniques*; AAPOR standards. |
| 137 | |
| 138 | **"Are your survey questions free of leading and double-barreled wording?"** |
| 139 | Recommended: pre-test the wording; cite the bias source. |
| 140 | Canon: Schuman & Presser; Dillman *Tailored Design Method*. |
| 141 | |
| 142 | **"Do your segments pass measurable / substantial / accessible / actionable — or are they just demographic slices?"** |
| 143 | Recommended: drop segments that fail substantiality or accessibility. |
| 144 | Canon: Kotler segmentation criteria. |
| 145 | |
| 146 | Walk depth-first. Lock 1-2 before opening 3-5. After all are answered, invoke `market_sizer.py` → `sample_size_planner.py` → `segmentation_scorer.py`. |
| 147 |
Discussion
Alternatives
Browse more free Claude skills or everything in Product.