# Market Size

> Compute TAM/SAM/SOM on French companies using the data.gouv API Recherche d'entreprises — combines NAF codes, départements, tranches d'effectif and CA filters to produce sourced market sizes with scenarios. Use when the user asks for "market size", "taille de marché", "combien d'entreprises", "TAM/SAM/SOM", or to size a specific ICP.

- Skill: `build-your-sales/market-size` (Agent Skill)
- Install (CLI): `npx skillmds@latest add build-your-sales/market-size`
- Raw SKILL.md: https://api.skillmd.com/api/skills/build-your-sales/market-size/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: Build-Your-Sales (https://skillmd.com/u/build-your-sales)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/build-your-sales/market-size

---


# market-size — TAM / SAM / SOM via data.gouv

You compute the **Total Addressable Market**, **Serviceable Addressable Market**, and **Serviceable Obtainable Market** on French companies, sourced from the public API Recherche d'entreprises.

## Definitions (BYS-flavored)

| Acronym | Definition | Filters typically applied |
|---|---|---|
| **TAM** | Toutes les entreprises FR qui pourraient théoriquement avoir le problème | NAF section + tranche d'effectif large + `etat_administratif=A` |
| **SAM** | Celles qu'on peut **vraiment** servir (sweet spot ICP) | TAM + département/région + tranche d'effectif sweet spot + CA range |
| **SOM** | Celles qu'on va **réellement** atteindre sur 12 mois | 1-3% du SAM (réalité du cold outbound B2B) |

## Prerequisites

- (Idéalement) `clients/<client>/cab-p.md` existe → on connaît l'ICP
- Sinon : l'utilisateur peut lancer ce skill ad-hoc en donnant directement les critères

## Flow

### 1. Récupérer ou demander les critères

Si `cab-p.md` ou `icp.yaml` existe : extraire les filtres pré-définis et confirmer avec l'utilisateur.

Sinon, demander **une question à la fois** :

1. Secteur(s) cible(s) : description libre OU code(s) NAF directs (voir `references/naf-codes.md` pour aider à traduire)
2. Tranche(s) de salariés : `1-9`, `10-49`, `50-249`, `250-999`, `1000+` (sera traduit en codes INSEE)
3. Géographie : France entière / région / liste de départements
4. CA cible (optionnel) : ex `>1M€`, `1M-20M€`, `>50M€`
5. Catégorie INSEE (optionnel) : PME / ETI / GE
6. Filtres spéciaux (optionnel) : Qualiopi, ESS, RGE, organisme de formation, association

### 2. Calculer le TAM

Appel à l'API avec les filtres **larges** (juste section + tranche large + `etat_administratif=A`) :

```bash
curl -s "https://recherche-entreprises.api.gouv.fr/search?section_activite_principale=J&tranche_effectif_salarie=11,12,21,22,31,32,41,42&etat_administratif=A&per_page=1" -H "User-Agent: data-gouv-bys/0.1" | jq '.total_results'
```

Le champ `total_results` donne le compte. Pas besoin de paginer pour un comptage.

⚠️ **L'API plafonne `total_results` à 10 000.** Si tu reçois exactement `10000` :
- Le vrai TAM est probablement > 10K
- Documente le résultat comme "10 000+" dans le market-size.md
- Pour un comptage précis : décompose par département (région → départements) puis somme, ou consulte le dataset SIRENE bulk sur data.gouv

### 3. Calculer le SAM

Resserrer les filtres avec **tous les critères ICP** (NAF précis, départements ciblés, CA range, catégorie, signaux qualité) :

```bash
curl -s "https://recherche-entreprises.api.gouv.fr/search?activite_principale=62.01Z,62.02A&departement=75,92,93,94,77,78,91,95&tranche_effectif_salarie=21,22&categorie_entreprise=PME,ETI&etat_administratif=A&per_page=1" -H "User-Agent: data-gouv-bys/0.1" | jq '.total_results'
```

### 4. Calculer le SOM

3 scénarios réalistes :

- **Conservateur** : 1% du SAM atteignable sur 12 mois
- **Réaliste (BYS baseline)** : 2% du SAM atteignable
- **Optimiste** : 3% du SAM atteignable (avec brand fort + delivrabilité top + signaux récents)

Puis appliquer le taux de conversion outbound :

| Étape | Taux médian |
|---|---|
| Email envoyé → ouvert | 50-70% |
| Ouvert → répondu | 5-9% (avec personnalisation) |
| Répondu → meeting | 30-50% |
| Meeting → opportunité | 40-60% |
| Opportunité → client | 15-30% |

Multiplie le SOM par le funnel pour obtenir : meetings attendus, opportunités, deals fermés.

### 5. Sortie

Génère `clients/<client>/market-size.md` (ou affiche directement si standalone) :

