French company data: search SIRENE by NAF code or look up SIREN numbers in bulk
Every French company has a 9-digit SIREN number and an entry in the INSEE Sirene register: legal form, NAF activity code, headcount bracket, head office, establishments (SIRET), and for many companies published revenue. The French government serves all of it for free through the API Recherche d'entreprises. This guide shows how to query it yourself, the two traps that skew lead lists, and France Company Search: SIREN/SIRET Data (SIRENE), an Apify actor that turns any search or SIREN list into clean rows, company data only, with no directors' names.
Run it on Apify Opens the actor's page on apify.com. A free Apify account is needed to run it.
Where French company data comes from
- INSEE Sirene is the official register of companies (unités légales, SIREN) and their establishments (SIRET). It has the NAF/APE activity code, legal form, headcount bracket, creation date and addresses.
- INPI's RNE (national business register) adds directors and filed accounts.
- The API Recherche d'entreprises, run by DINUM, combines both with public label lists (RGE, Qualiopi, organic, ESS) and powers annuaire-entreprises.data.gouv.fr. It needs no key, allows 7 requests per second per IP, and the data is published under the Licence Ouverte 2.0, which allows commercial reuse with attribution.
Paid alternatives (Pappers, Societe.com, data brokers) add scores and contacts on top of the same register. For lists of companies by sector and place, the free API covers most needs.
Query the free API yourself
A search for active software companies (NAF 62.01Z) in Paris, tested on 2026-10-12 with curl and jq:
curl -s "https://recherche-entreprises.api.gouv.fr/search?activite_principale=62.01Z&departement=75&etat_administratif=A&per_page=3&page=1" \
| jq -c '.total_results, (.results[] | [.siren, .nom_complet, .tranche_effectif_salarie, .siege.code_postal])'
10000
["380474494","EURO INFORMATION DEVELOPPEMENTS (EID)","51","67000"]
["394026934","EXPERIS FRANCE (EXPERIS)","51","44300"]
["849239587","SNAPDESK (SNAPDESK)","11","75010"]
Two things in that answer catch most people out:
- The location filter matches any establishment. The first two "Paris" companies have their head offices in Strasbourg (67000) and Saint-Herblain (44300); they just have a site in Paris. For a list of Paris-based companies you have to check
siege.code_postalor the department yourself. - 10,000 is a ceiling, not a count.
total_resultsstops at 10,000 and the API serves at most 400 pages of 25. Bigger searches must be split (by NAF code, department or headcount) and de-duplicated.
A single lookup by SIREN works through the same endpoint:
curl -s "https://recherche-entreprises.api.gouv.fr/search?q=529991119" \
| jq -c '.results[0] | {siren, nom_complet, nature_juridique, activite_principale, adresse: .siege.adresse, finances}'
{"siren":"529991119","nom_complet":"LEDGER","nature_juridique":"5710","activite_principale":"62.01Z",
"adresse":"106 RUE DU TEMPLE 75003 PARIS","finances":{"2016":{"ca":868690,"resultat_net":-397198}}}
Watch out for personal data: the same answers include dirigeants (directors with names and birth month), and a sole trader's SIREN (legal form 1000) returns the owner's name and address. If you store results, filter those out. Codes such as 5710 (SAS) and headcount bracket 51 (2,000–4,999 employees) need INSEE's nomenclatures to be readable.
Search or look up companies without code
- Open France Company Search: SIREN/SIRET Data (SIRENE) on Apify.
- Pick a Mode: search with filters, look up a list of SIREN/SIRET numbers, or search near a GPS point.
- Set filters in plain terms: NAF code or prefix (
43.22covers plumbing and heating), department or region by name or code, headcount brackets, PME/ETI/GE, legal form (SAS), labels such as RGE or Qualiopi, revenue range. - Click Start and export the Companies, Head office and location or Finances and labels view as CSV or Excel.
The actor applies the head-office rule for you (companies whose head office is in your area; "Any establishment" is an option), splits searches above 10,000 results automatically, checks SIREN and SIRET numbers (length and Luhn) before sending them, and translates codes into labels. A row from a real run on 2026-10-12, shortened:
{
"status": "ok",
"siren": "529991119",
"name": "LEDGER",
"legalForm": "SAS, société par actions simplifiée",
"nafCode": "62.01Z",
"nafLabel": "Programmation informatique",
"companyCategory": "ETI",
"headcountLabel": "250-499 employees",
"vatNumber": "FR03529991119",
"headOfficeSiret": "52999111900098",
"address": "106 RUE DU TEMPLE 75003 PARIS",
"latitude": 48.862592,
"longitude": 2.358607,
"financeYear": 2016,
"revenueEur": 868690,
"netIncomeEur": -397198,
"corporateOfficers": [{"siren": "344366315", "name": "ERNST & YOUNG AUDIT", "role": "Commissaire aux comptes titulaire"}],
"annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/529991119"
}Worked examples from our test runs
| Search (2026-10-12) | Result |
|---|---|
| Active software companies (62.01Z) headquartered in Paris, first 50 | 50 companies: 39 PME, 9 ETI, 2 GE; 45 with a VAT number, 34 with published accounts |
| RGE-certified heating and plumbing installers (43.22) in Gironde, 10–99 employees, with their sites | 52 companies in 32 towns (34 heating, 18 plumbing); 37 have 10–19 employees; 21 publish revenue, median €2.4 million |
| Restaurants (56.10A) within 2 km of Lyon city centre | 40 companies, median distance 0.95 km; 17 have their head office outside the Rhône, so chains appear because of a local restaurant |
| Lookup of 13 mixed numbers | 7 companies found; 3 invalid numbers, 2 sole traders and 1 unknown number returned as free rows |
| All active software companies in France | 10,200 unique companies from 36 split queries, 446 requests in 112 seconds, no rate limiting |
| New software companies in Creuse, weekly | First run 12, second run 0, after 2 simulated new companies exactly those 2 |
The national export is where splitting matters: a single query stops at 10,000 companies, so the actor split it by NAF code, then department, then headcount bracket, and removed the duplicates for free.
What each row contains
| Field | What it holds |
|---|---|
status | ok, or why a lookup returned nothing: invalid_input, not_found, natural_person_withheld, error (all free) |
siren, name, tradeNames, legalForm, vatNumber | Identity, with the intra-EU VAT number computed from the SIREN |
nafCode, nafLabel, naf25Code, activitySection | Activity, including the new NAF 2025 code |
companyCategory, headcountLabel, headcountYear | PME, ETI or GE, and INSEE's headcount bracket |
headOfficeSiret, address, departmentName, regionName, latitude, longitude | Head office location |
financeYear, revenueEur, netIncomeEur | Latest published accounts |
labels, isRge, isQualiopi, isEss, collectiveAgreements | Certifications and collective agreements (IDCC) |
matchingEstablishments, distanceKm | Optional sites that match the search, and distances in near-a-point mode |
corporateOfficers | Officers that are companies only (auditors, parent companies) |
Honest limits
- Company data only. Sole traders are never output, and directors who are natural persons are dropped. If you need named decision makers, this is the wrong tool.
- Revenue is often missing or old. Only companies that publish accounts have figures,
financeYearcan be years back, and a revenue of 0 with a non-zero net income usually means the income statement was not published (our reading of the data). - Headcounts are brackets and estimates, updated yearly by INSEE.
- Non-diffusible companies (which opted out of public listing) are not in the API and come back as
not_found. - Shared rate limit. The API allows 30 requests per second per network; on busy cloud networks the actor slows down and waits.
All input fields
Generated from the actor's live input schema (build 1.0.1).
| Field | Type | Default | What it does |
|---|---|---|---|
Modemode | string | search | Search = find companies with filters (NAF code, place, size, legal form, labels, revenue). Lookup = enrich a list of SIREN or SIRET numbers. Near a point = companies with an establishment within a radius of a GPS position. Options: search, lookup, nearPoint |
| Search filters | |||
Search textquery | string | Optional words matched against the company name and address, for example "boulangerie" or "transport Lyon". Leave empty to search with filters only. | |
NAF / APE activity codesnafCodes | array | Main activity of the company (NAF rev. 2). Accepts 62.01Z, 6201Z, or a short prefix: 62 = all of division 62 (IT services), 43.2 = building installation. Several codes are combined with OR. | |
Activity sectionsactivitySections | array | Broad sectors (NAF sections). Use NAF codes above for finer filters. Options: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U | |
Departmentsdepartments | array | French departments by code or name: 75, 13, 69, 2A, 971, Paris, Gironde. Several are combined with OR. | |
Regionsregions | array | Regions by name or INSEE code: Île-de-France (11), Auvergne-Rhône-Alpes (84), Provence-Alpes-Côte d'Azur (93), Occitanie (76), Nouvelle-Aquitaine (75), Hauts-de-France (32), Grand Est (44), Bretagne (53), Normandie (28), Pays de la Loire (52), Centre-Val de Loire (24), Bourgogne-Franche-Comté (27), Corse (94) and overseas regions. | |
Postal codespostalCodes | array | 5-digit postal codes, for example 75011 or 69002. | |
INSEE commune codescommuneCodes | array | 5-character INSEE commune codes (not postal codes), for example 75111 (Paris 11e) or 33063 (Bordeaux). | |
Location filters apply tolocationMatch | string | headOffice | Head office = the company's registered head office is in the chosen place (best for local lead lists). Any establishment = the company has at least one establishment (branch, shop, site) there, which also returns national companies with a local branch. Options: headOffice, anyEstablishment |
Company statusstatus | string | active | Active companies only (default), closed (ceased) companies only, or both. Options: active, closed, any |
| Company profile | |||
Company size categorycompanyCategories | array | INSEE category: PME = small and medium-sized (under 250 staff), ETI = intermediate-sized (250-4,999), GE = large enterprise. Options: PME, ETI, GE | |
Headcount bracketsheadcountBrackets | array | Number of employees (INSEE bracket of the company). Options: NN, 00, 01, 02, 03, 11, 12, 21, 22, 31, 32, 41, 42, 51, 52, 53 | |
Legal formslegalForms | array | INSEE legal form codes (5710 = SAS/SASU, 5499 = SARL/EURL, 6540 = SCI, 92 = all associations) or shortcuts: SAS, SASU, SARL, EURL, SELARL, SA, SNC, SCI, Association. Sole traders (1000) are not available. | |
Labels and certifications (all must match)labels | array | Keep companies that hold every selected label. Options: rge, qualiopi, bio, ess, societeMission, association, trainingOrganisation, siae, administration, localAuthority, liveEntertainment, patrimoineVivant, responsiblePurchasing, alimConfiance, finess, uai, egapro, collectiveAgreement | |
Collective agreement (IDCC)collectiveAgreementId | string | 4-digit IDCC code, for example 1486 (Syntec) or 1596 (building workers). | |
| Finances | |||
Minimum revenue (EUR)minRevenueEur | integer | Latest published revenue (chiffre d'affaires). Only companies that publish accounts can match. | |
Maximum revenue (EUR)maxRevenueEur | integer | Latest published revenue. | |
Minimum net income (EUR)minNetIncomeEur | integer | Latest published net income (can be negative). | |
Maximum net income (EUR)maxNetIncomeEur | integer | Latest published net income (can be negative). | |
Sort by sizesortBySize | boolean | false | Return companies with the most establishments first. |
| Lookup | |||
SIREN / SIRET numbersidentifiers | array | For Lookup mode: SIREN (9 digits) or SIRET (14 digits), spaces allowed. Each company gets one row; SIRETs add the requested establishment. Invalid numbers and unknown companies get a row with an error status and are not charged. | |
| Near a point | |||
Latitudelatitude | string | For Near-a-point mode, for example 48.8566. | |
Longitudelongitude | string | For Near-a-point mode, for example 2.3522. | |
Radius (km)radiusKm | string | Search radius around the point, up to 50 km. Default 5. Only NAF codes and activity sections can be combined with this mode. | |
| Output | |||
Include matching establishmentsincludeEstablishments | boolean | false | Add the company's establishments that match the search (address, SIRET, activity, headcount, GPS), capped per company. |
Max establishments per companymaxEstablishmentsPerCompany | integer | 5 | Cap for the establishments list. |
Include corporate officers (companies only)includeCorporateOfficers | boolean | true | Officers that are themselves companies, for example statutory auditors or a parent company acting as president. Directors who are natural persons are never included. |
Max companiesmaxItems | integer | 100 | Stop after this many companies (search and near-a-point modes). 0 = up to 100,000. |
Split large searches automaticallyautoSplit | boolean | true | The API returns at most 10,000 companies per search. When you ask for more, the actor splits the search by NAF code, department and headcount bracket and removes duplicates. |
| Monitoring | |||
Only companies not returned before (monitoring)onlyNew | boolean | false | Remember the companies already output for this exact search and skip them next time. Schedule the run to get newly registered companies matching your filters. The first run outputs all matches. |
Monitoring memory store namestateStoreName | string | france-companies-state | Named key-value store that remembers output companies for "Only new" mode. Each different search keeps its own memory inside it. |
| Advanced | |||
Requests per secondrequestsPerSecond | integer | 4 | The API allows at most 7 requests per second per IP address (and 30 per network). The default of 4 stays well below; the actor slows down further when asked to. |
Request timeout (seconds)requestTimeoutSecs | integer | 30 | Timeout for one API request. |
Max retriesmaxRetries | integer | 5 | Retries for network errors, rate limits (HTTP 429, honouring Retry-After) and server errors. |
Call it from code
Start a run and get the results in one HTTP request with the Apify API (your token is under Console, Settings, API & Integrations):
curl -X POST "https://api.apify.com/v2/acts/adamhaleworks~france-company-search-sirene-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"nafCodes":["62.01Z"],"departments":["75"],"status":"active","maxItems":100}'The run's Output tab offers 3 ready-made views; every view exports to CSV, Excel, JSON or XML:
- Companies:
status,siren,name,legalForm,nafCode,nafLabel,headcountLabel,companyCategory,creationDate,city,postalCode,revenueEur,financeYear,isActive,annuaireUrl - Head office and location:
siren,name,headOfficeSiret,address,postalCode,city,departmentName,regionName,latitude,longitude,establishmentsOpen,vatNumber - Finances and labels:
siren,name,financeYear,revenueEur,netIncomeEur,headcountLabel,companyCategory,labels,collectiveAgreements,isEss,isSocieteMission
What it costs
Free to run right now. The actor charges no fee of its own today. Apify bills only the compute a run uses against your account's platform credit, and the free Apify plan includes $5 of usage every month. For scale: building all five of our actors and test-running each once on its default input used $0.03 of credit in total (2026-10-12).
Planned: pay-per-event pricing of $0.002 per company in the output ($2 per 1,000) once the account's payout setup is finished. This page and the Apify page will show the change, and Apify notifies existing users before a price change takes effect.
At the planned price, the 50 Paris software companies would cost $0.10 and the 13-number lookup $0.014 (only the 7 companies found). Invalid numbers, unknown numbers, withheld sole traders and companies already delivered in "Only new" runs would be free.
FAQ
Is there a free API for French company data?
Yes. The API Recherche d'entreprises (recherche-entreprises.api.gouv.fr) is free, needs no key and covers every company in the Sirene register with RNE and label data, under the Licence Ouverte 2.0. It allows 7 requests per second per IP.
What is the difference between SIREN and SIRET?
SIREN is the 9-digit number of the company. SIRET is 14 digits: the SIREN plus 5 digits for one establishment (site). A company has one SIREN and one SIRET per establishment, one of which is the head office.
Why does my search return more than 10,000 companies only with the actor?
The API never pages past 10,000 results for one search. The actor splits large searches into smaller ones by NAF code, department and headcount bracket and removes duplicates, so national exports work.
Can I get directors' names or emails?
No. The actor deliberately outputs company-level data only: no sole traders, no natural-person directors, no birth dates. Corporate officers that are companies, such as auditors, are kept.
How do I get only newly registered companies?
Turn on Only new with a saved search name and schedule the actor weekly. Each run returns companies you have not received for that search before.
Try it on your own data
Search French companies in the official SIRENE register by NAF code, department, region, legal form, headcount, revenue and labels (RGE, Qualiopi, ESS), or look up SIREN/SIRET lists. Head office address, GPS, finances, VAT number, establishments. Company-level data only, no director names.
Open France Company Search: SIREN/SIRET Data (SIRENE) Opens the actor's page on apify.com. A free Apify account is needed to run it.