DEV Community

link
link

Posted on

SIREN Lookup API Tutorial: Search French Companies by SIREN, SIRET, NAF Code or Department (No API Key)

French company data is open but awkward to use: the portals are mostly in French, INSEE's Sirene API needs an account, and the bulk files hold the whole register. This tutorial shows how to use France Company Search (SIRENE), an Apify Actor, as a SIREN lookup API: paste SIREN or SIRET numbers, or search by name, NAF code, department or postcode, and export JSON or CSV with legal form, status, head office and VAT number. No API key is needed.

This Actor is independent: it is not affiliated with or endorsed by INSEE, DINUM or the French government, and is not a government service.

SIREN, SIRET and NAF codes explained (30-second primer)

  • SIREN: a 9-digit number that identifies a French legal unit (the company).
  • SIRET: a 14-digit number that identifies one establishment of that company: the SIREN plus a 5-digit suffix. Pass it when you need a SIRET API lookup for one site.
  • NAF code: the activity code, for example 62.01Z.

The Actor accepts SIRENs and SIRETs in the same list and strips spaces, dots and dashes.

Where French company data comes from (and which source to use)

Comparison table

Source Key needed Best for
Annuaire des Entreprises website No Free single lookups by hand
INSEE Sirene API Yes, an account Full register with history
Sirene bulk files on data.gouv.fr No Downloading the whole register
API Recherche d'entreprises No Developers who will handle rate limits themselves
France Company Search (SIRENE) on Apify No Filtered lists, JSON/CSV export, pay per company

For a one-off SIREN number lookup, the free Annuaire des Entreprises website is the fastest way to find a SIREN number. For lists and automation, use the Actor.

A note on the Sirene API name: INSEE's Sirene API is a separate government service with its own account. This Actor does not use it.

Data source and licence

The Actor reads public open data from the API Recherche d'entreprises, the Annuaire des Entreprises API run by DINUM. That API covers INSEE Sirene and other French public registers, and the data is reused under Licence Ouverte 2.0. The upstream API allows 7 requests per second per IP and scans at most 10,000 results per query; the Actor handles the rate limit and slicing. Every record carries a sourceUpdatedAt date.

This Actor is independent: it is not affiliated with or endorsed by INSEE, DINUM or the French government, and is not a government service.

What data you get

You get one record per legal unit. The French company data fields include:

  • Identity: siren, name, legalName, legalFormCode, companyCategory, isIndividualEntrepreneur, diffusionStatus
  • Status and dates: status, creationDate, closureDate
  • Activity and size: nafCode, employeeRange, establishment counts
  • Head office: headOffice{siret, address, postalCode, city, department}
  • Tax: vatNumber
  • Optional directors: dirigeants
  • Provenance: annuaireUrl, licence, sourceUpdatedAt, fetchedAt

The codes are passed through as the source provides them. legalFormCode is the 4-digit INSEE legal category code (see INSEE's catégories juridiques list), companyCategory is PME, ETI or GE, and nafCode follows NAF rev.2 (see INSEE's NAF nomenclature). employeeRange holds the raw INSEE headcount-band code.

Data limitations: this is not the complete Sirene database. Non-diffusible units and units that refused RCS registration are absent, and establishment predecessor/successor links are not included.

Here is a record from the Actor's example output, shortened:

{
  "siren": "552032534",
  "name": "DANONE",
  "status": "active",
  "creationDate": "1955-01-01",
  "nafCode": "70.10Z",
  "legalFormCode": "5599",
  "companyCategory": "GE",
  "headOffice": {"siret": "55203253400703", "address": "59-61 RUE LA FAYETTE 75009 PARIS", "postalCode": "75009", "city": "PARIS", "department": "75"},
  "vatNumber": "FR27552032534",
  "dirigeants": null,
  "sourceUpdatedAt": "2026-10-14T08:01:59",
  "annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/552032534",
  "licence": "Source: API Recherche d'entreprises (DINUM, recherche-entreprises.api.gouv.fr), data from INSEE Sirene and other French public registers. Licence Ouverte / Open Licence 2.0 (https://www.etalab.gouv.fr/licence-ouverte-open-licence/). Last update of each record: see sourceUpdatedAt."
}
Enter fullscreen mode Exit fullscreen mode

Step-by-step: search French companies in the Apify console

  1. Open the France Company Search (SIRENE) page and click Try for free. Sign in to Apify. No French API key is needed.
  2. The Input tab is pre-filled with three SIRENs (552032534, 542051180, 552120222), status: any and maxItems: 10. Run it as-is to see sample records.
  3. Choose your search: paste SIRENs or SIRETs into sirenOrSiret, or use companyNames, nafCodes, departments or postalCodes. At least one is required.
  4. Optional: set incorporatedFrom / incorporatedTo (creation date, inclusive) and status.
  5. Optional: enable includeDirigeants (directors). Read the GDPR section first.
  6. Set maxItems, the maximum number of companies output and charged.
  7. Optional: enable onlyNew for scheduled runs. It tracks SIRENs already output.
  8. Click Start. Open the dataset to export French companies to CSV or JSON; Apify datasets also export to Excel, XML, HTML table, RSS and JSONL. The RUN-STATS and ERRORS key-value records show counts and invalid inputs.
  9. Optional: schedule the run, for example a weekly NAF + department search with onlyNew.

A mixed SIREN and SIRET lookup looks like this:

{"sirenOrSiret": ["552032534", "13002526500013"]}
Enter fullscreen mode Exit fullscreen mode

Step-by-step: call it via API

