How to Look Up a French Company by SIREN: Registry Data via API and MCP
How to look up a French company by SIREN and get status, legal form, capital, NAF code and establishments as JSON over REST or MCP, with real point costs.
By the NeuralVerge team · 13 min read · Updated October 2026
▸On this page
To look up a French company by SIREN, send the 9-digit registration number to a registry source and read back one JSON record: status, legal form, registered address, NAF activity code, share capital, head office and establishments. You can reach it over REST from a pipeline or over MCP from an agent. This guide walks through the workflow, one real request and response, what it costs and where the record stops. The INPI company source page is the reference for exact fields and prices.
The short version
- —The answer: one request with a SIREN returns the company's record from the French register (RNE and INPI, with INSEE status fields). If you only have a name, a second source finds the SIREN first.
- —Who it is for: teams doing counterparty checks, KYC and KYB enrichment or CRM cleanup on French companies, and agents that need to confirm a company is real and active before they act.
- —What it costs: 30 points for a resolved company lookup ($30 per 1,000), and 1 point per returned record for a name search ($1 per 1,000). Both source pages state that misses are not billed.
- —What it does not do: it does not fill every section for every company. Directors, financials and collective proceedings are empty in the sample.
How to look up a French company by SIREN
French companies are identified by a SIREN, a 9-digit number. The sample company, Danone, has SIREN 552032534. A company can have several places of business, and each one has a SIRET: the SIREN followed by a 5-digit establishment number (55203253400703 is 552032534 plus 00703). So the SIREN names the company, and the SIRET names one of its sites.
Two sources cover the workflow, and you will often use both.
- —INPI company takes a SIREN (or the link to the company page) and returns the full record. 30 points per resolved lookup.
- —France company search takes a name and returns matching companies with their SIREN. 1 point per returned record.
1. Find the SIREN from a name
If the SIREN is already in your contract, invoice or CRM, skip to step 2. If you have only a trading name, run France company search with the name and a max_items cap. Each result carries registration_number (the SIREN), name, status, address, activity, naf_code, the officers as one text string, and a url. The response also reports total_found, the register's count of matches, while total_items counts what you received.
Read more than the name. A search for a group name returns the parent and its subsidiaries side by side, and the address and activity are what tell them apart. Generic keywords return unrelated companies, because matching is on name.
2. Read the company record
Send the SIREN to INPI company. The response is one machine.company object. The fields that matter most for a first check:
| Field | What it tells you |
|---|---|
status, rne_status, insee_status | Whether the company is active (En activité) and how the RNE and INSEE registers list it, with last-update dates. |
company_type, incorporation_date | Legal form and registration date. |
address, siret_siege, head_office | Registered head-office address and its SIRET. |
naf_code, naf_2025_code | NAF activity code and the code under the 2025 revision, with activity descriptions. |
share_capital, share_capital_amount | Capital as displayed, and as a number you can compare. |
vat_number, employees, company_category | VAT number, employee band and size category, each with the year it refers to. |
establishments_total, establishments_active, establishments[] | How many sites the company has, how many are active, and a list with SIRET, address, activity and status. |
rne_extract_url, insee_situation_notice_url | Links to the registration extract and the INSEE situation notice as PDFs. |
3. Check the facts against what you were told
Compare the record with the counterparty's claims: the legal name, the form (an SA is not an SAS), the head-office address, and whether the status is active. The legal_existence_end_date field shows the date the legal existence is set to end, which is far in the future for a healthy company. A mismatch is the reason to run the lookup at all.
4. Map the establishments
If the question is where the company operates, read establishments_total and establishments_active, then the list. Each entry has a SIRET, address, activity code, is_head_office and an active flag. In the sample, the company has 19 establishments, 3 of them active. The source page notes that the list is capped, so compare its length with establishments_total before you treat it as complete.
5. Keep the evidence
The record carries a url to the company page on the register and PDF links to the registration extract and the INSEE situation notice. Store them with your decision, so a reviewer can open the same documents without repeating the lookup.
A worked example: checking a French distributor
An illustrative case: Acme Oy (Finland) is signing a distribution agreement with a French company that its sales team knows only by trading name. The sales rep has no registration number, and the contract draft needs one. This is a made-up scenario, and no figures are implied.
- —Compliance runs France company search with the trading name and
max_itemsset to 5. They compare each hit's address and NAF code with what the distributor told them, and pick the one that matches. - —They send that SIREN to INPI company and check that
statusisEn activitéand that the legal form matches the contract. - —They compare the
addresswith the contract's address and note any difference. - —They read
establishments_activeto confirm the warehouse the distributor mentioned is a listed, active site. - —They save the registration extract link and the INSEE notice link to the vendor file.
The outcome is not a risk score. It is a documented answer to whether the company exists, is active and is the one in the contract.
One real request and response
Start with the name search, taken from the source page and capped at two records.
curl -X POST https://api.neuralverge.ai/functions/v1/run-fr-companies-search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword":"danone","max_items":2}'
The response below is the sample on the source page. The session id is a placeholder, as on the source page, and the officers' names are replaced with a marker here. In the sample, the first hit's officers field is a single text string of named individuals ending in a count of others.
{
"session_id": "11111111-1111-1111-1111-111111111111",
"kind": "fr_companies_search",
"keyword": "danone",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# France — Annuaire des Entreprises (RNE/Sirene) — company search\n\n- **Keyword:** danone\n- **Results:** 2 of 447 found\n- **Proxy traffic:** 170.3 KB",
"machine": {
"total_items": 2,
"first_item": {
"registration_number": "552032534",
"name": "DANONE",
"status": "En activité",
"address": "59-61 RUE LA FAYETTE 75009 PARIS",
"url": "https://annuaire-entreprises.data.gouv.fr/entreprise/danone-552032534",
"company_type": null,
"incorporation_date": null,
"activity": "Activités des sièges sociaux",
"naf_code": "70.10Z",
"officers": "[names omitted], et 8 autres",
"badges": []
},
"items": [
{
"registration_number": "552032534",
"name": "DANONE",
"status": "En activité",
"address": "59-61 RUE LA FAYETTE 75009 PARIS",
"url": "https://annuaire-entreprises.data.gouv.fr/entreprise/danone-552032534",
"company_type": null,
"incorporation_date": null,
"activity": "Activités des sièges sociaux",
"naf_code": "70.10Z",
"officers": "[names omitted], et 8 autres",
"badges": []
},
{
"registration_number": "672039971",
"name": "DANONE PRODUITS FRAIS FRANCE (D.P.F.F.)",
"status": "En activité",
"address": "17 RUE DES DEUX GARES 92500 RUEIL MALMAISON",
"url": "https://annuaire-entreprises.data.gouv.fr/entreprise/danone-produits-frais-france-d-p-f-f-672039971",
"company_type": null,
"incorporation_date": null,
"activity": "Fabrication de lait liquide et de produits frais",
"naf_code": "10.51A",
"officers": "[names omitted]",
"badges": []
}
],
"total_found": 447,
"page_count": 1,
"blocked": false,
"proxy_traffic_bytes": 174403
},
"total_points": 2
}
Reading the search response
- —
total_foundis 447, the register's count of matches.total_itemsis 2, becausemax_itemswas 2. You pay for the 2 you received. - —Both hits are active (
En activité) and carry aregistration_number, which is the SIREN you send next. - —The second hit is a subsidiary with a different NAF code and address, which is how you tell group entities apart.
- —
company_typeandincorporation_dateare null in search results. The source page says to use the company lookup for them. - —
total_pointsis 2: two returned records at 1 point each. - —
blockedis false on a normal run. If it is true, the register refused the request, so do not read an empty list as "no such company".
Now the profile for the first hit's SIREN.
curl -X POST https://api.neuralverge.ai/functions/v1/run-fr-companies \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"company":"552032534"}'
Here is the source page's sample response, shortened by removing fields already shown in the table above and all but one establishment, with ... marking the cuts. The full sample is on the source page.
{
"session_id": "11111111-1111-1111-1111-111111111111",
"kind": "fr_companies",
"company": "552032534",
"company_id": "552032534",
"machine": {
"company": {
"registration_number": "552032534",
"name": "DANONE",
"status": "En activité",
"address": "59-61 RUE LA FAYETTE 75009 PARIS",
"url": "https://annuaire-entreprises.data.gouv.fr/entreprise/552032534",
"company_type": "SA à conseil d'administration (s.a.i.)",
"incorporation_date": "1955-01-01",
"activity": "Activités des sièges sociaux",
"naf_code": "70.10Z",
"naf_2025_code": "70.10Y",
"siret_siege": "55203253400703",
"vat_number": "FR27 552 032 534",
"closure_date": null,
"share_capital": "170 834 294,25 € (fixe)",
"share_capital_amount": 170834294.25,
"employees": "1 000 à 1 999 salariés, en 2024",
"company_category": "Grande Entreprise (GE), en 2024",
"legal_existence_end_date": "2112-04-25",
"insee_status": "Inscrite",
"rne_status": "Immatriculée",
"rne_updated_date": "2026-09-29",
"establishments_total": 19,
"establishments_active": 3,
"establishments": [
{
"siret": "55203253400703",
"activity": "Activités des sièges sociaux",
"naf_code": "70.10Z",
"address": "59-61 RUE LA FAYETTE 75009 PARIS",
"is_head_office": true,
"status": "en activité",
"active": true,
"closure_date": null
}
...
],
"directors": [],
"financials": null,
"rne_extract_url": "https://annuaire-entreprises.data.gouv.fr/justificatif-immatriculation-pdf/552032534",
"insee_situation_notice_url": "https://api-avis-situation-sirene.insee.fr/identification/pdf/55203253400703"
},
"blocked": false,
"pages_opened": 1,
"proxy_traffic_bytes": 124348
},
"total_points": 30
}
Reading the company response
- —
share_capital_amountis a number (170834294.25), whileshare_capitalis the display string with its type,fixe. Use the number for comparisons. - —
statusisEn activité, andclosure_dateis null. For a closed company those fields are where you would look first. - —
establishments_totalis 19 andestablishments_activeis 3. The sample lists only some establishments, so the count, not the list length, is the figure to quote. - —
directorsis an empty array andfinancialsis null in this sample. The record has the fields, and they are not filled here. - —
total_pointsis 30, charged because the SIREN resolved.
REST and MCP
The platform is the product: a catalog of sources that return typed records in one envelope (a session id, a readable summary, the structured result and the points charged). REST and MCP are two ways to reach it, and the request body is identical in both. REST fits a pipeline step, a nightly refresh or an import job. MCP lets an agent call the same source in the middle of a task, for instance resolving a name to a SIREN and then reading the record without a person copying the number across.
The profile lookup above as a tool call on the hosted MCP server at https://mcp.neuralverge.ai/mcp uses the same arguments. MCP tool names use underscores, REST paths use hyphens.
{ "tool": "run_fr_companies", "arguments": {"company":"552032534"} }
The name search is run_fr_companies_search with {"keyword":"danone","max_items":2}. The setup for Claude and other clients is in the MCP server guide.
An agent has to be told what to do when a search returns several plausible hits. A good instruction is to ask for a second identifier (an address or an activity) when more than one active company matches, rather than picking the first row.
Cost and limits
| Source | Points | Per 1,000 |
|---|---|---|
| France company search | 1 per returned record | $1 |
| INPI company | 30 per resolved lookup | $30 |
Points come out of your monthly plan allowance, and the pricing page lists the plans. Both source pages state that you are charged only when the request resolves: a SIREN that does not resolve costs nothing, and a search with no results is not billed.
The cost shape is easy to work out from the stated rates. Finding a SIREN with a search capped at 3 records and then reading the profile is at most 3 + 30 = 33 points. If you already hold the SIREN, skip the search and the lookup is 30 points. Checking 1,000 companies you already have SIRENs for would be 1,000 lookups at 30 points each, which is 30,000 points. That is arithmetic on the stated rate, not a benchmark, and it assumes every SIREN resolves.
Because the profile lookup is the expensive step, keep searches narrow. Set max_items low, and only send a SIREN to INPI company once you are sure which match you want.
Pitfalls to plan around
- —Some sections are empty. Directors, financials, collective proceedings and labels are empty in the sample. Do not build a check that needs them without testing on your own companies.
- —The establishments list is capped. Compare it with
establishments_total. - —Two NAF codes appear. The sample carries the older code and the 2025 code, and the head-office block shows a different 2025 code from the company-level one. Decide which one you store and read it from the same block every time.
- —Values are in French. Status, activity and legal form come as the register publishes them. Map them once.
- —Officers in search are one string. Do not try to split names out of it; use it as a hint, not as data.
- —Search is name matching. A short or generic name returns unrelated companies, and the register's total can be in the hundreds.
- —A miss is not proof of absence. If a lookup does not resolve, check the SIREN for typos before you conclude the company is not registered.
How to decide
Looking up one company on the public register by hand is fine. The case for a request is repetition and automation: a hundred counterparties in a spreadsheet, a nightly check that known customers are still active, or an agent that has to confirm a company before it drafts a message. One response shape for the lookup is easier to maintain than a parser per page. Work through these questions:
- —Do you already hold the SIREN? If yes, call INPI company directly. If you hold only names, budget for a search first and a rule for ambiguous matches.
- —Which fields do you actually need? Status, legal form, address, NAF code and capital are filled in the sample. Directors and financials are not, so test your population.
- —Is it counterparty onboarding or KYB? Confirm the legal entity, its status and its address, and keep the extract links as evidence. For the wider process, see what KYB is and the KYC and KYB data guide.
- —Is it CRM enrichment? Fill the VAT number, legal form and NAF code from the SIREN you already hold, and map the French status values once.
- —Is it territory or site analysis? Use the establishments list and the active count, and respect that the list is capped.
- —Do you also work outside France? The same envelope covers other national registers. The guide to company registries by country shows how they compare.
- —Do you need an agent to run it? Use MCP, give the agent a rule for ambiguous matches, and cap
max_items.
Frequently asked questions
How do I look up a French company by SIREN?
Send the 9-digit SIREN to the INPI company source, over REST or as the run_fr_companies MCP tool. The response is one JSON record with the company's status, legal form, registered address, NAF activity code, share capital, head office and establishments. A lookup that resolves costs 30 points.
What is the difference between a SIREN and a SIRET?
A SIREN has 9 digits and identifies the company. A SIRET has 14 digits and identifies one establishment, made of the SIREN followed by a 5-digit establishment number. In the response, siret_siege is the head office's SIRET and each entry in establishments has its own siret.
What if I only have a company name, not a SIREN?
Run France company search with the name. Each matching record carries its registration_number, which is the SIREN, plus status, address, NAF code and a link. Pick the right match, then send its SIREN to INPI company for the full record. Search costs 1 point per returned record.
Is the lookup free when the company is not found?
The source pages state that you are charged only when the company resolves, and that searches with no results are not billed. Cost control for searches comes from max_items, which caps the number of records returned.
Does the record include directors and financial statements?
The record has fields for directors, financials and collective proceedings, but they are empty in the source page's sample, so do not assume they are filled for every company. The search result lists officers as a single text string. Test a few of your real companies before relying on either.
Is MCP available for French company data?
Yes. Both sources are available over REST and as tools on the hosted MCP server at https://mcp.neuralverge.ai/mcp, with an identical request body. The tool names are run_fr_companies for the profile and run_fr_companies_search for the name search.
Are the field values in French?
Text values such as status, activity and legal form are returned in French, as the register publishes them, for example En activité. Field names are in English. Map the French status strings to your own values once and reuse the mapping.
Related articles
Company registry by country: 93 registry sources in 35 countries plus global LEI, grouped by region, with what each returns, MCP tool names and point costs.
A corporate registries API for official company data: look up companies in government registers over REST or MCP, with real point costs and a sample response.
Companies House data for AI agents: resolve a name to a company number, read officers and charges, and pull filings as JSON over REST or MCP, with real costs.
About NeuralVerge
Give your agents structured, cited, real-world data from 300+ sources and the open web — through one API or MCP server.
Data Sources on the NeuralVerge blog.