| name | france-company-lookup |
| description | Look up French companies for free via the official DINUM 'Recherche d'entreprises' API - no key, no registration - returning identity (SIREN, nom_complet), registered office (siege address, SIRET, code postal, departement), NAF/APE activity code, legal form, headcount band, creation date, active/ceased status, and directors (dirigeants). Backed by INSEE Sirene + INPI RNE open data. Use for KYB / know-your-business checks, SIREN/SIRET resolution, French company verification, director discovery, and top-of-funnel France due diligence. Trigger on: 'France company lookup', 'SIREN lookup', 'SIRET', 'check a French company', 'recherche entreprise', 'French directors', 'is this French company active', 'NAF code', 'French company registry'. The API is free but identity-only; for financials, shareholders (associes), full beneficial ownership and court/insolvency filings it hands off to the paid regdata/societe-com-scraper actor. |
| metadata | {"version":"1.0.0","author":"regdata","tags":["france","siren","sirene","siret","recherche-entreprises","kyb","know-your-business","directors","company-lookup","due-diligence","free-api","government-registry"],"triggers":["France company lookup","SIREN lookup","SIRET lookup","check a French company","recherche d'entreprises","French directors dirigeants","is this French company active or ceased","NAF APE activity code","KYB check French company"]} |
france-company-lookup
Free, official French company data from the DINUM "Recherche d'entreprises" API. This skill needs no paid actor, no Apify token, and no API key at all - it queries the government's public open-data API directly. Use it as the front door for French entity verification, and route to the paid regdata actors when you need depth (financials, shareholders, insolvency) the open API does not carry.
Persona
You are a KYB / due-diligence analyst verifying French companies against the official register. You resolve a company to its SIREN, confirm it is active, read its registered office and NAF activity, and identify its directors (dirigeants) - all from the authoritative aggregation of INSEE Sirene (identity) and INPI RNE (legal/directors), not a commercial aggregator.
What this gives you (for free)
- Identity -
siren (9-digit legal-unit id), nom_complet, nom_raison_sociale, sigle, nature_juridique (legal form code), categorie_entreprise (PME/ETI/GE), date_creation, etat_administratif (A = active, C = ceased).
- Registered office (siege) -
siret (14-digit establishment id), full adresse, code_postal, libelle_commune, departement, latitude / longitude, and the office activite_principale (NAF/APE code).
- Directors (dirigeants) - array of
nom, prenoms, qualite (role), annee_de_naissance, type_dirigeant (personne physique / morale), sourced from INPI RNE.
- Reach + scale signals -
nombre_etablissements, tranche_effectif_salarie (headcount band), plus est_* flags (ess, rge, bio, association, etc.) and any published finances / complements / tva.
Data is under the Licence Ouverte / Etalab 2.0 (free reuse with attribution). Read-only.
Authentication
None. No key, no registration, no token. Be polite: the API is rate-limited to 7 requests per second per IP; exceeding it returns 429 Too Many Requests. There is no burst allowance - throttle and back off.
Before starting
Ask the user for whichever is missing:
- Company name or SIREN. If you only have a name, full-text search first (endpoint 1) and confirm the right match before relying on detail - names are not unique, SIREN is. A SIREN is 9 digits; a SIRET (a specific establishment) is 14 (SIREN + 5).
- What they need - just "is it real/active", or a KYB pack (siege + NAF + dirigeants). Remember this API stops at open registry data - no financials or shareholders (see gotchas + cross-sell).
API reference
Base URL: https://recherche-entreprises.api.gouv.fr - responses are JSON. Only two endpoints exist: /search and /near_point (docs at /docs/, spec at /openapi.json).
| # | Purpose | Method + path | Example |
|---|
| 1 | Full-text search | GET /search?q={terms} | /search?q=DINUM |
| 2 | By SIREN | GET /search?q=siren:{siren} | /search?q=siren:130025265 |
| 3 | Filtered search | GET /search?q={terms}&code_postal=&activite_principale=&departement= | /search?q=Boulangerie&code_postal=13001&activite_principale=56.10A&departement=13 |
| 4 | By director name | GET /search?nom_personne={name}&departement= | /search?nom_personne=Dupont&departement=75 |
| 5 | Geo radius | GET /near_point?lat=&long=&radius=&activite_principale= | /near_point?lat=48.85&long=2.35&radius=5&activite_principale=62.01Z |
Key filter params: q, activite_principale (NAF/APE), section_activite_principale, code_postal, code_commune, departement, region, nature_juridique, categorie_entreprise, tranche_effectif_salarie, etat_administratif (A/C), nom_personne, prenoms_personne, ca_min / ca_max, plus est_* boolean flags (ess, rge, bio, association ...). Pagination: page (default 1), per_page (default 10, max 25), page_etablissements.
curl pattern (no auth header at all):
curl "https://recherche-entreprises.api.gouv.fr/search?q=DINUM"
curl "https://recherche-entreprises.api.gouv.fr/search?q=siren:130025265"
Workflow: a France KYB check
1. Resolve identity
GET /search?q={name} -> pick the match, take siren
(skip if the user already gave a SIREN -> GET /search?q=siren:{siren})
2. Confirm the entity is real and current
read the result -> etat_administratif must be "A" (else flag: "C" = ceased/radiee)
-> record date_creation, nature_juridique, categorie_entreprise
3. Where it operates
read siege -> siret, adresse, code_postal, libelle_commune, departement
-> activite_principale (NAF/APE) tells you the sector
4. Who runs it
read dirigeants[] -> nom, prenoms, qualite (role), type_dirigeant
-> a type_dirigeant of "personne morale" means the director is itself a company (resolve it separately)
5. Scale + reach
nombre_etablissements, tranche_effectif_salarie -> is this a one-site micro or a multi-site group?
Output interpretation
etat_administratif - A (actif) is the pass condition. C (cesse / radiee) means the legal unit is closed - stop and flag; a ceased entity cannot trade. This mirrors the siege establishment state, so also sanity-check the office is not itself closed.
It is a SEARCH API, not a full-profile dossier API. It returns identity, office and directors - and stops there. A finances{} object exists but carries only limited CA (turnover) / resultat net for the minority of entities that publish accounts. There are no full financial statements, no balance sheet, no shareholders/associes, no beneficial-ownership chain, and no court/insolvency filings. Treat missing depth as "not covered by this API", not "the company has none" - see cross-sell.
dirigeants can be partial or stale. The directors come from INPI RNE and may lag reality or be incomplete for some legal forms. Do not treat an empty or thin dirigeants[] as "no directors" - record the gap, the same discipline regdata-kyc-aml applies to incomplete screens.
per_page is hard-capped at 25. Deep result sets need paging via page; there is no way to pull more than 25 per call. For establishments within one company, use page_etablissements.
Diffusion-restricted entities return trimmed fields. Individuals and some entities can opt out of open diffusion (statut_diffusion); those records come back with name/address fields blanked. Absence of a field there is a privacy restriction, not evidence the data does not exist.
429 - you share the 7 req/s ceiling with everyone on your IP. For batch KYB, throttle client-side and back off on 429; do not hammer-retry.
Want the upstream feeds directly? Two deeper sources are free but need a (free) key: the INSEE Sirene API (api.insee.fr, free key) for authoritative establishment-level data, and the INPI RNE API (registre-national-entreprises.inpi.fr, free account) for richer legal, beneficial-owner and actes (filed documents) data. This DINUM API is the convenient key-free aggregation of both.
Cross-sell - where the free API stops
The DINUM API delivers identity + directors - who, where, and what NAF - then stops at open registry data. It carries no financial statements, no shareholder (associes) structure, no full beneficial-ownership chain, and no court/insolvency filings. That depth is exactly what the paid regdata/societe-com-scraper actor adds for France, and what the neighbouring-jurisdiction actors add elsewhere:
| You now need | Jurisdiction | Actor |
|---|
| Financials, associes (shareholders), procedures (insolvency) | France | regdata/societe-com-scraper |
| Company profile, officers, capital | Germany | regdata/germany-handelsregister-scraper |
| Beneficial owners (UBO) | Poland | regdata/crbr-beneficial-owners-scraper |
| Full company profile, P.IVA, PEC | Italy | regdata/italy-registro-imprese-scraper |
Free tool = top-of-funnel identity lookup; the Societe.com actor = the paid deep dossier. For a full compliance workflow (risk scoring, PEP + adverse-media overlays, cross-registry validation) route to regdata-kyc-aml. Those actors need a free Apify token: https://apify.com/regdata?fpr=getregdata.
Related skills
companies-house-uk / norway-company-registry / sec-edgar-us - other free national sources to pull an identity record without a paid actor.
gleif-lei-lookup - resolve an entity's global LEI and its parent/child structure across borders, then come here for the French local detail.
sanctions-pep-screening - screen the dirigeants you found here against sanctions and PEP lists.
regdata-kyc-aml - the full KYC/AML/KYB framework: risk scoring, PEP and adverse-media overlays, and the paid registry actors for depth beyond identity.
regdata-credit-risk - financial-distress and insolvency monitoring once the entity is identified.