French Companies Enricher — SIREN/SIRET lookup
Pricing
from $2.00 / 1,000 results
French Companies Enricher — SIREN/SIRET lookup
Enrich French companies from the official open-data registry (recherche-entreprises.api.gouv.fr): SIREN/SIRET lookup, KYC status, NAF activity, address, leaders and financials. Pay per enriched company.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Mike-jeason LECA
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
French Companies Enricher (SIREN lookup for KYC & B2B prospecting)
Turn a list of French company names, SIRENs or SIRETs into a clean, structured dataset of legal registry records — identity, head-office address, activity, headcount bracket, officers and public compliance flags.
Data source: recherche-entreprises.api.gouv.fr, the official free open-data search API over the French national business register (SIRENE / INSEE, RNE, INPI and partner datasets). No API key, no proxy, no login.
Typical buyers:
| Buyer | What they do with it |
|---|---|
| B2B sales / lead-gen teams | Append SIREN, legal name, NAF code, headcount bracket and officers to a prospect list; filter out closed companies. |
| KYC / KYB & compliance teams | Verify that a counterparty exists, is active (etat_administratif), who its registered officers are, and whether it is an association, ESS or mission-driven company. |
| Due diligence / M&A analysts | Check legal form, creation and closing dates, sites, published revenue for large companies. |
| Data teams | Resolve messy company names to canonical SIREN identifiers before joining internal data. |
Input
{"queries": ["552100554", "542051180", "boulangerie paris"],"maxResultsPerQuery": 25,"includeDirigeants": true,"includeEtablissements": false}
| Field | Type | Default | Description |
|---|---|---|---|
queries | array of strings | — (required) | Company names, 9-digit SIRENs, or SIRETs. The registry needs at least 3 characters per term; a term shorter than that is skipped with a warning instead of failing the run. |
maxResultsPerQuery | integer 1–500 | 25 | Cap of companies kept per query, and therefore your cost cap: one company = one billed event. Name searches can match hundreds of companies (e.g. boulangerie paris → 988 matches), so this is what keeps a run cheap. |
includeDirigeants | boolean | true | Adds the dirigeants array (people and corporate officers with role, birth year/month, SIREN for legal entities). |
includeEtablissements | boolean | false | Adds the etablissements array of matching secondary sites (SIRET, address, activity, dates, coordinates). |
Each company is emitted once per run: if two queries match the same SIREN, the duplicate is dropped before billing.
Output
One dataset item per enriched company. Full example (real record, trimmed):
{"siren": "552100554","siren_conserve": null,"nom_complet": "PEUGEOT SA","nom_raison_sociale": "PEUGEOT SA","sigle": null,"etat_administratif": "C","date_creation": "1955-01-01","date_fermeture": "2021-01-16","nature_juridique_code": "5699","categorie_entreprise": null,"tranche_effectif_salarie_code": "NN","annee_tranche_effectif_salarie": null,"activite_principale_naf": "70.10Z","activite_principale_naf25": null,"section_activite_principale": "M","nombre_etablissements": 5,"nombre_etablissements_ouverts": 0,"tva": null,"siege": {"siret": "55210055400054","adresse": "RTE DE GIZY 78140 VELIZY-VILLACOUBLAY","complement_adresse": null,"code_postal": "78140","commune_code_insee": "78640","commune": "VELIZY-VILLACOUBLAY","departement": "78","region": "11","epci": "247800584","pays_etranger": null,"latitude": "48.774126458","longitude": "2.2219642076","activite_principale": "70.10Z","etat_administratif": "F","date_creation": "2020-04-27","date_fermeture": "2021-01-16","tranche_effectif_salarie_code": "NN","nom_commercial": null,"enseignes": null},"complements": {"est_entrepreneur_individuel": false,"est_association": false,"est_service_public": null,"est_administration": false,"egapro_renseignee": true,"est_ess": false,"est_societe_mission": false,"est_organisme_formation": false,"est_qualiopi": false,"convention_collective_renseignee": false,"liste_idcc": null,"est_avocat": false,"est_siae": false,"type_siae": null,"est_patrimoine_vivant": false,"identifiant_association": null},"finances": { "2019": { "ca": 74731000000, "resultat_net": 3584000000 } },"query": "552100554","source_url": "https://annuaire-entreprises.data.gouv.fr/entreprise/552100554","source_api": "https://recherche-entreprises.api.gouv.fr/search?q=552100554","retrieved_at": "2026-10-26T19:12:44+00:00","dirigeants": [{"type_dirigeant": "personne physique","nom": "ANTUNES TAVARES DIAS","prenoms": "CARLOS","annee_de_naissance": "1958","date_de_naissance": "1958-08","qualite": "Président du directoire","nationalite": null,"siren": null,"denomination": null}],"confidence": 0.95}
Field reference
| Field | Type | Description |
|---|---|---|
siren | string | 9-digit national company identifier. Stable join key. |
nom_complet | string | Legal name as published (falls back to nom_raison_sociale, then the SIREN itself if the registry record is empty). |
nom_raison_sociale, sigle | string | null | Registered name and acronym. |
etat_administratif | "A" | "C" | null | Company status: A = active, C = ceased. Filter on this before prospecting. |
date_creation, date_fermeture | ISO date | null | Creation and, when applicable, closing date. |
nature_juridique_code | string | null | INSEE legal-form code (e.g. 5699 = société européenne). |
categorie_entreprise | PME/ETI/GE | null | Size category, published only for part of the register. |
tranche_effectif_salarie_code | string | null | Headcount bracket code (INSEE scale, e.g. 02, 11, 51; NN = not available). |
annee_tranche_effectif_salarie | string | null | Year the headcount bracket refers to. |
activite_principale_naf | string | null | NAF activity code of the company. |
activite_principale_naf25, section_activite_principale | string | null | NAF 2025 code when published, and the NAF section letter. |
nombre_etablissements, nombre_etablissements_ouverts | integer | Total and currently open sites. |
tva | string | null | Intra-EU VAT number when published. |
siege | object | Head office: siret, adresse, complement_adresse, code_postal, commune (city name), commune_code_insee, departement, region, epci, pays_etranger, latitude, longitude, activite_principale, etat_administratif, date_creation, date_fermeture, tranche_effectif_salarie_code, nom_commercial, enseignes. |
complements | object | Public flags: est_entrepreneur_individuel, est_association, est_service_public, est_administration, egapro_renseignee, est_ess, est_societe_mission, est_organisme_formation, est_qualiopi, convention_collective_renseignee, liste_idcc, est_avocat, est_siae, type_siae, est_patrimoine_vivant, identifiant_association. |
finances | object | null | Published accounts by year: { "2019": { "ca": …, "resultat_net": … } }. Only for companies that file public accounts. |
dirigeants | array | Present when includeDirigeants is true. Each entry: type_dirigeant (personne physique / personne morale), nom, prenoms, annee_de_naissance, date_de_naissance (YYYY-MM), qualite, nationalite, siren, denomination. |
etablissements | array | Present when includeEtablissements is true. Each entry: siret, adresse, code_postal, commune, commune_code_insee, departement, region, epci, activite_principale, etat_administratif, est_siege, date_creation, date_fermeture, tranche_effectif_salarie, annee_tranche_effectif_salarie, latitude, longitude, nom_commercial, enseignes. |
query | string | The input query that produced this record. |
source_url | string | Human-verifiable page on the official annuaire-entreprises.data.gouv.fr. |
source_api | string | Exact API request used, for reproducibility. |
retrieved_at | ISO 8601 | Fetch timestamp (UTC). |
confidence | number 0–1 | Data-completeness score, not a probability that the company exists. It is the weighted share of key registry fields actually populated (name, SIRET, postal code, address, NAF, creation date, status, city, legal form, headcount bracket), ignoring the registry's NN "unknown" sentinel. A sparse record (unknown SIREN) scores low; a fully documented one scores 1.0. |
Pricing
Suggested pay-per-event pricing: one event company-enriched per dataset item.
| Volume | Price per event | Price per 1,000 results |
|---|---|---|
| Suggested | $0.002 | $2.00 |
| Low-volume / high-touch | $0.005 | $5.00 |
| High-volume data teams | $0.001 | $1.00 |
The underlying API is free and open data, so the price covers the enrichment, normalisation,
pagination, retries, deduplication and the stable schema (codes normalised, num→string,
nulls kept explicit, commune split into code + name). Comparable Apify actors in the
company-data niche charge $1–$5 per 1,000 records. Runs with zero results are never billed.
Known limits (verified against the live API)
- No human-readable labels for codes. The API returns
nature_juridique(5699),tranche_effectif_salarie(NN,02…),departement(78) andregion(11) as codes only — nolibelle_*for these, so this Actor does not invent one. Bring your own lookup table if you need "SARL", "50–99 employees" or "Île-de-France". City names are available (siege.commune), because the API'scommunefield is the INSEE code and itslibelle_communeis the name — this Actor exposes both. per_pageis capped at 25 by the API (per_page=100→ HTTP 400), so results above 25 require extra paged requests. Deep pagination is capped at 40 pages per query.- Queries must be at least 3 characters. Shorter terms return HTTP 400; the Actor logs a
warning, records
error: "invalid_query"in the run summary and continues. - Empty records exist. An unknown SIREN can return a shell record with a SIREN and dates
but no name or address. Those items keep
nom_complet= the SIREN, carry no fabricated values, and score a lowconfidence(< 0.5) so you can filter them out. - Officers are partial. Only published
dirigeantsappear, and natural persons may opt out of public diffusion —nomcan benull. Roles are in French, as published (Président du directoire,Gérant,Commissaire aux comptes…). etablissementsonly lists matching sites, not the full site list of the company. For the full list, use the company'ssirenwith the same API'sq=search.financesis sparse — only companies filing public accounts have it, and only for the years the registry exposes.- No rate-limit headers are published. This Actor self-limits to 10 requests/second and
retries twice (honouring
Retry-Afterwhen present). HTTP 429 was observed during testing under burst load and was recovered transparently. - Public-sector / foreign entities are only present insofar as the register carries them;
est_service_publicis frequentlynullrather thanfalse.
Run locally
python3 -m venv .venv && .venv/bin/pip install -r requirements.txtINPUT_JSON='{"queries":["552100554","danone"],"maxResultsPerQuery":5}' \.venv/bin/python -m src.main# results land in ./storage/datasets/default/.venv/bin/python -m pytest tests -q
INPUT_JSON is a local-development convenience only; on the Apify platform the Actor reads
its input from the standard INPUT key-value record.
Layout
.actor/actor.json Actor definition (input/output/dataset schema refs).actor/input_schema.json Input JSON Schema (English, buyer-facing).actor/output_schema.json Dataset + run-summary links.actor/dataset_schema.json Table views (overview, KYC)actor -> .actor Convenience symlink to the same filessrc/main.py The Actor (stdlib HTTP + apify SDK, no third-party client)Dockerfile apify/actor-python:3.12tests/test_fields.py Field-contract + exit-code tests against the live APIproof/ Real run output and measurements
Publishing (steps left for the account owner)
npm i -g apify-cli && apify login(a personal API token is required — not available on the machine this Actor was built on).apify pushfrom this directory.- In the Console → Monetization, enable pay-per-event with event
company-enrichedat $0.002, matching the runs' charged event name. - Publish to the Store with the suggested categories Lead generation, Business data, KYC / compliance.