What is a TAM?
TAM, SAM and SOM, and the difference between a number and a usable database.

A TAM (total addressable market) is the annual revenue you would make if every company that could buy your product bought it. The figure stays useful for about five minutes. What you work with afterwards is the database that produced it, so this guide treats the TAM as two things: a number, and the list of accounts behind that number.
I keep the example from the previous chapter: scheduling software sold to private nursery operators in France. All figures are invented for the illustration.
TAM, SAM and SOM on one example
| Layer | Stands for | Question it answers | In the example | Accounts | Annual value |
|---|---|---|---|---|---|
| TAM | Total addressable market | Who could ever buy this kind of product? | Every private nursery operator in France | 1,900 | €10.9M |
| SAM | Serviceable addressable market | Who can we serve today, with this product and this sales model? | Operators with three sites or more, since the product is built for multi-site planning | 640 | €6.4M |
| SOM | Serviceable obtainable market | What can we realistically win in a given period? | SAM accounts worked over 24 months at an 8% win rate | 51 | €510,000 |
Each layer has a different constraint. The TAM is limited by the need: does this company have the problem at all. The SAM is limited by you: your product scope, your languages, your countries, the price point your sales model can support. The SOM is limited by your capacity and your win rate.
Where to draw the TAM is a judgment call. I draw it around the widest perimeter you would seriously plan to sell into over the next few years. A worldwide figure for a product that only exists in French informs no decision.
Two mistakes that make these numbers useless
Treating the SOM as a percentage of the market
“We only need 1% of the market” has no mechanism behind it. Nothing in that sentence tells you who the 1% are or how you would reach them. Compute the SOM from what your team can do:
SOM accounts = MIN(SAM accounts, reps * new accounts per rep per month * months) * win rate
One rep opening 60 accounts a month over 24 months could touch 1,440 accounts, so the SAM of 640 is the cap, and 640 at 8% gives 51 customers. The same rep opening only 20 a month reaches 480 accounts and wins 38. Take the win rate from your CRM, by segment. If you have no history yet, say so in the document and show a low and a high case.
Counting revenue that can’t exist
Multiplying every company in a sector by your list price assumes they all have the need, the budget and a separate buyer. A group running twelve nurseries through twelve legal entities buys once, so counting it twelve times inflates your market by eleven phantom accounts. A one-site operator with four employees may never pay for scheduling software at all. Each of those corrections needs account-level data, which is the argument for building the list.
A number and a database are two different deliverables
| Market figure | TAM database | |
|---|---|---|
| Unit | Euros | One row per company |
| Answers | How big is this? | Which accounts, in what order, and how many are left? |
| Used by | Board, investors | Sales, marketing, product |
| Lifespan | Until someone challenges an assumption | As long as someone maintains it |
| How to test it | Is it plausible? | Open any row and check the company exists and fits |
Build the database and the figure falls out of it in one query:
SELECT
COUNT(*) AS tam_accounts,
SUM(estimated_acv) AS tam_value,
COUNT(*) FILTER (WHERE in_sam) AS sam_accounts,
SUM(estimated_acv) FILTER (WHERE in_sam) AS sam_value
FROM accounts
WHERE status <> 'excluded';
When someone challenges the number, you change a filter and rerun it. The argument moves from “I don’t believe that figure” to “should a two-site operator be in scope”, which is a much better argument to have.
What a usable TAM database contains
The minimum account table, one row per company that buys as a single entity:
| Column | Example | What it’s for |
|---|---|---|
siren or domain |
000000000 | Unique key, to merge sources and avoid duplicates |
name |
Crèches Exemple SAS | Human reading |
country, department |
FR, 69 | Territory split, SAM filter |
naf_code |
88.91A | Scope check |
headcount_band |
12 (INSEE code for 20 to 49 employees) | Fit, pricing |
open_sites |
7 | Fit specific to this market |
in_sam |
TRUE | Separates the SAM from the TAM |
estimated_acv |
8000 | Turns rows into euros |
tier |
A | Working order |
status |
not contacted | Coverage, exclusions |
source |
SIRENE | Lets you trust or discard the row |
last_checked |
2026-11-09 | Freshness |
Four checks tell you whether what you have deserves the name:
- One row equals one buying entity, and the key is unique.
- Every criterion you filter on is a column, so nothing lives in someone’s head.
- Every row carries its source and a date.
- Excluded accounts get a status and stay in the file, otherwise the next import brings them back.
Contacts and signals go in separate tables linked to the account, because one company has several people and many dated events. As soon as a row names a person, data protection rules apply. Read the CNIL’s guidance on commercial email prospecting (in French), check each source’s terms of use and take advice from counsel. The chapter on keeping the TAM up to date comes back to this.
Where the rows come from, and what Derrick covers
Some columns are facts you can fetch. Others are your judgment, and no tool will fill them for you. I co-founded Derrick, so read this part knowing that.
Import Companies from a Prompt takes one sentence describing the companies you want and returns name, industry, country, region, city, website and LinkedIn URL. It costs 1 credit per company if your own Sales Navigator is connected, 10 otherwise. Enrich Companies then takes a LinkedIn URL or a domain and adds fields such as staff count range and headquarters, at 1 credit per company enriched.
| Column | Filled by a tool | Filled by you |
|---|---|---|
name, domain, country |
Yes | |
headcount_band |
Yes, from a band declared on LinkedIn or in a registry | |
in_sam, tier |
Yes, from your criteria | |
estimated_acv |
Yes, from your own billing | |
status |
Yes, from your CRM and opt-outs |
The prompt route depends on company pages existing on LinkedIn, so small local businesses with no page will be missing. For the nursery example the French registry is the better source, as the previous chapter showed. Derrick doesn’t replace a CRM either, and the storage chapter covers where the source of truth should live.
Without any tool, the method holds: export a search from a B2B database or a professional directory, paste it in, and map it to the same columns. It takes longer and the columns don’t change.
Your next step: create a sheet with the columns above and enter twenty accounts by hand, mixing customers and prospects you know. The columns you struggle to fill show you which sources you’ll need. Then read top-down vs bottom-up to choose how you’ll count the rest.