L logiover
business · Jul 9, 2026 · 7 min read

How to Scrape France's Company Registry (SIREN) in 2026

Export French companies from the official SIREN/SIRET registry — name, NAF code, address, directors — filtered by activity or department. No API key needed.

France is unusually generous with company data. The government publishes the entire company registry — the Annuaire des Entreprises, built on the official SIRENE database — through a fully open, keyless JSON API. That means you can pull every active bakery in Paris, every software company in Lyon, or every mid-cap manufacturer in a region, with SIREN identifiers, addresses, and director names, without signing up for anything. The catch is that the raw recherche-entreprises.api.gouv.fr API returns deeply nested JSON, caps deep pagination, and expects you to handle paging and deduplication yourself. This guide walks through what the registry exposes, how to query it, and where the friction is.

What’s worth extracting

Each company record from the SIREN registry flattens into 25+ tabular fields. They cluster into identity, activity, geography, and leadership:

  • Identifierssiren (the 9-digit company identifier), siret (the head-office establishment identifier), and the direct url to the company on annuaire-entreprises.data.gouv.fr.
  • Namesname (nom complet), legalName (raison sociale), and acronym (sigle) where present.
  • ActivitynafCode (the NAF/APE activity code, e.g. 62.01Z for software) and nafSection (the A–U section letter).
  • Legal & sizelegalFormCode (nature juridique, e.g. 5710 for SAS), companyCategory (PME/ETI/GE), employeeRange (a bracket code), and employeeYear.
  • Status & scalestatus (A active, C ceased), establishments and openEstablishments counts, and createdDate.
  • Address & geoaddress, zip, city, departement, region, plus latitude/longitude.
  • Leadershipdirectors (the dirigeants: président, gérant, directeur général, corporate officers), each with their role, and a directorCount.

One thing the open registry does not publish: company email addresses and phone numbers. You get official identity, address, activity, size, and directors — a strong base to enrich with a contact-finder, but not a ready-made call list.

How the source works

The scraper is a filterable front end over the government’s open API. Instead of walking HTML, it sends direct HTTP JSON queries and flattens the nested response into columns. You express your segment through structured filters rather than free-text alone.

A targeted query — bakeries in Paris, active only — looks like this:

{
  "naf": "10.71C",
  "departement": "75",
  "etatAdministratif": "A",
  "maxResults": 1000
}

The filter fields map directly onto registry concepts:

  • naf — the NAF/APE activity code in nn.nnX format (62.01Z software, 10.71C bakery, 56.10A restaurants). Comma-separate several.
  • section — the broader activity section letter (A–U): C manufacturing, F construction, J information & communication.
  • departement / region / codePostal — geographic filters. Departments are codes like 75 (Paris), 13 (Bouches-du-Rhône), 2A (Corse-du-Sud); regions are INSEE 2-digit codes like 11 (Île-de-France), 84 (Auvergne-Rhône-Alpes).
  • natureJuridique — legal form code (5710 SAS, 5499 SARL, 1000 sole trader).
  • categorieEntreprise — company size: PME, ETI, or GE.
  • etatAdministratifA (active, best for leads) or C (ceased).

There’s also an extraParams object that passes any other supported recherche-entreprises query parameter through as raw key/value — an escape hatch for filters the form doesn’t expose. Because the API is open, a datacenter proxy is plenty; there’s no captcha and no login.

The access reality

The friction with the SIREN registry isn’t anti-bot defense — the data is deliberately open under the Licence Ouverte / Etalab. The constraints are structural:

  • The 10,000-record pagination cap. This is the big one. The recherche-entreprises API hard-caps deep pagination at 10,000 records per query. For any segment larger than that — say, all restaurants in France — you must split the run by department, postcode, or activity code and combine the datasets afterward. The scraper respects maxResults, but the underlying ceiling is the API’s, not the tool’s.
  • Nested JSON that needs flattening. The raw API returns companies with nested establishment and director arrays. If you build this yourself, you’ll write flattening logic to turn dirigeants into a directors string with roles, and to pull the head-office establishment out of the nested structure. The scraper does this for you.
  • Deduplication by SIREN. Paginated results can repeat companies across pages. The scraper de-dupes by siren; roll your own and you’ll need the same.
  • No contact data at the source. Worth repeating because it’s a common surprise: the registry has no email or phone fields. If your workflow assumes those, you’ll need a separate enrichment step.

Working around the 10K cap

The pagination ceiling is the constraint most people underestimate, so it’s worth a concrete plan. If your target segment is under 10,000 companies, a single query with a high maxResults captures all of it. If it’s larger — a common national vertical like “all restaurants in France” easily exceeds the cap — split the run along a dimension that partitions the segment cleanly:

  • By departement — France has 101 departments, so “all restaurants” becomes 101 queries (naf fixed, departement iterated), each well under the cap.
  • By codePostal — for dense urban areas where a single department still overflows, drop down to postcode granularity.
  • By naf — if you’re pulling a whole section (say all of manufacturing), split by individual NAF codes within it.

