nvNeuralVerge

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:

FieldWhat it tells you
status, rne_status, insee_statusWhether the company is active (En activité) and how the RNE and INSEE registers list it, with last-update dates.
company_type, incorporation_dateLegal form and registration date.
address, siret_siege, head_officeRegistered head-office address and its SIRET.
naf_code, naf_2025_codeNAF activity code and the code under the 2025 revision, with activity descriptions.
share_capital, share_capital_amountCapital as displayed, and as a number you can compare.
vat_number, employees, company_categoryVAT 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_urlLinks 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.

  1. —Compliance runs France company search with the trading name and max_items set to 5. They compare each hit's address and NAF code with what the distributor told them, and pick the one that matches.
  2. —They send that SIREN to INPI company and check that status is En activité and that the legal form matches the contract.
  3. —They compare the address with the contract's address and note any difference.
  4. —They read establishments_active to confirm the warehouse the distributor mentioned is a listed, active site.
  5. —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_found is 447, the register's count of matches. total_items is 2, because max_items was 2. You pay for the 2 you received.
  • —Both hits are active (En activité) and carry a registration_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_type and incorporation_date are null in search results. The source page says to use the company lookup for them.
  • —total_points is 2: two returned records at 1 point each.
  • —blocked is 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_amount is a number (170834294.25), while share_capital is the display string with its type, fixe. Use the number for comparisons.
  • —status is En activité, and closure_date is null. For a closed company those fields are where you would look first.
  • —establishments_total is 19 and establishments_active is 3. The sample lists only some establishments, so the count, not the list length, is the figure to quote.
  • —directors is an empty array and financials is null in this sample. The record has the fields, and they are not filled here.
  • —total_points is 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

SourcePointsPer 1,000
France company search1 per returned record$1
INPI company30 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.

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.