Tam builder
@gtmengineer/tam-builder
Define your ICP and size the market from a companies CSV (a CRM export or any company list). Applies market filters for SAM, scores every company into A, B, and C tiers with reasons, values each layer with ACV by size band, and writes a tiered account list ready for territories or outbound.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
- 1---
- 2name: tam-builder
- 3description: Define an ideal customer profile and size the market from a companies CSV. Turns the user's ICP into market filters (SAM) and a points score (A, B, C tiers), values TAM, SAM, and target with ACV by company size, explains why companies fall out, and writes a tiered account list with reasons. Use when the user says "size our TAM", "how many companies fit our ICP", "build a target account list", "tier these accounts", "what's our serviceable market", or shares a company list from a CRM or data provider.
- 4license: MIT
- 5---
- 7# TAM builder
- 9Makes the ICP concrete enough to count. Hard filters define the market you can serve; a points score ranks fit inside it; ACV by size band turns counts into dollars. Every account gets a tier and the reasons, so sales can see why.
- 11## When to use
- 13- Planning: territory design, headcount, board or fundraising market slides.
- 14- Building or re-tiering a target account list for outbound or ABM.
- 15- Not a market research report. The answer is only as good as the company list; say so.
- 17## Inputs
- 191. **Companies** at `data/companies.csv`: a CRM company export, a data provider list, or a merged file. Needs an employee count. Uses name, domain or website, industry, country, and any other column the score refers to (technologies, funding stage, growth). Column names are matched loosely (`Number of Employees`, `Country/Region`, `Website` all work). Employee ranges like `51-200` use the midpoint; `2000+` uses 2000.
- 202. **ICP** at `data/icp.json` (start from the kit's `examples/icp.json`):
- 21 - `market`: hard filters. `countries` (2-letter codes; common country names are converted), `employees_min`, `employees_max`, `industries` (allow list) and or `exclude_industries`.
- 22 - `score`: rules with `field`, `op` (`in`, `not_in`, `==`, `contains_any`, `exists`, `between`, `>=`, `<=`), `value`, `points`, and a readable `label`.
- 23 - `tiers`: minimum score per tier. `target_tiers`: which tiers count as the target (default the top two).
- 24 - `bands`: employee size bands with `max` and `acv` (annual value per customer). The last band has no `max`.
- 26If the user has no ICP yet, interview them first: best 10 customers and what they share, deals lost on fit, segments they cannot serve (country, regulation, size), and ACV by size. Turn the answers into the JSON and show it back before running.
- 28## Steps
- 301. Build or confirm `data/icp.json`. Check the ACVs against real deals if the user has them.
- 312. Run:
- 33 ```bash
- 34 node scripts/tam.mjs data/companies.csv data/icp.json --out out --name tam
- 35 ```
- 373. Read `out/tam.json`. Report TAM, SAM, target, the tier split, and the top reasons companies fall out of market.
- 384. Sanity checks to raise with the user:
- 39 - Large "no employee count" or "no country" numbers: enrich before trusting the sizing.
- 40 - A tier with almost everyone in it: the score is too generous. Suggest raising a threshold or adding a rule.
- 41 - Tier A with very few companies: fine for ABM, too small for a whole team's quota. Show the math (accounts per rep).
- 425. Point to `out/tam-accounts.csv` (sorted by fit, with reasons) as the list for territories or outbound.
- 44## Output to the user
- 46```markdown
- 47**TAM 15 companies ($440,000/yr). SAM 9 ($296,000). Target tiers A and B: 6 companies ($203,000).**
- 49| Tier | Companies | Annual value |
- 50| --- | ---: | ---: |
- 51| A | 4 | $135,000 |
- 52| B | 2 | $68,000 |
- 54Out of market: 3 outside US, CA, GB; 2 under 50 employees; 1 government.
- 551 company has no employee count. Accounts list: out/tam-accounts.csv
- 56```
- 58## Guardrails
- 60- Dollar figures are count times ACV: a planning number, not a forecast. Say this whenever you share them.
- 61- Do not add companies or fill in missing data from memory. Missing data is reported, not guessed.
- 62- Never score on protected or sensitive attributes of people. This kit scores companies.