Then concatenate the per-query datasets and de-dupe on siren. Each partition is independent, so the runs can proceed in parallel. The point is that the 10K cap is a per-query limit, not a per-account one — the total data available is far larger, you just have to slice the query space to reach it.

Example output

A real, trimmed record — the Blachère bakery group — looks like this:

{
  "siren": "478455793",
  "name": "BOULANGERIES BG (B B G)",
  "legalName": "BOULANGERIES BG",
  "nafCode": "10.71C",
  "nafSection": "C",
  "legalFormCode": "5710",
  "companyCategory": "GE",
  "employeeRange": "22",
  "status": "A",
  "establishments": 596,
  "openEstablishments": 574,
  "createdDate": "2004-08-25",
  "siret": "47845579305205",
  "address": "615 AVENUE DE LA CHAFFINE 13160 CHATEAURENARD",
  "city": "CHATEAURENARD",
  "departement": "13",
  "region": "93",
  "directors": "BERNARD BLACHERE (Président de SAS); MARIE BLACHERE (Directeur Général)",
  "directorCount": 3,
  "url": "https://annuaire-entreprises.data.gouv.fr/entreprise/478455793",
  "scrapedAt": "2026-07-06T00:00:00.000Z"
}

Each row describes the company and its head office (siège); secondary establishments are summarized as counts, not listed individually.

Use cases

  • B2B lead generation — build a French prospect list by combining an activity code with a department, complete with company name, address, and directors to target.
  • Sales prospecting — filter active firms by NAF code and company size, then reach the right officer (président, gérant, directeur général) by name.
  • Market research — count and profile companies by NAF/APE code, region, size category, and creation date to map a vertical.
  • KYC and due diligence — verify a counterparty’s SIREN/SIRET, legal form, and active-vs-ceased status against the official source.
  • Competitor mapping — survey every company in a vertical or town and benchmark size and status.
  • CRM enrichment — look companies up by name or SIREN and append official registry identity, address, and leadership fields.

Cost and effort: build vs. managed

Because the API is open and free, the build-vs-buy math here is purely about engineering time, not proxy bills:

  • Building from scratch — a day to learn the API’s filter parameters and its nested response shape, write the flattening logic, handle pagination up to the 10K cap, and de-dupe by SIREN. Then ongoing upkeep as the API evolves and as you build the split-by-department logic for large segments.
  • Using the managed actor — set filters in a form, run, and download. Pricing is pay-per-result: a fraction of a cent per company, plus a trivial per-run start fee. A 1,000-company segment costs a few cents.

The API being free doesn’t mean the integration is free — the flattening, pagination, and dedup work is real. A managed actor collapses that into a form.

Common pitfalls

Things specific to the French registry that catch people out:

  • The 10,000-cap silently truncates big segments. If you query “all companies in Île-de-France,” you’ll get 10,000 and a false sense of completeness. Always split large segments by departement, codePostal, or naf and combine — the cap is per query.
  • NAF code format matters. Codes are nn.nnX (62.01Z, not 6201Z or 62.01). Get the format wrong and the filter returns nothing. If you’re unsure of a code, run a query name search first and read the nafCode column from the output.
  • status filters lead quality. Ceased companies (C) still appear in the registry. For lead lists, always set etatAdministratif to A — a ceased company is a dead lead.
  • No contact fields — plan for enrichment. The registry gives you identity and directors, not emails or phones. Budget a second enrichment step if your outreach needs contact details.
  • Employee data is a bracket, not a headcount. employeeRange is a bracket code with a reference year, not a precise employee count. Treat it as a size band, and pair it with companyCategory (PME/ETI/GE) for coarse segmentation.
  • GDPR covers director names. The dirigeants are named individuals. You’re using official open data, but you remain responsible for GDPR compliance when you store or contact them.

Wrapping up

France’s open SIREN registry is one of the best free company-data sources in Europe — the data is authoritative and the licence is permissive. The work isn’t access; it’s the nested JSON, the pagination cap, and the flattening. If you need a one-time slice and enjoy API plumbing, build it. If you want a repeatable, filtered export of French companies — by activity, geography, and size, with directors attached — a managed actor handles the plumbing so you can focus on the segment.

Open the France Company Registry Scraper on Apify — one run exports filtered French companies with SIREN/SIRET, NAF code, address, and directors from the official open registry; no API key or login. Export to CSV, JSON, or Excel, and start on Apify’s free monthly credit.

Related guides