France company lookup
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.From its SKILL.md
npx -y skills add Nolpak14/getregdata --skill france-company-lookupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 2 commands, including `curl "https://recherche-entreprises.api.gouv.fr/search?q=DINUM"` and 1 more.
- fetches URLsInstructs the agent to fetch 2 URLs, including https://recherche-entreprises.api.gouv.fr/search?q={name} and 1 more.
SKILL.md
10.2 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it
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), fulladresse,code_postal,libelle_commune,departement,latitude/longitude, and the officeactivite_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), plusest_*flags (ess, rge, bio, association, etc.) and any publishedfinances/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):
# name -> candidates
curl "https://recherche-entreprises.api.gouv.fr/search?q=DINUM"
# SIREN -> the canonical record
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?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.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most quality gates skills give in ~2.4k tokens
Counted across 1,524 of the 2,830 authors here whose files we hold, read 2026-09-06
- Read full output and check exit codein 45 of 1524, across 40 files
- Verify output confirms the claimin 44 of 1524, across 39 files
- Identify the command that proves the claimin 43 of 1524, across 39 files
- Execute the full verification commandin 36 of 1524, across 30 files
- Produce a verification reportin 34 of 1524, across 18 files
- Review git diff changesin 30 of 1524, across 16 files
- Fix build failures immediatelyin 29 of 1524, across 9 files
- Group findings by severityin 28 of 1524
- State claim only with evidencein 27 of 1524, across 22 files
- Verify regression tests with red-green cyclein 26 of 1524, across 22 files
- Run the full test suitein 26 of 1524, across 25 files
- Run test suite with coveragein 25 of 1524, across 10 files
Said here and by no other author read
- Ask user for company name or SIREN if missing
- Perform full-text search if only company name is provided
- Confirm the correct match before relying on detail
- Verify etat_administratif is A for active status
- Flag entities with C status as ceased
- Record creation date and legal form
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.