TrustyData Docs
Site Tarifs Contact

Entreprises

Qualifier un prospect B2B, fiabiliser une base clients, compléter une fiche fournisseur : ces deux endpoints interrogent les données officielles SIRENE (INSEE) — raison sociale, SIRET/SIREN, code NAF, effectifs, état administratif — pour l'ensemble des entreprises et établissements inscrits au répertoire, France entière.

Deux mots reviennent partout dans ce guide : l'entreprise (« unité légale » au sens INSEE), identifiée par un SIREN à 9 chiffres (979885324), et l'établissement — un site physique de cette entreprise — identifié par un SIRET à 14 chiffres (97988532400017 = SIREN + 5 chiffres). Une entreprise a toujours au moins un établissement : son siège.

Endpoint Quand l'utiliser Plan minimum
GET /company/search Trouver une entreprise ou un établissement — par nom, SIREN, SIRET, filtres, ou proximité géographique Discovery (proximité lat/lon/rayon_m : Growth)
GET /company/view/{etablissement_id} Fiche complète par SIRET — ou par SIREN, qui renvoie l'établissement siège Discovery (richesse de la fiche selon le plan)

GET /company/search — trouver une entreprise ou un établissement

Passez un nom, un sigle ou une enseigne dans q (2 à 200 caractères) ; un SIREN ou un SIRET, même formaté avec des espaces (« 979 885 324 »), est reconnu et recherché à l'exact. Des filtres optionnels affinent la requête : ville et adresse (flous), code_postal, code_naf et etat_administratif (A actif / F fermé, exacts).

curl -H "Authorization: Bearer VOTRE_CLE_API" \
  "https://api.trustydata.app/services/v1/company/search?q=trustydata"
{
  "results": [
    {
      "siren": "979885324",
      "siret": "97988532400017",
      "nic": "00017",
      "est_siege": true,
      "diffusible": true,
      "nom_complet": "TRUSTYDATA",
      "enseigne": "KRIKRAM",
      "complement": null,
      "adresse": "32 B RUE DE LABBEVILLE",
      "code_postal": "95690",
      "commune": "NESLES-LA-VALLEE",
      "code_commune": "95446",
      "cedex_code": null,
      "cedex_libelle": null,
      "date_creation": "2023-10-01",
      "activite_principale": { "code": "62.02A", "libelle": "Conseil en systèmes et logiciels informatiques" },
      "categorie_juridique": { "code": "5499", "libelle": "Société à responsabilité limitée (sans autre indication)" },
      "tranche_effectifs": { "code": "NN", "libelle": "Unité non employeuse" },
      "etat_administratif": { "code": "A", "libelle": "Actif" },
      "siege": null,
      "distance_m": null
    }
  ],
  "total_results": 1,
  "total_capped": false,
  "resultats_approches": false,
  "classement_pertinence": true,
  "page": 1,
  "per_page": 10
}

