Aller au contenu

FaireNiveau 3, Construire20 minutes

Collecte de données publiques

Les registres publics, les API ouvertes et les fichiers en open data qui donnent les entreprises, leurs dirigeants, leurs annonces et les marchés publics : quelle source pour quel besoin, ce que permettent la licence et la CNIL, comment collecter sans abuser, et comment tenir les données à jour.

Écrit le 9 octobre 2026 · Vérifié le 9 octobre 2026

Vous saurez

  • Trouver la source publique qui répond au besoin, et ses limites
  • Vérifier ce que la licence et la CNIL permettent avant de collecter
  • Interroger une API ouverte en respectant sa limite de requêtes
  • Tenir une liste à jour en comparant deux relevés
Sur cette page
  1. L'essentiel
  2. Prérequis
  3. Étapes
  4. Réalisations
  5. Contrôle du résultat
  6. Problèmes fréquents
  7. Retour en arrière
  8. Variantes par outil
  9. Vérification
  10. Lectures suivantes
L'essentiel
  1. Les données des entreprises françaises sont en grande partie ouvertes et gratuites : l'API Recherche d'entreprises répond sans clé, l'API Sirene avec une clé gratuite.
  2. La Licence Ouverte 2.0 permet tout usage, commercial compris, à condition de citer la source ; les données personnelles restent soumises au RGPD.
  3. La CNIL n'interdit pas le moissonnage, mais demande d'exclure les sites qui s'y opposent par leur robots.txt ou un CAPTCHA.
  4. Prospecter des professionnels par courriel se fait sur l'intérêt légitime si l'objet touche à leur métier ; la personne doit être informée et pouvoir s'opposer.
  5. En 2024, la CNIL a infligé 240 000 € à une société qui collectait des coordonnées sur LinkedIn.
1

Prérequis

  • Le besoin écrit : quelles entreprises, quels champs, à quelle fréquence, pour quel usage.
  • L'usage décidé : une étude interne, ou de la prospection, qui ajoute les règles de la CNIL.
  • Python 3, ou un outil d'automatisation qui sait appeler une API.
  • Une clé pour les API qui en demandent : l'API Sirene, par un compte gratuit sur le portail de l'Insee ; le registre de l'INPI, par un compte.
2

Étapes

Quelle source pour quel besoin

Quelle source pour quel besoin
Le besoinLa sourceAccèsMise à jour
identifier une entreprise, son siège, ses dirigeantsAPI Recherche d'entreprisessans clé ; 7 requêtes par secondenon publiée
la base complète des entreprisesSirene : l'API et les fichiers mensuelsclé gratuite ; 30 requêtes par minutequotidienne ; appel conseillé à 10 h
les actes et les dirigeants déclarésle registre national des entreprises, INPIcompte ; quotas non publiésquotidienne, avec un point d'accès aux changements
les ventes, procédures collectives, radiationsBODACCsans cléannoncée hebdomadaire ; flux quotidiens
les marchés publicsBOAMP, DECP, et TED pour l'Europesans clédeux fois par jour pour le BOAMP
vérifier un numéro de TVAVIES, de la Commission européennesans clé, une requête à la foisen temps réel ; extraction interdite
géocoder des adressesAPI Adresse de la Géoplateformesans clé ; 50 requêtes par secondehebdomadaire

Collecter

  1. Choisir la source la personne qui collecte

    Ce qu'on obtient : la source officielle qui répond au besoin, d'après le tableau ci-dessus.

    Le conseil : une API ouverte avant toute collecte sur un site.

  2. Lire la licence et les conditions la personne qui collecte

    Ce qu'on obtient : la Licence Ouverte 2.0 pour la plupart ; des exceptions : VIES interdit l'extraction, l'API Entreprise est réservée aux administrations.

    Le conseil : citer la source et la date de mise à jour, seule condition de la Licence Ouverte.

  3. Collecter en respectant la limite le programme

    Ce qu'on obtient : les champs utiles, à un rythme sous la limite de la source.

    Le conseil : la réponse 429 de l'API : attendre le délai indiqué avant de reprendre.

Une seule requête, sans clé, sur l'Insee lui-même : un organisme public. La limite de l'API est de 7 requêtes par seconde par adresse.

chercher.py
import json, time, urllib.request

