REST API · JSON · through RapidAPI
French Company Search (Recherche d'entreprises, Sirene) API
Search France's official company register by NAF activity code, département, headcount band and status, and get typed legal-entity records with head-office address, coordinates and company size.
Read from the official source when you call (recherche-entreprises.api.gouv.fr); no personal data. GET /v1/fr-company-search answers {"product", "count", "items", "fetched_at"}.
Source: API Recherche d'entreprises (data.gouv.fr, from INSEE's SIRENE and the RNE), under Licence Ouverte / Open Licence 2.0 (Etalab). Every answer carries this attribution in its sources field.
Get a key on RapidAPI plans and pricing are on the listing; one key covers every endpoint.
Parameters
| Parameter | Type | What it does | Example |
|---|---|---|---|
activite_principale | string | Main activity code (NAF rev. 2) of the company, e.g. 62.01Z (computer programming), 56.10A (restaurants), 47.11D (supermarkets). | "62.01Z" |
departement | string | Département code of the head office, e.g. 75 Paris, 69 Rhône, 2A Corse-du-Sud. Leave empty for all of France. | "75" |
tranche_effectif_salarie | string | INSEE headcount band: 00 (0), 01 (1-2), 02 (3-5), 03 (6-9), 11 (10-19), 12 (20-49), 21 (50-99), 22 (100-199), 31 (200-249), 32 (250-499), 41 (500-999), 42 (1000-1999), 51 (2000-4999), 52 (5000-9999), 53 (10000+). Leave empty for any. | "11" |
etat_administratif | string | A = active companies, C = ceased companies. One of: A, C. | "A" |
limit | integer | At most this many results (1–1000, default 100). | 20 |
What each result holds
| Field | Type |
|---|---|
siren | id |
siret_head_office | id |
name | text |
legal_name | text |
naf_code | id |
legal_form_code | id |
address | text |
postcode | id |
city | text |
departement | id |
lat | lat |
lon | lon |
creation_date | date |
headcount_band | id |
company_category | text |
establishments_total | integer |
establishments_open | integer |
status | id |
Call it
With curl:
curl -G "https://french-company-search-api-sirene-siren-siret-naf.p.rapidapi.com/v1/fr-company-search" \ --data-urlencode activite_principale=62.01Z \ --data-urlencode departement=75 \ --data-urlencode tranche_effectif_salarie=11 \ --data-urlencode etat_administratif=A \ --data-urlencode limit=20 \ -H "X-RapidAPI-Key: $RAPIDAPI_KEY" \ -H "X-RapidAPI-Host: french-company-search-api-sirene-siren-siret-naf.p.rapidapi.com"
With Python (pip install requests):
import os, requests
r = requests.get(
"https://french-company-search-api-sirene-siren-siret-naf.p.rapidapi.com/v1/fr-company-search",
params={'activite_principale': '62.01Z',
'departement': '75',
'tranche_effectif_salarie': '11',
'etat_administratif': 'A',
'limit': 20},
headers={"X-RapidAPI-Key": os.environ["RAPIDAPI_KEY"], "X-RapidAPI-Host": "french-company-search-api-sirene-siren-siret-naf.p.rapidapi.com"},
timeout=120,
)
for item in r.json()["items"]:
print(item)
For code and AI agents that pick tools at run time, GET /v1/products lists every endpoint with its parameters and fields.
Questions
How fresh is it? Each call reads the official source then; an identical query within 15 minutes is answered from a cache.
What if the source is down? The answer says so: a 502, or "partial": true when only some of its requests failed.