```markdown
# Market Size — <Client>
Date: 2026-05-21
Source: data.gouv.fr / API Recherche d'entreprises (snapshot 2026-05-21)

## ICP synthétisé
- Secteurs (NAF): 62.01Z (édition logiciel), 62.02A (conseil SI)
- Effectif: 50-249 salariés (tranches INSEE 21, 22, 31)
- Catégorie: PME, ETI
- Géo: Île-de-France (75, 77, 78, 91, 92, 93, 94, 95)
- État: A (active)

## TAM — Toutes les boîtes FR potentielles
**Critères TAM** : Section J (Information et communication), 10+ salariés, FR entière, actives.
**Résultat** : `X 234 entreprises`
- Hypothèse : toutes les entreprises tech FR de 10+ salariés ont *potentiellement* le problème

## SAM — Vrai cœur de cible
**Critères SAM** : NAF resserré + IDF + 50-249 + PME/ETI
**Résultat** : `Y 567 entreprises`
- Sweet spot validé (niveau 3-4 de la méthode BYS)
- 1-2 contacts ATL/BTL identifiables par boîte = ~ Y × 1.5 personnes

## SOM — Cible 12 mois
| Scénario | % SAM | Boîtes | Personnes |
|---|---|---|---|
| Conservateur | 1% | 5 | 7-8 |
| Réaliste | 2% | 11 | 16-17 |
| Optimiste | 3% | 17 | 25 |

## Funnel attendu (scénario réaliste, 11 boîtes / 17 personnes)
- Emails envoyés (3 séquences) : ~ 51
- Ouverts (60%) : ~ 31
- Réponses (7%) : ~ 4
- Meetings (40%) : ~ 1.5
- Deals (20% des oppos) : ~ 0.3

## Sensibilité
- Si on élargit à AURA + Occitanie : SAM × 2.3
- Si on accepte les 20-49 salariés : SAM × 4.1
- Si on ajoute les microentreprises (1-9 sal.) : SAM × 18 (mais qualité chute)

## Recommandations
- Le SAM est sain (Y > 500 boîtes) → budget de campagne dimensionné correctement
- 2-3 ciblages T1 + 4-5 T2 sont jouables sans saturer
- Risque : <warnings éventuels, ex: trop concentré sur l'IDF, ou dépendant d'un seul NAF>
```

### 6. Si TAM trop petit

Si `TAM < 200` → demande poliment :

> "Le TAM est très petit (X entreprises). C'est un marché de niche — ça marche en outbound mais avec moins de 10 leads/mois. Tu veux :
> 1. Élargir la géographie (toute la France au lieu d'IDF) ?
> 2. Élargir les tranches d'effectif (ajouter 250-999) ?
> 3. Ajouter des NAF voisins ?
> 4. Tester un autre segment d'abord et garder celui-ci en bonus ?"

### 7. Si TAM trop large

Si `SAM > 10 000` → propose de resserrer :

> "Le SAM est très large (X+ boîtes). C'est bien pour la pérennité, mais en outbound on personnalise au moins 30 leads/jour max. Tu veux qu'on resserre avec :
> 1. Un signal récent (levée de fonds < 3 mois, hiring sales, croissance > 20%) ?
> 2. Un CA range plus précis ?
> 3. Un sous-secteur NAF plus pointu ?"

## Helpers

### Code Bash pour TAM/SAM en un coup

```bash
TAM=$(curl -s "https://recherche-entreprises.api.gouv.fr/search?section_activite_principale=J&etat_administratif=A&per_page=1" -H "User-Agent: data-gouv-bys/0.1" | jq -r '.total_results')
SAM=$(curl -s "https://recherche-entreprises.api.gouv.fr/search?activite_principale=62.01Z,62.02A&departement=75,92,93,94,77,78,91,95&tranche_effectif_salarie=21,22&categorie_entreprise=PME,ETI&etat_administratif=A&per_page=1" -H "User-Agent: data-gouv-bys/0.1" | jq -r '.total_results')
echo "TAM: $TAM | SAM: $SAM | SOM (2%): $(echo "$SAM * 0.02" | bc)"
```

### Pour récupérer la liste des dirigeants d'une boîte par SIREN

```bash
curl -s "https://recherche-entreprises.api.gouv.fr/search?q=552120222" -H "User-Agent: data-gouv-bys/0.1" | jq '.results[0].dirigeants'
```

## Rules

- **Always cite the source** (data.gouv.fr / API Recherche d'entreprises, snapshot date)
- **Never invent numbers** — every figure must come from an actual API call
- **Always show the 3 SOM scenarios** (conservative / realistic / optimistic) — never a single point estimate
- **Always show sensitivity** (what changes if we widen/narrow one filter)
- **Rate limit** : 7 req/s max, add `User-Agent` header
- If the user is doing market sizing standalone (no client folder), save the output to `market-size-<topic>-<date>.md` at the repo root or wherever the user is

## Next step

> "Le marché est validé. Si tu n'as pas encore les 10 ciblages, lance `/data-gouv-bys:ciblage`. Sinon, `/data-gouv-bys:handoff-outbound` pour pousser vers l'Outbound Engine."

