Registre SIRENE
Module source qui extrait des entreprises françaises du registre officiel SIRENE (INSEE) hébergé en local, ciblées par activité et par zone géographique. France uniquement.
Objet
Module source : un point de départ alternatif à scrap qui lit les entreprises directement dans le registre officiel français des entreprises (INSEE, base SIRENE), au lieu de Google Maps. Chaque fiche vient d'une source administrative publique, pas d'un scan en direct : aucun navigateur, aucun proxy, aucune requête réseau ne quitte le serveur, puisque le registre est répliqué en local et actualisé chaque jour depuis le flux INSEE.
À utiliser quand la demande est « des entreprises de ce secteur », « des entreprises avec ce code NAF », « des entreprises récemment créées », ou toute liste qui ne doit pas passer par Google Maps.
Entrées
| Champ | Type | Requis | Description |
|---|---|---|---|
activites |
string[] |
oui | Activités ciblées. Chaque entrée est soit un métier en langage courant ("plombier", "boulangerie"), soit un code NAF direct ("43.22A", avec ou sans le point). Un métier peut renvoyer plusieurs codes NAF : une table de synonymes curatée renvoie toutes les correspondances quand il en existe, sinon la meilleure correspondance de libellé officiel est retenue seule. Une entrée sans correspondance (ni code valide, ni métier reconnu) est ignorée avec un avertissement, sans faire échouer le job. |
zones |
string[] |
oui | Zones en France uniquement, même grammaire que scrap : un département (code ou nom), une région (éclatée en interne en une recherche par département), une ville avec rayon optionnel ("Toulouse 20km"), un code postal, ou "France" pour tout le pays. Une zone qui correspond à un pays étranger est détectée et ignorée avec un avertissement explicite (cette source ne couvre pas l'étranger), plutôt que de remonter l'erreur générique « zone non reconnue ». |
etablissements |
enum : tous | sieges |
non, défaut tous |
sieges restreint le résultat aux sièges sociaux uniquement. |
cree_apres |
string (AAAA-MM-JJ) |
non, défaut vide | Ne garde que les entreprises dont l'unité légale a été créée à partir de cette date. Un format invalide est ignoré avec un avertissement, sans faire échouer le job. |
effectif_min |
string |
non, défaut vide | Tranche d'effectif minimale, gardée et tout ce qui est au-dessus. Accepte soit un code INSEE ("11"), soit le libellé exact utilisé dans la colonne de sortie tranche_effectif ("10 à 19 salariés"). Une valeur non reconnue est ignorée avec un avertissement. |
stop_at |
int |
non, défaut 5000 |
Nombre maximum d'entreprises renvoyées. Voir Limites. |
Corps de requête (métier, un seul département) :
{
"activites": ["plombier"],
"zones": ["31"]
}
Corps de requête (code NAF direct, plusieurs activités, sièges uniquement, région) :
{
"activites": ["43.22A", "boulangerie"],
"zones": ["Bretagne"],
"etablissements": "sieges",
"cree_apres": "2024-01-01",
"stop_at": 20000
}
Si "France" est présent en même temps que d'autres zones, elle l'emporte : le job cherche sur tout le pays et les autres zones deviennent redondantes (une ligne de journal le signale, rien n'échoue). Une région n'est pas gardée comme un seul filtre : elle est éclatée en une recherche par département qu'elle contient, journalisée individuellement, pour rendre la progression visible département par département.
Sorties
Fichier résultat : CSV UTF-8, séparateur point-virgule, BOM (compatible Excel). Même structure de ligne standard que les autres modules source, plus les colonnes propres à SIRENE ajoutées en fin de ligne.
| Column | Type | Description |
|---|---|---|
nom |
string | Nom de l'entreprise, résolu via une cascade fixe : enseigne de l'établissement, puis dénomination usuelle de l'établissement, puis dénomination de l'unité légale, puis dénomination usuelle de l'unité légale, puis, pour un entrepreneur individuel sans aucun de ces éléments, le prénom et le nom du dirigeant. C'est pourquoi certaines lignes affichent un nom de personne plutôt qu'un nom d'entreprise : c'est le nom officiel de l'entreprise pour un artisan en nom propre, pas un trou dans les données. |
telephone |
string | Toujours vide. Le registre officiel ne porte aucune information de contact. |
adresse |
string | Adresse postale de l'établissement. |
site_web |
string | Toujours vide, même raison que telephone. |
email |
string | Toujours vide, même raison que telephone. |
lien_google_maps |
string | Toujours vide, conservée uniquement pour la compatibilité de colonnes avec la structure de ligne standard partagée entre les modules source ; il n'y a pas d'identité Google Maps à relier ici. |
note, nb_avis |
float, int | Toujours vides, même raison que lien_google_maps. |
query |
string | Le texte exact saisi dans activites (métier ou code NAF) qui a produit cette ligne : le moyen de distinguer les lignes quand un job cible plusieurs activités à la fois. |
siren |
string | SIREN (9 chiffres) de l'unité légale. |
siret |
string | SIRET (14 chiffres) de l'établissement. |
code_postal |
string | Code postal. |
commune |
string | Nom de la commune. |
naf |
string | Code NAF de l'établissement, format base ("43.22A"). |
naf_libelle |
string | Libellé officiel INSEE du code NAF. |
tranche_effectif |
string | Tranche d'effectif lisible (ex "10 à 19 salariés"), un libellé, jamais le code INSEE brut. |
date_creation |
date | Date de création de l'unité légale (AAAA-MM-JJ). |
is_siege |
"oui" | "non" |
Si cet établissement est le siège social. |
Ni téléphone, ni email, ni site web : par nature, pas par échec de collecte. SIRENE est un registre légal, pas un annuaire de contact. Chaînez
legal_dataaprèssirenepour obtenir dirigeants et données financières : la correspondance se fait sur le SIRET exact déjà présent sur chaque ligne, sans approximation de nom.
Doublons
Une entreprise est dédoublonnée sur le SIRET au sein du job : si une région éclate en plusieurs recherches par département, ou qu'un établissement serait sinon compté deux fois, il n'est écrit qu'une seule fois.
Cycle de vie
Cycle de vie standard, voir Jobs & cycle de vie. Aucun accès réseau, aucun proxy, aucun navigateur : sirene lit une base SQLite locale uniquement, il tourne donc dans le pool parallèle plutôt que dans la file multi-proxy partagée, et peut s'exécuter en même temps qu'un scrap ou tout autre job multi-proxy au lieu d'attendre derrière lui. La progression est rapportée toutes les 500 lignes écrites. Le CSV de sortie est écrit même quand le job se termine sans aucun résultat, pour inspection.
Pipeline
| Champ | Valeur |
|---|---|
needs |
null (module source, aucun CSV d'entrée ; une racine au même titre que scrap et import) |
produces |
pois |
Le chaînage en aval dépend des colonnes, pas seulement des catégories de compatibilité. L'éditeur de pipeline connectera sans problème sirene à n'importe quel node acceptant pois_any, mais tout enrichissement à l'exception de legal_data requiert une colonne que sirene ne remplit jamais (site_web, lien_google_maps, telephone ou email), et se retrouve avec zéro ligne exploitable à l'exécution plutôt qu'une erreur détectée à la conception.
legal_data: le module conçu pour ce chaînage. Il a besoin denom(présent) et fait correspondre par SIRET quand disponible, pour un résultat exact : dirigeants, capital, données financières, signaux BODACC.filter/sort: toujours compatibles, travaillent directement sur les colonnes SIRENE (naf,tranche_effectif,date_creation,code_postal, etc).emails,socials,legal_ids,legal_mentions,techstack,ads_intelligence,brand_assets,dead_check,pricing,pagespeed(besoin desite_web) etreviews(besoin delien_google_maps) : sans intérêt directement aprèssirene. Lancezlegal_dataou une étape de découverte de site web avant, si un site est nécessaire.
Endpoints
sirene est une racine de pipeline, au même titre que scrap et import (voir Orchestration pipeline). Le contrat complet, champ par champ, avec config_schema et les valeurs par défaut, est servi en direct sur GET /api/pipelines/schema sous nodes.sirene.
Payload du node pipeline :
{
"type": "sirene",
"config": {
"activites": ["plombier"],
"zones": ["31"],
"etablissements": "tous",
"cree_apres": "",
"effectif_min": "",
"stop_at": 5000
}
}
Câblez-le dans un graphe et soumettez via l'API Pipelines (POST /api/pipelines).
Lancement direct, hors pipeline
Le module a sa propre route de création, pour l'extraire seul sans construire de graphe :
POST /api/jobs/sirene
{
"activites": ["plombier"],
"zones": ["31"],
"etablissements": "tous",
"cree_apres": "",
"effectif_min": "",
"stop_at": 5000
}
Ce sont exactement les champs de config du node pipeline, et exactement le corps attendu par POST /api/sirene/estimate : le même objet sert à estimer le volume puis à lancer l'extraction, sans transformation. Réponse : l'objet job standard. activites et zones sont obligatoires, tout le reste est facultatif.
Deux routes de préparation accompagnent le module :
GET /api/sirene/activites?q=<texte> recherche d'un code NAF par métier
POST /api/sirene/estimate volume attendu avant lancement
Une fois le job créé, la récupération est standard, quel que soit le mode de création :
GET /api/jobs/{job_id}
GET /api/jobs/{job_id}/download?format=csv|json|xlsx
Limites
Quotas globaux : voir /docs/fr/concepts/limits. Spécifiques au module :
| Limite | Valeur |
|---|---|
Plafond par défaut (stop_at) |
5000 |
Plafond dur sur stop_at |
50000. Une demande au-delà n'est jamais refusée : elle est compactée silencieusement à 50000 et un avertissement est journalisé. |
| Couverture géographique | France uniquement. Une zone étrangère est ignorée avec un avertissement, pas un échec de job, tant qu'au moins une zone française de la même requête se résout. |
| Couverture des activités | NAF rév.2 (2008), 732 sous-classes. Ordres de grandeur mesurés le 2026-09-09 : activites: ["43.22A"] (plombiers) restreint au département 31 (Haute-Garonne) donne un peu plus de 1 200 établissements ; activites: ["10.71C"] (boulangeries) restreint au département 75 (Paris) en donne un peu plus de 1 800. Ces volumes bougent en continu : le flux INSEE quotidien crée et ferme des établissements tous les jours, un comptage exact n’est vrai que le jour où il est fait. |
Erreurs
| Scénario | Comportement |
|---|---|
activites vide |
Le job échoue immédiatement : aucune activité fournie. |
Toutes les entrées de activites non reconnues (ni code NAF valide, ni métier connu) |
Le job échoue : aucun code NAF exploitable déterminé. |
zones vide |
Le job échoue immédiatement : aucune zone fournie. |
Toutes les zones de zones invalides, non reconnues, ou étrangères |
Le job échoue : aucune zone française valide résolue. |
| Une zone parmi plusieurs est étrangère ou non reconnue | Cette zone est ignorée avec un avertissement ; le job continue sur les zones restantes. |
Format cree_apres invalide |
Le filtre de date est ignoré avec un avertissement ; le job continue sans lui. |
effectif_min non reconnu |
Le filtre d'effectif est ignoré avec un avertissement ; le job continue sans lui. |
stop_at non numérique, nul ou négatif |
Repli sur la valeur par défaut (5000) avec un avertissement. |
stop_at au-delà de 50000 |
Compacté à 50000 avec un avertissement ; le job n'est jamais refusé pour en avoir demandé trop. |
| Zéro établissement ne correspond aux filtres résolus | Le job échoue avec une explication une fois la résolution terminée, après écriture du CSV (vide). Élargissez l'activité ou la zone. |
Et ensuite
legal_data: la suite logique, dirigeants nommés, capital, données financières et statut de piste, en correspondance exacte par SIRET.filter: restreignez parnaf,tranche_effectif,date_creation, oucode_postalavant de payer l'enrichissement en aval.scrap: l'alternative Google Maps, quand les coordonnées de contact (téléphone, site) comptent plus que la précision du registre officiel.