API = "https://recherche-entreprises.api.gouv.fr/search?q={}&page=1&per_page=1"
CHAMPS = ["siren", "nom_complet", "etat_administratif", "activite_principale", "date_mise_a_jour"]

def chercher(siren):
    with urllib.request.urlopen(API.format(siren), timeout=30) as reponse:
        resultats = json.load(reponse)["results"]
    return {c: resultats[0].get(c) for c in CHAMPS} if resultats else None

for siren in ["120027016"]:          # l'Insee lui-même, un organisme public
    print(json.dumps(chercher(siren), ensure_ascii=False, indent=1))
    time.sleep(0.2)                  # 5 requêtes par seconde au plus : la limite est de 7
La sortiepython3 chercher.py
{ "siren": "120027016", "nom_complet": "INSTITUT NATIONAL DE LA STATISTIQUE ET DES ETUDES ECONOMIQUES (INSEE)", "etat_administratif": "A", "activite_principale": "84.11Z", "date_mise_a_jour": "2026-10-08T09:08:48"}

Essayé le 9 octobre 2026 avec Python 3.12.7, sans bibliothèque à installer.

Tenir à jour

  1. Garder le relevé daté le programme

    Ce qu'on obtient : chaque passage enregistré avec sa date, sans écraser le précédent.

    Le conseil : la date de mise à jour de la source, à côté de la vôtre.

  2. Comparer avec le relevé d'avant le programme

    Ce qu'on obtient : les entreprises nouvelles, fermées, et les champs changés.

    Le conseil : l'INPI publie un point d'accès qui ne donne que les changements.

  3. Respecter les personnes la personne responsable

    Ce qu'on obtient : les dirigeants sont des personnes : les informer si on les démarche, dans un délai d'un mois au plus, et noter leur opposition.

    Le conseil : l'article 14 du RGPD, et la prospection par courriel selon la CNIL.

Deux relevés fabriqués de quatre entreprises fictives, à un mois d'écart :

comparer.py
import json

avant, apres = json.load(open("avant.json")), json.load(open("apres.json"))
for siren in sorted(avant.keys() | apres.keys()):
    a, b = avant.get(siren), apres.get(siren)
    if a is None:
        print(siren, "nouvelle entreprise :", b["nom"])
    elif b is None:
        print(siren, "absente du nouveau relevé :", a["nom"])
    else:
        changes = [f"{champ} : {a[champ]} → {b[champ]}" for champ in a if a[champ] != b[champ]]
        if changes:
            print(siren, a["nom"], "·", " ; ".join(changes))
print("état : A = active, C = cessée")
La sortiepython3 comparer.py
002583169 Imprimerie du Port · dirigeant : J. Lemoine → S. Kerjean006513477 Transports Lemaire · etat : A → C007391642 Menuiserie Valcourt · commune : Nantes → Saint-Herblainétat : A = active, C = cessée

Essayé le 9 octobre 2026 avec Python 3.12.7, sans bibliothèque à installer.

Collecte sur un site

Avant de collecter sur un site, lire son fichier robots.txt : la CNIL demande d'exclure les sites qui s'y opposent. Le fichier ci-dessous est fabriqué ; le module est celui de Python.

robots.py
from urllib.robotparser import RobotFileParser

ROBOTS = """User-agent: *
Disallow: /annuaire/
Allow: /actualites/
"""
regles = RobotFileParser()
regles.parse(ROBOTS.splitlines())
for page in ["https://example.com/actualites/2026", "https://example.com/annuaire/dirigeants"]:
    print(page, "→", "autorisée" if regles.can_fetch("MonRobot", page) else "refusée : ne pas collecter")
La sortiepython3 robots.py
https://example.com/actualites/2026 → autoriséehttps://example.com/annuaire/dirigeants → refusée : ne pas collecter

Essayé le 9 octobre 2026 avec Python 3.12.7, sans bibliothèque à installer.

3

Réalisations

Réalisation · cabinet de cession, 2026

Les dirigeants des entreprises suivies, et ce qui a changé depuis 2008

Une collecte sur des données publiques qui dit, pour chaque entreprise, qui la dirige, ce qui a changé et ce qui a fermé depuis 2008, sur les métiers suivis par le cabinet ; le tri calibré avant le lancement, verdict par verdict.

