Base Sirene : la liste des entreprises par code NAF et département
Ce qu'est la base Sirene, comment lire un code NAF, et comment obtenir la liste des entreprises par code NAF et département, gratuitement, avec l'API ouverte ou les fichiers de data.gouv.fr.
Requêtes et scripts testés le 26 octobre 2026.
Vous cherchez toutes les sociétés de développement logiciel de Gironde, les boulangeries du Rhône ou les cabinets d'ingénierie d'Île-de-France ? La base Sirene contient la réponse, et elle est gratuite. Ce guide explique ce qu'est la base Sirene, comment lire un code NAF, puis comment obtenir la liste des entreprises par code NAF et par département, filtrée par effectif salarié et date de création, avec l'API publique (sans clé) ou le fichier Sirene. Tous les exemples ont été testés le 26 octobre 2026.
La base Sirene en bref
Sirene est le répertoire des entreprises et de leurs établissements tenu par l'Insee. Deux identifiants à retenir :
- le SIREN (9 chiffres) identifie l'entreprise, appelée « unité légale » ;
- le SIRET (14 chiffres) identifie chaque établissement : le SIREN suivi d'un numéro interne à 5 chiffres (NIC).
Une entreprise a donc un SIREN et autant de SIRET que d'établissements, dont un siège. Il existe plusieurs façons d'accéder aux données :
| Accès | Clé ou compte | Fraîcheur | Idéal pour |
|---|---|---|---|
| Fichiers stock sur data.gouv.fr (CSV et Parquet) | aucun | mensuelle | extractions complètes, analyses |
| API Sirene de l'Insee | compte et souscription sur le portail | quotidienne | toutes les variables Sirene, à jour |
| API Recherche d'entreprises | aucune | quotidienne | recherches filtrées rapides |
Le fichier Sirene sur data.gouv (la « base Sirene des entreprises et de leurs établissements ») est une image du répertoire au dernier jour du mois précédent, diffusée sous Licence Ouverte. En octobre 2026, le fichier des unités légales pèse environ 714 Mo en Parquet et celui des établissements environ 2,2 Go. Les deux API, elles, sont mises à jour chaque jour : seuls les fichiers stock ont jusqu'à un mois de retard.
Comment fonctionnent les codes NAF et APE
Le code APE (activité principale exercée) est attribué par l'Insee à chaque entreprise et à chaque établissement. D'après la définition de l'Insee, c'est l'activité qui génère le plus de valeur ajoutée, estimée en pratique par la répartition du chiffre d'affaires. Ce code est tiré de la NAF, la nomenclature d'activités française.
La NAF rév. 2 compte cinq niveaux : 21 sections (une lettre), 88 divisions (2 chiffres), 272 groupes, 615 classes et 732 sous-classes (4 chiffres et une lettre). Dans Sirene, le code APE en vigueur est une sous-classe. Exemple avec 62.01Z : section J (Information et communication), division 62, groupe 62.0, classe 62.01, sous-classe 62.01Z.
Liste des codes NAF courants
| Code NAF | Libellé officiel |
|---|---|
| 10.71C | Boulangerie et boulangerie-pâtisserie |
| 41.20A | Construction de maisons individuelles |
| 43.21A | Travaux d'installation électrique dans tous locaux |
| 43.22A | Travaux d'installation d'eau et de gaz en tous locaux |
| 56.10A | Restauration traditionnelle |
| 56.10C | Restauration de type rapide |
| 62.01Z | Programmation informatique |
| 62.02A | Conseil en systèmes et logiciels informatiques |
| 68.20B | Location de terrains et d'autres biens immobiliers |
| 69.20Z | Activités comptables |
| 70.22Z | Conseil pour les affaires et autres conseils de gestion |
| 71.12B | Ingénierie, études techniques |
| 96.02A | Coiffure |
La liste complète des codes NAF est consultable et téléchargeable sur la page NAF de l'Insee.
À savoir pour 2027 : l'Insee passe à la NAF 2025 au 1er janvier 2027. Depuis décembre 2025, le futur code est déjà diffusé à titre informatif, dans les fichiers stock comme dans l'API Recherche d'entreprises (champ activite_principale_naf25). Dans nos réponses, une boulangerie codée 10.71C portait par exemple le code NAF 2025 10.71H. Si vous construisez une liste récurrente, prévoyez une table de correspondance (l'Insee en publie sur la même page).
Filtrer par code NAF, département et effectif avec l'API ouverte
L'API Recherche d'entreprises répond sans inscription. Une première requête, ici les boulangeries actives (hors entrepreneurs individuels) de 10 à 49 salariés ayant un établissement dans le Rhône :
curl -A "mon-projet/1.0 (+https://exemple.fr)" \
"https://recherche-entreprises.api.gouv.fr/search?activite_principale=10.71C&departement=69&etat_administratif=A&est_entrepreneur_individuel=false&tranche_effectif_salarie=11,12&per_page=5&minimal=true&include=siege"
Sous Windows PowerShell, tapez curl.exe et écrivez la commande sur une seule ligne, sans le \.
La réponse indiquait "total_results": 183 lors de notre test. Les paramètres utiles :
| Paramètre | Rôle |
|---|---|
activite_principale |
un ou plusieurs codes NAF exacts, séparés par des virgules |
section_activite_principale |
une section entière (lettre A à U) |
departement |
code du département : 33, 2A, 974 |
tranche_effectif_salarie |
tranches d'effectif Insee (voir ci-dessous) |
etat_administratif |
A (active) ou C (cessée) |
est_entrepreneur_individuel |
false pour ne garder que les sociétés |
minimal=true et include=siege |
réponse allégée, sans la liste des dirigeants |
per_page, page |
25 résultats par page au maximum |
Attention, un code de division seul comme 62 est refusé : il faut lister les sous-classes (62.01Z,62.02A,...).
Les principales tranches d'effectif (référence au 31 décembre 2024 depuis la mise à jour d'octobre 2026) :
| Code | Effectif |
|---|---|
NN |
unité non employeuse |
00 |
0 salarié |
01 / 02 / 03 |
1 à 2 / 3 à 5 / 6 à 9 salariés |
11 / 12 |
10 à 19 / 20 à 49 salariés |
21 / 22 |
50 à 99 / 100 à 199 salariés |
31 à 53 |
200 salariés et plus |
Deux pièges à connaître
- Le filtre
departementporte sur les établissements, pas sur le siège. Une entreprise dont le siège est à Nantes mais qui a un bureau à Bordeaux apparaît dans une recherche sur la Gironde. Dans notre test (NAF 62.01Z, Gironde, 10 à 199 salariés), 59 des 119 résultats avaient leur siège hors du département. Vérifiezsiege.departement. - Il n'existe pas de filtre sur la date de création. Le champ
date_creationest présent dans chaque résultat : filtrez-le de votre côté.
Le script complet en Python
Ce script, sans dépendance externe, récupère toutes les pages, garde les entreprises dont le siège est en Gironde, créées depuis 2015, et écrit un CSV que l'on peut ouvrir directement dans Excel. Il s'arrête à la première page incomplète plutôt que de se fier au nombre de pages annoncé, qui n'est qu'une estimation.
import csv
import json
import time
import urllib.error
import urllib.parse
import urllib.request
API = "https://recherche-entreprises.api.gouv.fr/search"
USER_AGENT = "mon-projet/1.0 (+https://exemple.fr)" # identifiez-vous
DEPARTEMENT = "33" # Gironde
CREEES_DEPUIS = "2015-01-01" # filtre appliqué côté client
PER_PAGE = 25 # maximum autorisé par l'API
PARAMS = {
"activite_principale": "62.01Z", # Programmation informatique
"departement": DEPARTEMENT,
"etat_administratif": "A", # entreprises actives
"tranche_effectif_salarie": "11,12,21,22", # 10 à 199 salariés
"est_entrepreneur_individuel": "false", # sociétés seulement
"minimal": "true",
"include": "siege", # pas de dirigeants dans la réponse
"per_page": PER_PAGE,
}
def get_page(page):
url = API + "?" + urllib.parse.urlencode({**PARAMS, "page": page})
req = urllib.request.Request(url, headers={"User-Agent": USER_AGENT})
for _ in range(5):
try:
with urllib.request.urlopen(req, timeout=30) as resp:
return json.load(resp)
except urllib.error.HTTPError as err:
if err.code != 429:
raise
time.sleep(int(err.headers.get("Retry-After") or 5))
raise RuntimeError("trop de réponses 429, réessayez plus tard")
rows, lus, page = [], 0, 1
while True:
resultats = get_page(page)["results"]
lus += len(resultats)
for ent in resultats:
siege = ent.get("siege") or {}
if siege.get("departement") != DEPARTEMENT:
continue # établissement dans le 33, siège ailleurs
if (ent.get("date_creation") or "") < CREEES_DEPUIS:
continue
rows.append({
"siren": ent["siren"],
"siret_siege": siege.get("siret"),
"nom": ent.get("nom_raison_sociale") or ent.get("nom_complet"),
"code_naf": ent.get("activite_principale"),
"tranche_effectif": ent.get("tranche_effectif_salarie"),
"date_creation": ent.get("date_creation"),
"code_postal": siege.get("code_postal"),
"commune": siege.get("libelle_commune"),
})
if len(resultats) < PER_PAGE:
break # page incomplète : c'était la dernière
if page * PER_PAGE >= 10_000:
print("Attention : plafond de 10 000 résultats atteint, découpez la requête.")
break
page += 1
time.sleep(0.2) # rester bien sous 7 requêtes par seconde
# utf-8-sig et point-virgule : le fichier s'ouvre directement dans Excel
with open("entreprises_62.01Z_33.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=list(rows[0].keys()) if rows else ["siren"],
delimiter=";")
writer.writeheader()
writer.writerows(rows)
print(f"{lus} résultats lus, {len(rows)} lignes écrites")
Sortie lors de notre test : 119 résultats lus, 36 lignes écrites. Changez le code NAF, le département ou les tranches pour l'adapter à votre cible.
Les limites de l'API
Deux limites encadrent l'usage de l'API :
- 7 requêtes par seconde par adresse IP (et 30 par seconde par ASN, ce qui peut gêner sur un cloud public), d'après la documentation officielle. Au-delà, l'API renvoie une erreur 429 avec un en-tête
Retry-After. - 10 000 résultats au maximum par recherche : c'est le message d'erreur de l'API elle-même qui l'indique (« Le nombre total de résultats est restreint à 10 000 »).
page * per_pagene doit pas dépasser 10 000, sinon l'API répond par une erreur 400, ettotal_resultsplafonne à 10 000. C'était le cas pour toutes les entreprises actives en 62.01Z en France.
Pour une liste plus grande, découpez la requête (par département, par tranche d'effectif, par catégorie juridique) puis dédoublonnez par SIREN. La documentation rappelle aussi que cette API sert à rechercher des entreprises, pas à extraire toute la base Sirene : pour un export complet, passez par les fichiers.
Exporter une liste complète
Gratuit et sans code : l'outil « Constituer une liste »
L'Annuaire des Entreprises propose un outil officiel gratuit, Constituer une liste, qui télécharge un CSV depuis le navigateur, sans compte. On y choisit notamment :
- les codes NAF et la zone (département, région, commune ou code postal) ;
- la tranche d'effectif, la catégorie d'entreprise et la catégorie juridique ;
- la date de création et l'état (actives, cessées ou les deux) ;
- tous les établissements ou les seuls sièges.
Le fichier contient une ligne par établissement (ou par siège), et un export est limité à 200 000 lignes, d'après le code source ouvert du site. Pour une liste ponctuelle sans code, c'est la première option à essayer. Choisissez vos catégories juridiques si vous voulez écarter les entrepreneurs individuels.
Gratuit : interroger le fichier Sirene avec DuckDB
Les fichiers stock Parquet de data.gouv.fr se lisent directement à distance avec DuckDB, sans tout télécharger. La requête ci-dessous reproduit le filtre du script : elle joint les unités légales à leur établissement siège, et la date de création devient un simple WHERE.
COPY (
SELECT ul.siren,
e.siret AS siret_siege,
ul.denominationUniteLegale AS nom,
ul.activitePrincipaleUniteLegale AS code_naf,
ul.trancheEffectifsUniteLegale AS tranche_effectif,
ul.dateCreationUniteLegale AS date_creation,
e.codePostalEtablissement AS code_postal,
e.libelleCommuneEtablissement AS commune
FROM read_parquet('https://www.data.gouv.fr/api/1/datasets/r/350182c9-148a-46e0-8389-76c2ec1374a3') AS ul
JOIN read_parquet('https://www.data.gouv.fr/api/1/datasets/r/a29c1297-1f92-4e2a-8f6b-8c902ce96c5f') AS e
ON e.siren = ul.siren AND e.etablissementSiege
WHERE ul.activitePrincipaleUniteLegale = '62.01Z'
AND ul.etatAdministratifUniteLegale = 'A'
AND ul.trancheEffectifsUniteLegale IN ('11', '12', '21', '22')
AND ul.categorieJuridiqueUniteLegale <> 1000
AND ul.statutDiffusionUniteLegale = 'O'
AND ul.dateCreationUniteLegale >= DATE '2015-01-01'
AND e.codeCommuneEtablissement LIKE '33%'
) TO 'sirene_62.01Z_33.csv' (HEADER);
Les deux URL sont les liens stables data.gouv.fr des fichiers Parquet « StockUniteLegale » et « StockEtablissement », que data.gouv.fr recommande pour l'automatisation. La catégorie juridique 1000 correspond aux entrepreneurs individuels, et statutDiffusionUniteLegale = 'O' écarte les unités en diffusion partielle. Dans notre test, la requête a pris quelques minutes et a renvoyé exactement les mêmes 36 SIREN que le script API. Le fichier ayant jusqu'à un mois de retard, une entreprise créée la semaine dernière n'y figure pas encore.
La base Sirene contient des données personnelles (les entrepreneurs individuels en particulier). data.gouv.fr rappelle que leur traitement relève du RGPD et qu'il faut respecter le statut de diffusion de chaque personne. Exclure les entrepreneurs individuels, comme ci-dessus, simplifie beaucoup les choses pour une prospection B2B.
Automatiser et suivre les créations : notre Actor sur Apify
Chez Quarrywise, nous publions un outil qui automatise la méthode API ci-dessus : SIRENE API: Export French Company Lists by NAF Code, sur l'Apify Store. C'est un outil indépendant, sans lien avec l'Insee ni avec la DINUM. Il lit la même API Recherche d'entreprises, donc pas de clé Insee, et il :
- accepte des codes NAF, une division entière comme
62, des départements, des tranches d'effectif, des catégories juridiques et une date de création (date fixe ou période glissante comme30 days) ; - ne garde par défaut que les entreprises dont le siège est dans vos départements ;
- découpe automatiquement les grosses requêtes pour dépasser le plafond de 10 000 résultats, puis dédoublonne par SIREN ;
- exclut les entrepreneurs individuels et ne renvoie jamais les dirigeants ; les sociétés portant le nom d'une personne sont filtrées au mieux, et l'adresse s'arrête à la commune sauf si vous demandez le détail ;
- livre le résultat en CSV, Excel ou JSON, ou par l'API d'Apify, et propose un mode « nouvelles entreprises » qui, lancé chaque semaine, ne renvoie que les sociétés apparues depuis le passage précédent.
La facturation se fait à l'usage, principalement par ligne d'entreprise enregistrée, avec le prix affiché sur la page Store avant tout lancement. Si une liste ponctuelle vous suffit, l'outil officiel et les deux méthodes gratuites de ce guide font l'affaire. L'Actor sert surtout au suivi planifié des nouvelles entreprises, au filtre des noms de personnes, à la sortie Excel, JSON ou API, et aux listes de plus de 200 000 entreprises.
En résumé
- Une liste ponctuelle sans code, jusqu'à 200 000 lignes : l'outil officiel « Constituer une liste ».
- Une recherche de moins de 10 000 résultats dans votre code : l'API Recherche d'entreprises, en filtrant le siège et la date de création côté client.
- Un export complet ou une analyse : le fichier Sirene Parquet de data.gouv.fr avec DuckDB.
- Toutes les variables Sirene, à jour : l'API Sirene de l'Insee, avec un compte.
- Un suivi planifié des nouvelles entreprises, ou une liste prête pour un CRM ou un agent : un outil comme notre Actor.
Dans tous les cas, identifiez-vous avec un User-Agent explicite, restez sous les limites de débit et citez la source (Insee, base Sirene) quand vous réutilisez les données.
Sources
- Insee, Nomenclature d'activités française (NAF) et Présentation générale de la NAF
- Insee, Activité principale exercée (APE)
- data.gouv.fr, Base Sirene des entreprises et de leurs établissements (SIREN, SIRET)
- data.gouv.fr, Données des entreprises utilisées dans l'Annuaire des Entreprises
- Documentation de l'API Recherche d'entreprises
- Portail des API de l'Insee
- Annuaire des Entreprises, Constituer une liste et code source du site