France uses multiple official registries. For a given entity, data comes from a single primary source — the system does not merge attributes across registries. It follows a deterministic priority chain and returns data from the first matching source.
RNE (Registre National des Entreprises) — Operated by the INPI since January 1, 2023, the RNE replaced and unified three former registries: the RNCS (Registre National du Commerce et des Societes), the Repertoire des Metiers, and the Registre des Actifs Agricoles. This is our primary source for the vast majority of French entities. When a company is found in the RNE, all structured attributes come from the RNE: company name, legal form, status, incorporation date, registered address, share capital, activity codes, legal representatives, shareholders, UBOs, and establishments.
SIRENE (INSEE) — The SIRENE repertoire, managed by the INSEE since 1973, covers ~25 million enterprises. Used in two ways: (1) as a supplement to RNE for employee count range (expressed in tranches, e.g. “50 to 99 employees” — note: figures can be 2-3 years old per INSEE methodology); (2) as a standalone fallback for entities that exist in INSEE but are not yet in the RNE, providing a limited dataset only (company name, legal form, activity code, status, employee count — no legal representatives, shareholders, or UBOs).
BODACC (Bulletin Officiel des Annonces Civiles et Commerciales) — Free API operated by the DILA. Used as an exceptional last resort only, when an entity appears in none of the above registries (not in RNE, not in SIRENE, not in RNA). This represents a negligible fraction of queries. When used, company data and legal representatives are extracted from legal announcement text.
Infogreffe — Used exclusively for KBIS document retrieval (certified trade register extract PDFs). It is not a structured data source for company attributes.
RNA Waldec — Non-profits (associations declarees) that have been created or have declared a modification since 2009. Our primary source for non-profits. Enriched with SIRENE data when a SIREN is available.
RNA Import — Historical non-profits created since 1901 that have not declared any change since 2009. Fallback when not found in RNA Waldec.
RNA Alsace-Moselle — Non-profits (associations de droit local) in departments 57 (Moselle), 67 (Bas-Rhin), and 68 (Haut-Rhin), which operate under local law and are excluded from the national RNA.
RNA data is batch-synced (monthly from data.gouv.fr) because no live API exists for the RNA registries. This is the only available access method provided by the French government for non-profit data.
When do non-profits appear in RNE vs RNA vs SIRENE?
RNA: All non-profits are automatically registered when declared at the prefecture (RNA number: W + 9 digits)
SIRENE: Non-profits must register if they seek public subsidies, employ staff, or are subject to VAT/corporate tax (SIREN: 9 digits)
RNE: Non-profits with SIRENE registration and business-like activities may also appear in INPI’s unified register, which provides comprehensive data including UBOs
Key Takeaway: All non-profits are in RNA, but only those with economic activities may also appear in RNE. Always use the RNA number (W-prefixed) as the API identifier.
For a given entity, data comes from a single primary source — the system does not merge attributes from multiple registries (all-or-nothing model). The only exception is employee count, which is always sourced separately from SIRENE.
Source Priority for Commercial Companies & Sole Entrepreneurs (SIREN lookup):
RNE (INPI) — Query to the INPI registry (with automatic fallback if the live API is temporarily unavailable)
SIRENE-only — For entities in INSEE but not in RNE (limited dataset: name, legal form, activity, status, employee count)
RNA tables — Waldec, Import, and Alsace-Moselle (first match wins)
BODACC — Last resort, for entities with legal announcements but no registry data (data extracted from announcement text)
Source Priority for Non-profits (RNA lookup):
Check if the RNA number has a SIREN in SIRENE. If yes, check if that SIREN exists in RNE. If yes, use RNE data
RNA Waldec — Non-profits created or modified since 2009
RNA Import — Historical non-profits (no changes declared since 2009)
RNA Alsace-Moselle — Local law non-profits (departments 57, 67, 68)
Important: The system enforces that non-profits with RNA numbers in RNE must be queried by their RNA number, not by SIREN. Queries using SIREN for RNA-registered non-profits will return null.
When data comes from the RNE (the vast majority of commercial companies and sole entrepreneurs), the following table shows the source for each attribute:
Attribute
Source
Notes
Company name, legal form, status
RNE
From formality data
Registered address
RNE
From adresseEntreprise
Share capital
RNE
Amount, currency, variable/fixed
Activity codes (APE/NAF)
RNE
Supplemented by SIRENE for some entities
Business purpose description
RNE
From objet field
Legal representatives
RNE
From formality pouvoirs data
Shareholders
RNE
From beneficiaires effectifs + pouvoirs
UBOs
RNE
From beneficiaires effectifs with ownership modalities
Establishments
RNE
Main + secondary
Employee count range
SIRENE (INSEE)
Always from SIRENE, even when RNE is primary — expressed in tranches, can be 2-3 years old
When the primary source is SIRENE-only or BODACC, the available attributes are significantly more limited (see Data Availability Matrix below).
Live UBO Fetching: When UBO data is not yet available for a company, the system automatically fetches it live from the INPI registry. This ensures UBO data is always current, even for newly registered companies.
Data Lineage (Upcoming): We are planning to add explicit source traceability to our data model, so that each attribute group in the API response will carry metadata indicating the source registry name and retrieval timestamp.
Alsace-Moselle Format Breakdown:A2002THI000075 = A (prefix) + 2002
(year) + THI (court code: THI=Thionville, MET=Metz, SAG=Sarreguemines) +
000075 (sequence)
Critical: RNA vs SIREN for Non-profitsNon-profits may have both an RNA number (W prefix) and a SIREN number. Always use the RNA number (W-prefixed) as the API ID for the most accurate and complete data retrieval. The system enforces this: querying by SIREN when an RNA number exists will return null.
Search queries are dispatched across five sources in priority order:
Index lookup by ID — Pre-built search index for identifier-based searches (SIREN, SIRET, VAT, RNA, Alsace-Moselle)
RNE by ID — Live INPI API lookup for identifier-based searches
Index search by Name — Pre-built search index for name-based fuzzy searches
RNE by Name — Live INPI API for name-based searches
BODACC by ID — Last resort, SIREN/SIRET only
Search Performance: Use identifier-based searches (SIREN, RNA, VAT) for
best performance and exact matching. Name searches may return multiple results
from different registers (RNE, RNA Waldec, RNA Import, Alsace-Moselle).
Search uses both pre-built indexes and live lookups. Name searches query a pre-built index for fast results. Identifier searches (SIREN, RNA, VAT) also perform live registry lookups to ensure the most up-to-date data.
SIRENE provides only a binary active/ceased status with no closure reasons or detailed dates. When RNE is the primary source (vast majority of cases), the richer RNE status logic is used.
France uses the INSEE catégorie juridique nomenclature (4-digit codes covering all entity types). Every code is mapped deterministically to a standardized legal form, English translation, and ISO 20275 (ELF) code via a static lookup table — no AI is involved at runtime. The mapping was generated from the full RNE nomenclature (450 codes) using AI enrichment + ISO 20275 embedding lookup, then frozen as a static file.
Legal form mapping is fully deterministic. The local French legal form name (from the INSEE nomenclature) is always preserved verbatim alongside the standardized classification and ISO 20275 code.
RNA legal form mapping is stable and deterministic — no AI parsers. It is based on the nature field (D, R, U, A, B, G, I, L) and the groupement field (S=Simple, U=Union, F=Federation).
The full INSEE nomenclature is available at INSEE. All 450 codes from the RNE nomenclature are statically mapped with English translations, standardized categories, and ISO 20275 (ELF) codes in legal-form-mapping.ts.
Legal representatives are extracted from the RNE composition.pouvoirs data. The classification of a role as legal representative vs. other key person is fully deterministic — a static mapping covers all 71 RNE role codes, each with a standardized role, English translation, and isLegalRepresentative flag based on French corporate law. No AI is involved.
Vice-President of Orientation and Supervision Board
Vice-President
121
Président du Conseil d’Orientation et de Surveillance
President of Orientation and Supervision Board
Chairman of the Board
122
Membre du Conseil d’Orientation et de Surveillance
Member of Orientation and Supervision Board
Board Member
210
Membre du conseil syndical
Member of the Syndicate Council
Board Member
211
Président du conseil syndical
President of the Syndicate Council
Chairman of the Board
Audit & Control Roles (5 roles) -- NOT legal representatives
Code
French Role
English
Standardized
71
Commissaire aux comptes titulaire
Statutory Auditor (Titular)
Auditor
72
Commissaire aux comptes suppléant
Statutory Auditor (Substitute)
Auditor
13
Contrôleur de gestion
Management Controller
Auditor
14
Contrôleur des comptes
Accounts Controller
Auditor
104
Personne chargée du contrôle
Person in Charge of Control
Auditor
Partner & Associate Roles (8 roles) -- NOT legal representatives
Code
French Role
English
Standardized
74
Associé indéfiniment et solidairement responsable
Unlimited Joint-Liability Partner
General Partner
75
Associé indéfiniment responsable
Unlimited Liability Partner
General Partner
131
Associé commandité
General Partner (Commandité)
General Partner
132
Associé commanditaire
Limited Partner (Commanditaire)
Limited Partner
23
Autre associé majoritaire
Other Majority Partner
Partner
95
Associé qui participe à la gestion
Partner Participating in Management
Partner
96
Associé non salarié
Non-Salaried Partner
Partner
130
Associé unique qui récupère le patrimoine
Sole Associate Recovering Assets
Owner
Non-Profit Functional Roles (3 roles) -- NOT legal representatives
Code
French Role
English
Standardized
207
Trésorier
Treasurer
Treasurer
208
Secrétaire
Secretary
Secretary
202
Représentant de l’assujetti unique
Representative of VAT Group
Other
Other & Administrative Roles (13 roles) -- NOT legal representatives
Code
French Role
English
Standardized
11
Membre
Member
Other
77
Représentant fiscal d’une entreprise étrangère
Tax Representative of Foreign Entity
Other
82
Indivisaire
Joint Owner (Indivisaire)
Other
94
Membre non salarié participant aux travaux
Non-Salaried Worker-Member
Other
97
Mandataire ad hoc
Ad Hoc Agent (Mandataire)
Other
99
Autre
Other
Other
103
Suppléant
Substitute
Other
105
Personne décisionnaire désignée
Designated Decision-Maker
Other
106
Comptable
Accountant
Other
107
Héritier indivisaire
Joint Heir (Indivisaire)
Other
108
Loueur
Lessor
Other
109
Mandataire fiscal
Tax Representative
Other
150
Avocat
Lawyer
Legal Advisor
The classification of each role as legal representative or other key person is deterministic and based on French corporate law. For example, a “Gérant” (code 30) is always a legal representative, while an “Administrateur” (code 65) is always an other key person. For individual entrepreneurs (typePersonne = 'P'), the entrepreneur is always mapped as the sole legal representative with role “Entrepreneur Individuel.”
All 71 codes from the RNE role nomenclature are statically mapped in role.util.ts with standardized roles, English translations, and legal representative classification. No code is missing and no AI is involved.
Shareholders come from two RNE data sources, combined and deduplicated:
Source
When Used
Data Extracted
Beneficiaires effectifs (UBO declarations)
Always (when available)
Only individuals with direct ownership (detentionPartDirecte AND detentionPartTotale > 0)
Pouvoirs (company officers)
Complementary
Individuals/companies with detentionPartTotale > 0 (or ALL pouvoirs for SCI)
Special case — SCI (Societe Civile Immobiliere, code 6540): All pouvoirs entries are treated as shareholders regardless of whether they have ownership percentage data. This reflects SCI’s structure where all partners are inherently shareholders. Both individual and corporate shareholders are supported.
Shareholder data is only available for companies in the RNE. Entities sourced from SIRENE-only, BODACC, or RNA do not include shareholders. Both individual and corporate shareholders are supported.
France uses the NAFREV2 (Nomenclature d’Activites Francaise, Revision 2) classification, which extends the European NACE Rev. 2 standard with a trailing letter suffix. The system maps activity codes across three levels:
AI Enrichment: When ISIC codes cannot be derived from NACE via formal mapping tables, the system uses AI to match activity descriptions to ISIC Rev. 4 codes. Every activity item includes an isAIInferred flag to distinguish official vs. AI-derived codes. NAFREV2 and NACE codes are never AI-inferred for France.
K-Bis Availability: The certified K-Bis extract (certifiedTradeRegisterExtract) requires three conditions: company is active, is in RNE, and is available on Infogreffe (verified via Infogreffe API). Inactive, dissolved, or liquidated companies can only access the uncertified INPI extract (tradeRegisterExtract).
JOAF Documents: The Journal Officiel des Associations et Fondations (JOAF) publishes official documents for non-profits. These documents are conditionally available — not all non-profits publish to JOAF. When available, they appear under officialPublications and financialStatements categories with a price of EUR 0.40 per document. JOAF documents include two sources: JOAFE (gazette publications) and DCA (annual accounts).
Note: Closed companies have active: false, status Radiation, and endDate on establishments. K-Bis (certified extract) is not available for closed companies.
Sole Entrepreneur -- EI (Source: RNE)
Sole entrepreneurs (personnes physiques) are often non-diffusible in SIRENE, returning minimal data. Below is a diffusible example.
Copy
{ "company": { "id": "111222333", "countryCode": "FR", "identifiers": { "VAT": "ZZ111222333" }, "legalName": "Sophie BERNARD", "registrationDate": "2020-09-01", "activityDescription": "Activites de conseil en gestion.", "status": { "localName": "Actif", "active": true }, "legalForm": { "localName": "Entrepreneur individuel", "standardized": "Sole Proprietorship", "iso20275Code": "SV8C" }, "activities": { "NAFREV2": [{ "code": "7022Z", "description": "Conseil pour les affaires et autres conseils de gestion", "isAIInferred": false }], "NACE": [{ "code": "7022", "description": "Conseil pour les affaires et autres conseils de gestion", "isAIInferred": false }], "ISIC": [{ "code": "7020", "description": "Management consultancy activities", "isAIInferred": true }] }, "legalAddress": { "addressLine1": "5 Impasse des Lilas", "city": "Nantes", "postalCode": "44000", "countryCode": "FR" } }, "establishments": [ { "id": "11122233300012", "name": "Sophie BERNARD", "creationDate": "2020-09-01", "active": true } ]}
Note: No legal representatives (the entrepreneur is the company), no shareholders, no UBOs. legalName is the individual’s name.
Note: No legal representatives, shareholders, UBOs, or establishments. Activity codes use RNA nomenclature + AI-inferred NACE/ISIC.
Non-profit -- Association de droit local (RNA Alsace-Moselle)
Copy
{ "company": { "id": "A2002THI000001", "countryCode": "FR", "identifiers": { "rnaAlsaceMoselle": "A2002THI000001" }, "legalName": "ENTRAIDE SOLIDAIRE DE THIONVILLE", "registrationDate": "2002-11-03", "activityDescription": "Soutien aux familles en difficulte et aide alimentaire.", "status": { "localName": "Inscrite", "active": true }, "legalForm": { "localName": "Association de droit local Alsace-Moselle", "iso20275Code": "HF2L" }, "activities": { "ALSACE_MOSELLE": [{ "code": "SOCIAL-SOLIDARITE", "description": "Divers social" }], "NACE": [{ "code": "88.99", "description": "Other social work activities without accommodation", "isAIInferred": true }], "ISIC": [{ "code": "889", "description": "Other social work activities without accommodation", "isAIInferred": true }] }, "legalAddress": { "addressLine1": "1 Rue de la Gare", "city": "Thionville", "postalCode": "57100", "countryCode": "FR" } }}
Note: Uses ALSACE_MOSELLE classification instead of RNA nomenclature. Status Inscrite (not Active). Court codes: THI (Thionville), MET (Metz), SAG (Sarreguemines).
UBO Response (dedicated datapoint)
Query with "dataPoints": ["ultimateBeneficialOwners"]:
Note: UBOs are only available for commercial companies in the RNE. Fetched live from INPI API if not already available. Includes ownership/voting percentages and modalities in French.
Available Documents (company example)
Documents are returned when "dataPoints": ["documents"] is requested.Commercial companies & sole entrepreneurs (SIREN):