Lancée le 25 août 2026, la collecte a traité :169 018entreprisesSource : inventaire des réalisations de Meridal, d'après le relevé du passage. Limite : la licence des données autorise un usage interne, sans rediffusion.

Lire la réalisation

Réalisation · le même cabinet, 2026

Trouver le bon interlocuteur, et savoir ce qu'il coûte

Deux façons de chercher un contact, mesurées l'une contre l'autre avant toute campagne ; le coût de chaque appel noté ligne par ligne ; un contrôle géographique ajouté après avoir mesuré de faux rapprochements.

Au premier tri, faux rapprochements écartés :352sur 621 cas tranchésSource : inventaire des réalisations de Meridal. Limite : les petites tailles d'entreprise ne reposent que sur 17 à 25 mesures chacune.

Lire la réalisation

4

Contrôle du résultat

5

Problèmes fréquents

L'API répond 429

CauseTrop de requêtes : l'API Recherche d'entreprises renvoie 429 avec un délai d'attente.

À faireAttendre le délai indiqué, puis ralentir le programme.

Une entreprise n'a pas de dirigeant ni d'adresse

CauseSon statut de diffusion est partiel : ses informations personnelles ne se rediffusent pas et ne servent pas à la prospection.

À faireNe pas chercher à compléter ailleurs ce que la personne a demandé de ne pas diffuser.

Les chiffres ne tombent pas juste d'un passage à l'autre

CauseLe périmètre a changé, ou la source a été mise à jour entre deux comptes.

À faireCompter à date, et écrire l'écart plutôt que le lisser.

Le site demande un compte ou un CAPTCHA

CauseIl s'oppose à la collecte.

À faireNe pas collecter ; chercher la donnée dans une source ouverte.

6

Retour en arrière

  • Arrêter la collecte : couper le programme ; les relevés datés restent.
  • Effacer les données d'une personne qui s'oppose : la retirer de la base et noter son opposition, pour ne pas la recollecter au passage suivant.
  • Revenir à un relevé précédent : c'est l'intérêt de garder chaque passage daté.
7

Variantes par source

  • Sans clé : l'API Recherche d'entreprises, BODACC, BOAMP, l'API Adresse, data.gouv.fr ; pour démarrer, sans compte ni démarche.
  • BODACC et BOAMP sont servis par une même plateforme : la même syntaxe de requête pour les deux.
8

Vérification

1ComprendreUne donnée est publique et sous Licence Ouverte. Pouvez-vous en faire ce que vous voulez ?

Presque : la licence permet tout usage, commercial compris, en citant la source ; mais les données personnelles qu'elle contient restent soumises au RGPD, et la prospection aux règles de la CNIL.

2AppliquerVous voulez suivre chaque mois les dirigeants de 2 000 entreprises. Comment vous y prenez-vous ?

Une source officielle, comme Sirene ou le registre de l'INPI ; un relevé daté chaque mois ; la comparaison avec le relevé d'avant pour ne garder que les changements.

3ComprendreUn site affiche les coordonnées de dirigeants, mais son robots.txt interdit la collecte. Que faire ?

Ne pas collecter : la CNIL demande d'exclure les sites qui s'y opposent par robots.txt ou CAPTCHA. Chercher la donnée dans une source ouverte.

9

Lectures suivantes

Les pages qui renvoient ici

Limites et sources

La réponse de l'API Recherche d'entreprises a été relevée une fois, le 9 octobre 2026, sur un organisme public ; les deux relevés de la comparaison et le robots.txt sont fabriqués.

Les quotas quotidiens de BODACC et du BOAMP viennent des en-têtes de réponse observés, pas de la documentation. Ce n'est pas un avis juridique.

  1. Le relevé : apprendre/recherches/2026-10-09-donnees-publiques.json, 57 sources, 16 sources de données.

Écrit par Meridal, avec l'aide de l'IA ; chaque fait vérifié à sa source et relu avant publication. Texte et schémas sous licence CC BY 4.0 : reprenez-les en citant Meridal. Le code sous licence MIT.

Service correspondant

Réunir des informations éparpillées

1 100 € à 3 400 €, données publiques à partir de 3 850 €

Voir le service

Un premier échange de 30 minutes

En visio et sans frais : vous décrivez votre situation, nous vous indiquons ce qui est réalisable, avec quels outils et pour quel ordre de prix. Vous pouvez aussi nous écrire ; chaque message reçoit une réponse écrite.