Market Research skill for Codex
TAM you can defend line by line. Codex sizes a market from countable units and real prices, applies sourced SAM filters one at a time, and grounds SOM in sales capacity or comparable companies rather than a round percentage. It cross-checks against top-down figures, flags gaps over 2x, and delivers an assumptions log plus low, base and high ranges so readers see which input drives the answer.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- market-research Installs to ~/.agents/skills/market-research/ for every project on this machine.
curl -fsSL codexskills.dev/cli.mjs -o codex-skills.mjsnode codex-skills.mjs install market-research The CLI also searches, updates and removes skills. Run it with no arguments to pick from a list. Needs Node 20.12+.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- --project market-research Installs to .agents/skills/market-research/ in the current repository. Commit it and everyone who runs Codex there gets it.
curl -fsSLO codexskills.dev/downloads/market-research.zipunzip -o market-research.zip -d ~/.agents/skills/ The archive holds the skill folder with its generated agents/openai.yaml. Unzip into .agents/skills/ to scope it to a repo.
& ([scriptblock]::Create((irm codexskills.dev/install.ps1))) market-research PowerShell 5.1 or 7. Installs to %USERPROFILE%\.agents\skills\. Add -Project for the current repo.
104-line POSIX script. No sudo, no telemetry. Read install.sh
Use it in Codex
Start a prompt with $market-research, or pick it from /skills.
You can also just describe the task: Codex reads the description below and loads the playbook when your request matches.
What Codex reads before loading it
Sizes markets with TAM, SAM and SOM using bottom-up unit math cross-checked against top-down data from census, industry and public-company filings, segments customers by firmographics and needs, and documents every assumption in a spreadsheet model with sensitivity ranges. Use when asked to size a market, estimate TAM/SAM/SOM for a pitch or business case, research a customer segment, or sanity-check market numbers from a report or deck.
Use it when
- A pitch, business case or plan needs a market size with visible assumptions
- You are choosing which segment to enter first
- Someone hands you a market figure and you need to know if it holds up
Use something else when
- You need positioning against named competitors: use competitor-analysis
- You are building the full revenue and cost model: use financial-modeling
- You need pricing and willingness-to-pay research specifically: use pricing-strategy
How to check the result
Units stay consistent from TAM to SOM, every input has a dated source or a labelled assumption, and bottom-up and top-down totals agree within about 2x or the gap is explained.
The mistake it prevents
Quoting an industry-wide analyst number as TAM, or switching units mid-model so seats get multiplied by a per-company price.
A market estimate is credible when a skeptical reader can see every input, where it came from, and how much the answer moves if the input is wrong. The bottom-up number (who buys, how many, at what price) is the estimate; top-down figures are the sanity check.
This produces research for planning, not investment advice. Figures used in fundraising materials or filings should be reviewed by someone accountable for them.
Definitions (state them in the output)
| Term | Definition | Built from |
|---|---|---|
| TAM | Annual revenue if every potential customer for this problem bought your type of solution | All target units x annual price |
| SAM | The part of TAM your product and go-to-market can actually serve now (geography, segment, channel, language, compliance) | TAM filtered by current constraints |
| SOM | The share of SAM you can realistically win in a stated period (usually 3-5 years) | SAM x achievable share, grounded in comparables or sales capacity |
TAM is about a problem and a buyer, not about an industry label. “The $600B software market” is never a TAM.
Workflow
- [ ] 1. Define the buyer, the unit and the price metric
- [ ] 2. Bottom-up: count units and price per unit
- [ ] 3. Apply SAM filters, each with a source
- [ ] 4. Derive SOM from capacity or comparables
- [ ] 5. Top-down cross-check; reconcile any gap > 2x
- [ ] 6. Sensitivity: low / base / high on the 3 biggest drivers
- [ ] 7. Segment the SAM and rank segments
- [ ] 8. Write the assumptions log and the summary
1. Unit and price
Pick the unit that matches how the product is bought: companies, seats, developers, locations, vehicles, transactions. Pick the price metric customers actually pay (per seat per year, per location per month, % of GMV). Mixing units (seats in one step, companies in the next) is the most common error in market models.
2. Bottom-up count
Target unit: US dental practices with 3+ chairs
Count: ~X establishments (Census County Business Patterns, NAICS 621210,
filter by employee size class as a proxy for chairs)
Price: $300/location/month from 4 competitor pricing pages (median)
TAM (US): X x $3,600/year
Good public sources (most need network access):
| Data | Source |
|---|---|
| US establishments by industry and size | Census County Business Patterns, Statistics of US Businesses (by NAICS) |
| Occupations and headcounts | BLS Occupational Employment and Wage Statistics |
| EU businesses by sector and size | Eurostat structural business statistics |
| Developer populations | Stack Overflow Developer Survey, GitHub Octoverse, SlashData (note each one’s method) |
| Public competitors’ revenue, customers, segments | 10-K / 20-F filings on SEC EDGAR, annual reports, investor decks |
| Pricing | Competitor pricing pages (archive them with the date), G2 listings |
| Private competitor signals | Press releases, job postings, funding announcements (treat as weak) |
Analyst reports (Gartner, IDC, Statista) are often paywalled and use opaque methods; cite them only as a top-down cross-check, and only with the figure, year and definition.
3. SAM filters
Apply one filter at a time, each with a source or a labelled assumption:
TAM (US + EU) 100%
x served regions (US only at launch) 58% (count from step 2)
x segment fit (practices on cloud PMS) 40% ASSUMPTION: vendor survey, n=300
x compliance (HIPAA-ready, yes) 100%
= SAM
4. SOM
Ground share in something observable, not a round “1% of the market”:
- Capacity: reps x deals per rep per year x ramp x win rate x years.
- Comparables: what share did similar companies reach in a similar number of years? (Public filings give customer counts.)
- Funnel: traffic or community size x conversion rates from your own data.
Use the lowest of the defensible methods as the base case.
5. Top-down cross-check
Find a total spend figure for the category (analyst report, sum of public competitors’ revenue divided by their estimated share). If bottom-up and top-down differ by more than ~2x, find the reason before publishing: wrong unit count, price too high, or the top-down figure includes adjacent products.
6. Sensitivity
Vary the three inputs with the most uncertainty and show the range:
| Driver | Low | Base | High | Source of range |
|---|---|---|---|---|
| Price / unit / year | $2,400 | $3,600 | $4,800 | competitor quartiles |
| Segment fit % | 25% | 40% | 55% | survey CI |
| Win share by year 5 | 1% | 3% | 5% | comparables |
Build it as a spreadsheet with inputs in one block and formulas referencing them, never
hard-coded numbers in formulas. Hand formula work to $excel-formulas or
$xlsx-spreadsheets when building the file.
7. Segmentation
Segment the SAM on variables that change buying behaviour: size, vertical, job-to-be-done, current solution, regulatory need, budget owner. For each segment estimate size, pain intensity (evidence from interviews, reviews, support tickets), willingness to pay, reachability (channels) and competition. Rank segments by attractiveness x ability to win.
Gotchas
- Revenue TAM vs user TAM: “50M developers” is not a market until multiplied by what each would pay.
- Double counting: seats and companies, or counting both a platform and its add-ons.
- Using list price when most deals are discounted; use realised or median plan price.
- Survey figures from a vendor’s own users skew toward early adopters.
- Currency and year: state both; convert with a dated rate.
- CAGR quotes from press releases (“growing 24% to 2032”) usually have no method. Use as context only.
- A tiny SAM is a useful finding. Do not inflate filters to reach a fundable number.
Verification
- Recompute TAM x filters = SAM and SAM x share = SOM in the sheet; units match at each step.
- Each input has a source with date, or is labelled ASSUMPTION with reasoning.
- Bottom-up and top-down are within ~2x or the gap is explained.
- The sensitivity table shows which single input moves the answer most.
Output template
# Market sizing: <product> for <buyer>
**Unit:** <unit> | **Price metric:** <metric> | **Currency/year:** USD 2026
| | Base | Range (low-high) |
|---|---|---|
| TAM | $X | $A-$B |
| SAM | $Y | ... |
| SOM (year 5) | $Z | ... |
**Method:** bottom-up count x price; filters below; top-down check from <source>.
**Biggest uncertainty:** <driver> moves SOM from $a to $b.
## Assumptions log
| # | Input | Value | Source / reasoning | Confidence |
## Segments (ranked)
| Segment | Size | Pain evidence | WTP | Reach | Competition | Rank | What the zip contains
SKILL.md plus the interface file below. Nothing runs on install.
agents/openai.yaml
Gives the Codex app a display name, a one-line description and a starter prompt for this skill.
interface:
display_name: "Market Research"
short_description: "TAM you can defend line by line"
default_prompt: "$market-research Estimate TAM, SAM and SOM for a scheduling tool for US dental practices" About this skill
Written and maintained by the Codex Skills editors to the same editorial standard as every skill here: a selective description, a real workflow, known pitfalls and a way to verify the work. First published , last updated . MIT licensed. Something wrong or out of date? Tell us.