Un résultat est toujours un établissement (un SIRET), même quand la recherche raisonne au grain entreprise. Les champs codés (activité NAF, catégorie juridique, tranche d'effectifs, état) sont rendus décodés en paires {code, libelle}. Deux champs guident la lecture : classement_pertinence: true signifie que les résultats sont ordonnés du plus au moins pertinent ; quand il vaut false (listing par siren=, proximité), le premier résultat n'est pas « le plus probable ». siege pointe vers l'établissement siège quand le résultat est un établissement secondaire, et vaut null quand le résultat est le siège (est_siege: true). La pagination se pilote avec page et per_page (10 par défaut, 100 max). Une liste vide fait autorité : aucune entreprise ne correspond. Les résultats de search sont identiques quel que soit le plan.

Le paramètre grouper — choisir le grain

grouper=true renvoie un résultat par entreprise (par SIREN), représentée par son meilleur établissement — le siège de préférence. C'est le mode qui répond à « quelles entreprises s'appellent X ? ». grouper=false renvoie un résultat par établissement (par SIRET) — « quels sites, quels points de vente ? ». Omis, il vaut true dès que q est fourni, et bascule automatiquement à false quand la requête raisonne par nature au grain établissement : recherche par proximité (lat/lon/rayon_m), listing des établissements d'un SIREN (siren=979885324), ou listing sans critère.

Recherche par proximité Growth

Ajoutez lat, lon (WGS84) et rayon_m (en mètres, 50 000 max) pour lister les établissements autour d'un point — les boulangeries à moins d'un kilomètre du centre de Paris, par exemple. Ce mode est réservé aux plans Growth et Business ; le reste de search est ouvert à tous les plans.

curl -G "https://api.trustydata.app/services/v1/company/search" \
  -H "Authorization: Bearer VOTRE_CLE_API" \
  --data-urlencode "q=boulangerie" \
  --data-urlencode "lat=48.8566" \
  --data-urlencode "lon=2.3522" \
  --data-urlencode "rayon_m=1000"
{
  "results": [
    {
      "siren": "801911918",
      "siret": "80191191800028",
      "nic": "00028",
      "est_siege": false,
      "diffusible": true,
      "nom_complet": "BOULANGERIE PARIS & CO GAITE",
      "enseigne": "BOULANGERIE PARIS & CO",
      "adresse": "4 B RUE DES ECOLES",
      "code_postal": "75005",
      "commune": "PARIS",
      "code_commune": "75105",
      "date_creation": "2016-04-28",
      "activite_principale": { "code": "10.71C", "libelle": "Boulangerie et boulangerie-pâtisserie" },
      "categorie_juridique": { "…": "…" },
      "tranche_effectifs": { "…": "…" },
      "etat_administratif": { "code": "F", "libelle": "Fermé" },
      "siege": { "siret": "80191191800036", "nom_complet": "BOULANGERIE PARIS & CO GAITE" },
      "distance_m": 972.22285741
    },
    { "…": "…" }
  ],
  "total_results": 46,
  "total_capped": false,
  "resultats_approches": false,
  "classement_pertinence": false,
  "page": 1,
  "per_page": 10
}

Réponse tronquée (les 9 résultats suivants de la page ont la même structure que le premier, et les blocs décodés secondaires sont repliés). distance_m — rempli uniquement en mode proximité — donne la distance au point demandé, en mètres. grouper a basculé de lui-même au grain établissement, et classement_pertinence: false rappelle que le premier résultat n'est pas le meilleur match textuel. Notez l'état F (fermé) du premier établissement : la base SIRENE conserve l'historique — ajoutez etat_administratif=A pour ne garder que les établissements actifs.

GET /company/view/{etablissement_id} — la fiche complète

Un seul endpoint de fiche, deux usages : passez un SIRET (14 chiffres) pour la fiche de cet établissement, ou un SIREN (9 chiffres) pour obtenir la fiche de l'établissement siège de l'entreprise. Nous avons vérifié les deux appels pendant la rédaction : view/979885324 renvoie exactement la même fiche que view/97988532400017, le SIRET du siège.

curl -H "Authorization: Bearer VOTRE_CLE_API" \
  "https://api.trustydata.app/services/v1/company/view/97988532400017"
{
  "siret": "97988532400017",
  "siren": "979885324",
  "nic": "00017",
  "est_siege": true,
  "nom_complet": "TRUSTYDATA",
  "adresse": "32 B RUE DE LABBEVILLE 95690 NESLES-LA-VALLEE",
  "numero_voie": "32",
  "indice_repetition": "B",
  "type_voie": "RUE",
  "libelle_voie": "DE LABBEVILLE",
  "code_postal": "95690",
  "commune": "95446",
  "libelle_commune": "NESLES-LA-VALLEE",
  "departement": { "code": "95", "libelle": "Val-d'Oise" },
  "region": { "code": "11", "libelle": "Île-de-France" },
  "nom_commercial": "KRIKRAM",
  "activite_principale": { "code": "62.02A", "libelle": "Conseil en systèmes et logiciels informatiques" },
  "date_creation": "2023-10-01",
  "tranche_effectif_salarie": { "code": "NN", "libelle": "Unité non employeuse" },
  "caractere_employeur": false,
  "etat_administratif": { "code": "A", "libelle": "Actif", "date_effet": null },
  "diffusible": true,
  "unite_legale": {
    "siren": "979885324",
    "nom_complet": "TRUSTYDATA",
    "nature_juridique": { "code": "5499", "libelle": "Société à responsabilité limitée (sans autre indication)" },
    "activite_principale": { "code": "62.02A", "libelle": "Conseil en systèmes et logiciels informatiques" },
    "etat_administratif": { "code": "A", "libelle": "Active", "date_effet": null },
    "date_creation": "2023-10-01",
    "categorie_entreprise": "PME",
    "diffusible": true,
    "tva": "FR77979885324",
    "nombre_etablissements": 1,
    "nombre_etablissements_ouverts": 1,
    "dirigeants": [
      {
        "type_dirigeant": "physique",
        "nom": "TRISTRAM",
        "prenoms": "Hervé Daniel",
        "qualite": { "code": "30", "libelle": "Gérant" },
        "date_naissance": "1975-06",
        "opposition_prospection": true,
        "…": "…"
      }
    ],
    "identite_rne": {
      "capital": { "montant": 500.0, "devise": "EUR", "variable": false },
      "…": "…"
    },
    "finances": [
      {
        "annee": 2025,
        "date_cloture": "2025-08-31",
        "chiffre_affaires": 119794,
        "resultat_net": 1350,
        "…": "…"
      }
    ],
    "procedures_collectives": { "procedure_en_cours": false, "jugements": [] },
    "…": "…"
  },
  "latitude": 49.130632999986936,
  "longitude": 2.1632529999999996,
  "epci": { "code": "249500430", "libelle": "Communauté de communes Sausseron Impressionnistes" },
  "conventions_collectives": []
}

Réponse obtenue en plan Business, tronquée pour la lisibilité (la fiche réelle contient d'autres champs de détail — objet social complet, section d'activité, enseignes — matérialisés ici par "…"). La structure se lit en deux niveaux : la racine décrit l'établissement (adresse détaillée champ par champ, activité, effectifs, état, coordonnées) et le bloc unite_legale décrit l'entreprise qui le porte (identité, n° de TVA, dirigeants, données financières, procédures collectives). Pour une donnée d'entreprise, lisez unite_legale ; pour une donnée de site, lisez la racine. Attention : commune contient le code commune INSEE (95446), pas le code postal — le nom est dans libelle_commune. Le bloc identite_rne et les dirigeants proviennent du Registre national des entreprises.

Richesse de la fiche selon le plan

Plan Racine (établissement) Bloc unite_legale (entreprise)
Discovery identité + adresse complète identité
Starter + latitude/longitude + tva, compteurs d'établissements
Growth + epci, conventions_collectives + dirigeants, identite_rne
Business (identique à Growth) + finances, procedures_collectives

Un champ hors plan est absent — pas à null

Les champs au-delà de votre plan sont absents de la réponse, ils n'apparaissent pas à null. En Discovery, la fiche ci-dessus n'a ni clé latitude ni clé dirigeants — la donnée existe pourtant. Ne déduisez jamais d'un champ manquant que l'information n'existe pas : elle est simplement réservée à un plan supérieur (détail dans Plans & quotas).

Confidentialité : deux drapeaux à ne pas confondre

La fiche porte deux informations de confidentialité qui se ressemblent et n'ont rien à voir : diffusible vient de l'INSEE et porte sur l'entreprise, opposition_prospection vient de l'INPI et porte sur une personne. Une entreprise parfaitement diffusible peut avoir un dirigeant opposé au démarchage, et inversement. Les confondre conduit soit à écarter des entreprises exploitables, soit à démarcher des personnes qui s'y sont opposées.

diffusible opposition_prospection
Source INSEE — répertoire SIRENE INPI — Registre national des entreprises
Porte sur L'entreprise (unité légale) Une personne (le dirigeant déclarant)
Où le lire Racine de la fiche, bloc unite_legale, et chaque résultat de GET /company/search Chaque entrée de unite_legale.dirigeants[], dans GET /company/view/{id} uniquement
Valeurs true / false true = opposée, false = pas d'opposition enregistrée, null = non renseigné à la source
Effet dans la réponse false ⇒ nom et adresse masqués (servis à null), commune conservée Aucun — le dirigeant est servi normalement, le drapeau signale sans masquer
Ce que ça vous demande Ne pas conclure que l'entreprise est introuvable ; ne jamais recompléter le nom masqué depuis une autre source Exclure la personne de vos actions de prospection commerciale ; les autres usages restent ouverts
Base légale Art. A.123-96 du code de commerce Art. R.123-320 du code de commerce
Plan Discovery Growth (avec les dirigeants)

Unités non-diffusibles : un masquage légal, pas un bug

L'entreprise existe, son identité est masquée

Environ 10 % des unités légales sont non-diffusibles : leur responsable a exercé son droit à la non-diffusion auprès de l'INSEE. Pour ces entreprises, le nom et l'adresse sont masqués dans toutes les réponses et le drapeau diffusible vaut false — la commune reste visible, le SIREN reste valide, et les dirigeants RNE ne sont pas servis du tout. C'est une obligation légale, pas une donnée manquante : ne recomplétez jamais ces champs depuis un ancien export SIRENE.

Opposition à la prospection commerciale

Un dirigeant peut s'opposer à l'utilisation de ses données à des fins de prospection commerciale. L'INPI enregistre cette opposition sur la formalité ; l'API la restitue sur chaque dirigeant, dans opposition_prospection :

"dirigeants": [
  {
    "type_dirigeant": "physique",
    "nom": "TRISTRAM",
    "prenoms": "Hervé Daniel",
    "qualite": { "code": "30", "libelle": "Gérant" },
    "date_naissance": "1975-06",
    "opposition_prospection": true
  }
]

Réponse obtenue en plan Growth — le bloc dirigeants est absent des plans inférieurs.

  • true — la personne s'est opposée. Retirez-la de vos campagnes de démarchage.
  • false — aucune opposition enregistrée à la source.
  • null — l'information n'est pas renseignée. null ne vaut pas false : traitez ce cas selon votre propre politique, ne le lisez pas comme un feu vert.

Le drapeau signale, il ne masque pas — et il vaut pour toute l'entreprise

Le dirigeant reste servi même quand opposition_prospection vaut true : l'opposition porte sur la prospection, pas sur les autres usages (vérification de signataire, KYC, conformité), et l'API ne peut pas connaître la finalité de votre appel. C'est donc à vous, responsable de votre traitement, d'appliquer l'exclusion.

Second point : l'INPI porte ce drapeau sur la formalité, donc au grain SIREN. La valeur est aujourd'hui identique pour tous les dirigeants d'une même entreprise — ne construisez aucune logique qui suppose une granularité par personne.

Le nom d'un dirigeant n'est pas un critère de recherche

GET /company/search ne cherche jamais sur les dirigeants et ses résultats n'en contiennent aucun : la licence de réutilisation du RNE (art. A.123-69 du code de commerce) restreint les critères de recherche. Les dirigeants s'obtiennent uniquement en lisant la fiche d'une entreprise déjà identifiée, via GET /company/view/{id}.

Corollaire pratique : la réponse à « ce dirigeant est-il opposé au démarchage ? » demande deux appels — la recherche pour obtenir le SIREN ou le SIRET, puis la fiche pour lire unite_legale.dirigeants[].opposition_prospection.

Sources

Les données proviennent de la base SIRENE de l'INSEE, du Registre national des entreprises tenu par l'INPI (dirigeants, capital, objet social) et du BODACC (procédures collectives), diffusés en open data. Les dirigeants sont des données personnelles : seuls le nom, le nom d'usage, les prénoms, le mois et l'année de naissance sont publics — c'est pourquoi date_naissance est tronquée à YYYY-MM.

Prochains pas