Use the Apify Python client. You need only your Apify token, no French API key:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "nafCodes": ["62.01Z"],
    "departments": ["48"],
    "incorporatedFrom": "2025-01-01",
    "incorporatedTo": "2025-12-31",
    "maxItems": 100
}

run = client.actor("kingly_apple/sirene-company-search").call(run_input=run_input)
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)
Enter fullscreen mode Exit fullscreen mode

Or from a terminal with the Apify CLI:

echo '{"sirenOrSiret":["552032534"]}' | apify call kingly_apple/sirene-company-search --silent --output-dataset
Enter fullscreen mode Exit fullscreen mode

The Actor page also shows an Apify MCP server configuration if you want an AI agent to call it.

Filtering tips: NAF code, department, postcode and creation date

To search French companies by NAF code in a region, combine nafCodes with departments:

{
  "nafCodes": ["62.01Z"],
  "departments": ["48"],
  "incorporatedFrom": "2025-01-01",
  "incorporatedTo": "2025-12-31",
  "status": "any",
  "includeDirigeants": false,
  "maxItems": 100,
  "onlyNew": false
}
Enter fullscreen mode Exit fullscreen mode

status takes "any" (the default), "active" or "ceased".

  • At least one of sirenOrSiret, companyNames, nafCodes, departments or postalCodes is required.
  • Number lookups ignore the status and date filters.
  • Name search keeps only name matches (case- and accent-insensitive).
  • French company search by department or postcode matches any establishment, not only the head office; matchedEstablishmentSirets lists the matches.
  • The Actor applies date filters and onlyNew itself (the upstream API has no date filter).
  • Each query scans at most 10,000 results, so narrow large segments. Warnings appear in RUN-STATS.

Want a full export by activity, plus the NAF 2025 codes? See How to Get a List of French Companies by NAF Code (and Prepare for NAF 2025).

Use cases

  • Lead generation (company-level): build lists by NAF code, location and creation date, and schedule with onlyNew to catch new companies. Prospecting must follow GDPR and CNIL rules (see below), and diffusionStatus = "P" units are off-limits for marketing.
  • KYB / KYC verification: confirm a SIREN or SIRET exists and check status, legalFormCode, head office and vatNumber before onboarding. annuaireUrl gives a human-readable reference; sourceUpdatedAt shows freshness.
  • Supplier due diligence: batch-check suppliers for closures (closureDate), establishment counts and head-office location.
  • Market mapping: list companies in a sector and region over a creation-date window.

Pricing

$0.003 per company written to the dataset ($3 per 1,000 companies). Invalid numbers, not-found numbers, duplicates and companies removed by filters or onlyNew are not charged.

GDPR and directors' data

Directors are off by default. With includeDirigeants enabled, each director entry contains name, role, birth year and month, and nationality only, never addresses or full birth dates. The keys are type (natural_person or legal_entity), lastName, firstNames, role, birthYear, birthMonth, nationality, plus siren and denomination when the director is a company. Sole traders' company names are personal names. Units with diffusionStatus = "P" must not be used for marketing or prospecting. You are the data controller, B2B marketing must follow GDPR and CNIL rules (see the CNIL's guidance on electronic commercial prospecting, in French), and this is not legal advice.

FAQ

What is the difference between a SIREN and a SIRET number?
A SIREN is the 9-digit number of a French legal unit (the company). A SIRET is the 14-digit number of one establishment: the SIREN plus a 5-digit suffix. The Actor accepts both and normalises spaces, dots and dashes.

Can I look up French companies by SIREN without an API key?
Yes. France Company Search (SIRENE) needs no API key. It uses the public API Recherche d'entreprises, the API behind Annuaire des Entreprises run by DINUM, and is not affiliated with INSEE, DINUM or the French government.

Is this INSEE's Sirene API?
No. INSEE's Sirene API is a separate government service that requires an account. This is an independent Apify Actor reusing open data from the API Recherche d'entreprises under Licence Ouverte 2.0.

How do I find all French companies with a given NAF code in a department?
Put the NAF code (e.g. 62.01Z) in nafCodes and the department (e.g. 75, 2A, 971) in departments, optionally with a creation-date range. Each query scans at most 10,000 results, so narrow large segments with postcodes or more specific codes.

What data does France Company Search return?
One record per legal unit: SIREN, name, legal form code, status, creation and closure dates, NAF code, company category, employee range, head office, VAT number, an Annuaire des Entreprises link, optional directors and a sourceUpdatedAt date.

How much does it cost?
$0.003 per company written to the dataset ($3 per 1,000 companies). Invalid or not-found numbers, duplicates and companies removed by filters or onlyNew are not charged.

Can I get directors (dirigeants) of French companies?
Yes, with includeDirigeants (off by default). Only name, role, birth year and month, and nationality are returned. This is personal data under GDPR, so you need your own lawful basis.

Is this the complete Sirene database?
No. Non-diffusible units and units that refused RCS registration are absent, and establishment predecessor/successor links are not included. For the full register with history, use INSEE's Sirene API or the bulk Sirene files on data.gouv.fr.

Get started

France Company Search (SIRENE) is a SIREN lookup API with no key: search by SIREN, SIRET, NAF code, department or postcode, get clean JSON or CSV, and pay $0.003 per company. Run the 3-company example, then try your own NAF + department query: France Company Search (SIRENE) on Apify.

Working on UK + France KYB? See the Companies House Scraper on Apify for UK company, officer and PSC data.


Data: Annuaire des Entreprises / API Recherche d'entreprises (DINUM), INSEE Sirene and other French public registers, reused under Licence Ouverte 2.0.

This Actor is independent: it is not affiliated with or endorsed by INSEE, DINUM or the French government, and is not a government service.

Top comments (0)