Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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/segm
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-19 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 103% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 142% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 175% | 0% |
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.
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.Invoke this skill when:
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).
assets/market_research_brief_template.md (objective, the decision this informs, sizing approach, sampling plan, assumptions register).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.sample_size_planner.py --input survey.json. Fund the per-segment floors, not just the overall n.segmentation_scorer.py --input segments.json --profile <same>. Drop segments failing the substantiality/accessibility gate.| 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}.
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.
bashpython3 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.
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).
bash/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/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.| 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 |
bashpython3 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.
Walked one at a time by /cs:grill-research-ops or the orchestrator. Recommended answer + canon citation per question. Never bundled.
Recommended: both; reconcile the delta before quoting a number. Canon: Bessemer / a16z market-sizing; Fermi estimation.
Recommended: size to the decision's tolerance, not to a spurious-precision number. Canon: market-model conventions (Gartner/Forrester); decision-driven analysis.
Recommended: power each reported segment, not only the total. Canon: Cochran Sampling Techniques; AAPOR standards.
Recommended: pre-test the wording; cite the bias source. Canon: Schuman & Presser; Dillman Tailored Design Method.
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.
Other measured skills in the registry, with their headline benchmark lift.