Size the market

From a number of accounts to potential revenue.

Patchwork of fields beside a road, aerial

Multiply the accounts you counted by what each one would really pay, segment by segment, then cap the result by what your team can sell in a given period. You end up with three figures, TAM, SAM and SOM, and each one traces back to rows in a table and assumptions you wrote down.

This is why the bottom-up approach is worth the extra work: when an investor or a board member challenges the number, you open the sheet and show the line.

Throughout this chapter, say you sell payroll software to French SMEs with 20 to 249 employees, priced per employee per month. Every figure below is illustrative. Replace them with your own counts and your own CRM data.

Count accounts from your table

Start with the deduplicated list and count by segment. If you are sizing before building the full list, count from a free official source first, because you only need totals at this point.

For France, INSEE publishes the Sirene stock files on data.gouv.fr. Load the legal units file into any SQL tool and filter on status, headcount band and NAF code. Check the column names against the current documentation before you run it:

SELECT trancheEffectifsUniteLegale AS band, COUNT(*) AS companies
FROM stock_unite_legale
WHERE etatAdministratifUniteLegale = 'A'
  AND trancheEffectifsUniteLegale IN ('12', '21', '22', '31')
  AND activitePrincipaleUniteLegale IN ('62.01Z', '62.02A', '70.22Z')
GROUP BY 1
ORDER BY 1;

Band 12 is 20 to 49 employees, 21 is 50 to 99, 22 is 100 to 199 and 31 is 200 to 249. Three traps sit in this query:

  • Count SIREN (the company) rather than SIRET (the establishment) when one person buys for the whole company, otherwise a chain with 80 sites counts 80 times.
  • The headcount band can be a few years old, and it is sometimes blank. Blank rows are unknowns, so report them on their own line.
  • A NAF code is the main activity as declared, which may not match what the company really does.

When you want the actual rows, Import Companies by NAF Code in Derrick does that from a column of NAF codes (I co-founded Derrick, so keep that in mind). It returns the SIRENE record for each company, including siren, tranche_effectif_salarie, adresse and dirigeant, at 1 credit per company imported. Paying per row to get a count makes no sense, so use the free stock file for totals and an import for the segments you will work. It only covers France. Elsewhere, start from the national registry or a company search, and expect a weaker count.

Correct the count with a sample

Filters lie in a measurable way. Draw 100 random rows per segment, open each company’s website, and mark whether it really fits your ICP. The share that passes is your precision, and you apply it to the count.

Segment Rows counted Fit in a sample of 100 Fitting accounts
20 to 49 employees 10,000 60 6,000
50 to 99 employees 3,400 65 2,210
100 to 249 employees 1,900 68 1,292

Round those to 6,000, 2,200 and 1,300. Those are the accounts that have the problem you solve, which gives you the base for the TAM.

Hay bales on a harvested field, aerial

Price each account from what customers pay

List prices flatter the result, so use the median of what your customers in that segment actually pay per year. If you have no customers yet, use your price with the discount you expect to give, and label it an assumption.

Here, take €6 per employee per month, and the typical headcount of each segment:

Segment Typical employees Annual value per account
20 to 49 30 €2,160
50 to 99 70 €5,040
100 to 249 150 €10,800

Use the typical headcount found in your table (the median of the real rows). The middle of the band is a guess that often runs too high in a skewed market.

Compute TAM and SAM by segment

TAM counts every account with the problem. SAM keeps the accounts you can serve today, given your language, your integrations and your product’s limits. Each exclusion must be a filter on data you hold. In this example, the product doesn’t yet handle some collective agreements, so companies in those sectors drop out.

Segment TAM accounts TAM revenue SAM accounts SAM revenue
20 to 49 6,000 €12,960,000 4,200 €9,072,000
50 to 99 2,200 €11,088,000 1,500 €7,560,000
100 to 249 1,300 €14,040,000 700 €7,560,000
Total 9,500 €38,088,000 6,400 €24,192,000

In a sheet, with TAM accounts in B, SAM accounts in D and annual value in F:

TAM revenue: =SUMPRODUCT(B2:B4, F2:F4)
SAM revenue: =SUMPRODUCT(D2:D4, F2:F4)
Average value per SAM account: =SUMPRODUCT(D2:D4, F2:F4) / SUM(D2:D4)

Look at the distribution before you look at the total. The 100 to 249 segment holds 14% of TAM accounts and 37% of TAM revenue, and that decides where a small team should start. It feeds directly into your tiers.

Green and yellow crop strips from above

Cap the SOM with your sales capacity

SOM is what you can win over a defined period. A share of the market picked from the air (“we’ll get 5%”) tells you nothing. Compute it from capacity and win rate:

Accounts worked = reps × accounts per rep per month × months
New customers   = accounts worked × win rate
SOM revenue     = new customers × average value per SAM account

With 3 reps, 60 accounts each per month over 24 months, that makes 4,320 accounts worked out of 6,400. The average SAM value is €3,780. Win rates come from your CRM.

Scenario Win rate New customers Annual revenue after 24 months
Low 2% 86 €325,080
Expected 3% 130 €491,400
High 4% 173 €653,940

Read the low line first, and check coverage as well. Here the team works through two thirds of the SAM in two years, so the market won’t run dry within the plan, but it will in about three years at this pace. A team in a smaller niche could hit that wall in months, and at that point the SOM is capped by the number of accounts. These figures ignore churn. If yours is material, subtract it before you share the number.

Show your assumptions next to the number

Each figure gets a line stating where it comes from and how much you trust it. Change one input and watch how far the result moves, then spend your checking time on the inputs that move it most.

Assumption Value Source Confidence Effect if wrong
Fit rate, 20 to 49 60% Sample of 100 rows Medium Accounts and revenue scale with it
Price per employee €6 Customer median High Revenue scales with it
Excluded sectors A third of accounts Filter on NAF codes Medium Changes SAM, TAM stays put
Accounts per rep per month 60 Last two quarters Medium Changes coverage and SOM
Win rate 3% CRM, 12 months Low if the base is small SOM scales with it

As a cross-check, compare your result with any published market figure you can source. A wide gap often comes from a different scope, so explain it and keep your own number.

Your next step: run the count on your segments, draw one sample of 100 rows, and fill the TAM and SAM table this week. Save it as a tab next to the account list, then decide where that list should live.