French Companies · Search & SIREN Enrichment
Pricing
from $4.99 / 1,000 results
French Companies · Search & SIREN Enrichment
Build B2B lead lists or CRM enrichment from France’s official company register. Search by pasted URL (Pappers or data.gouv) with NAF, region, and department filters—or paste SIRENs for full records. Returns identity, address, directors, headcount band, and more via recherche-entreprises.api.gouv.fr.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Corentin Robert
Actor stats
0
Bookmarked
26
Total users
8
Monthly active users
12 days ago
Last modified
Categories
Share
French Companies — Search & SIREN Enrichment (Official INSEE API)
Get export-ready French company data in minutes: build prospect lists from a search URL, or turn SIRENs into full profiles — names, locations, activities, directors, financials where published, legal form, VAT, and more. No API key. Data comes from France’s official register (recherche-entreprises.api.gouv.fr, INSEE-backed).
Built for: Sales & lead gen · CRM enrichment · Compliance & KYB · Market research by sector or region
What does this Actor do?
| Mode | Input | Behavior |
|---|---|---|
| Search URL | One or more URLs from Pappers or recherche-entreprises.data.gouv.fr | Query parameters are parsed into API filters. The Actor paginates through all matching companies (per URL). Multiple URLs are merged; rows are deduplicated by SIREN. |
| SIREN list | Nine-digit French company IDs (SIREN) | Each SIREN is resolved to a full company record. Values shorter than nine digits are zero-padded. Duplicates are removed. |
The Apify Input form lists two modes: searchUrl and sirens. Legacy keys search and enrich are still normalized in code for local input.json or older scripts.
What data does it extract?
| Category | Fields (representative) |
|---|---|
| Identity | siren, nom_complet, nom_raison_sociale, date_creation, etat_administratif |
| Activity | activite_principale (NAF), libelle_activite_principale, categorie_entreprise |
| Address | adresse, code_postal, ville, departement, departement_nom, region, region_nom, latitude, longitude |
| Legal & tax | forme_juridique, nature_juridique, tva_intracommunautaire, siret_siege |
| Scale | effectif_salarie (band), caractere_employeur, nombre_etablissements, nombre_etablissements_ouverts |
| Governance | dirigeants, dirigeant_1…dirigeant_5, role_1…role_5, birth year and nationality columns where available |
| Financials | chiffre_affaires, resultat_net, annee_finances (when published in the source) |
| Flags | est_entrepreneur_individuel, est_organisme_formation, donnees_diffusibles, convention_collective |
- Auditors (commissaires aux comptes) are excluded from director columns by design.
- Empty values are omitted from each row (no empty strings for missing fields).
donnees_diffusibles:falsewhen the register marks data as non-public.- If a SIREN cannot be matched, the dataset row contains
sirenand_errorwith a short message.
Input examples
Search URL (larger extraction)
{"mode": "searchUrl","searchUrls": ["https://www.pappers.fr/recherche?ville=74160&en_activite=true","https://recherche-entreprises.data.gouv.fr/search?departement=75&activite_principale=62.01Z"],"maxResults": 500}
SIREN enrichment
{"mode": "sirens","sirens": ["732829320", "552032534", "380129866"]}
All input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | "searchUrl" | searchUrl or sirens. Aliases search / enrich are normalized when present in JSON (e.g. local input.json). |
searchUrls | string[] | (demo URL) | [Search] One URL per line from Pappers or data.gouv. |
sirens | string[] | (3 demo SIRENs) | [Enrich] One SIREN per line (digits only; short values padded). |
maxResults | integer | 25 | [Search] Max companies per URL. 0 = all matches (long runs — increase run timeout if needed). |
Developer note
Throughput and resilience (delays between requests, retries) are implemented in code — not in the Input form — so runs stay reliable against the official service without extra configuration.
Output example
{"siren": "732829320","nom_complet": "Example SAS","nom_raison_sociale": "EXAMPLE","activite_principale": "62.01Z","libelle_activite_principale": "Computer programming activities","adresse": "1 rue Example","code_postal": "75001","ville": "Paris","forme_juridique": "SAS","tva_intracommunautaire": "FR12345678901","dirigeants": "…"}
Download results as JSON, CSV, Excel, or HTML from the Dataset tab in the Apify Console.
How to use (Apify Console)
Search URL
- Open the Actor and select Search URL.
- Run a search on Pappers or data.gouv, then copy the full URL from the address bar.
- Paste one or more URLs into Search URLs (one per line).
- Optionally set Max results (higher for bigger extracts).
- Click Start.
- Open the Dataset tab when the run finishes and export your file format.
SIREN list
- Select SIREN list.
- Paste your nine-digit SIRENs (one per line).
- Click Start and export from the Dataset.
Local development
$npm install
Edit the single root file input.json (search mode by default, with a small maxResults for quick tests). To run SIREN enrichment locally, set "mode": "sirens" and edit the "sirens" array (searchUrls is ignored in that mode).
On a local run (not Apify Cloud), the Actor reads input.json at the project root first (src/main.js), then falls back to the default INPUT in the key-value store if the file is missing.
$apify run --purge-none
Optional: copy to the default store (mirrors how input is supplied on the platform):
$npm run run:local
Use apify run for parity with the cloud (avoid plain npm start alone).
Performance and cost
- Compute: This Actor uses HTTP requests only (no browser). Cost is mainly Apify compute units and run duration.
- Reliability: The service can slow down when busy. The Actor is built to wait and retry automatically so you do not adjust technical settings in the form.
- Volume: Large searches (
maxResults: 0) can run for a long time; raise the run timeout under Options if needed.
| Scenario (indicative) | Notes |
|---|---|
| A few SIRENs | Usually completes in seconds to a few minutes |
| Single search URL, hundreds of rows | Depends on maxResults and API response time |
| Many URLs or thousands of SIRENs | Longer wall time; ensure timeout is sufficient |
See current Apify pricing for compute pricing.
Use cases
- Lead lists: Filter by NAF code, department, or city (via URL filters), then export to your CRM.
- Enrichment: Turn a spreadsheet of SIRENs into full legal and contact context from the register.
- Compliance / KYB: Pull official status, form, and published financial bands where available.
Legal and data protection
- Data is retrieved from the French administration’s public API; this Actor does not scrape private websites.
- Rows may contain personal data (e.g. director names) where the register publishes them; use and retention must comply with GDPR and your lawful basis for processing.
- For general context on web data and compliance, see Apify’s blog on legal scraping.
FAQ
Do I need an API key?
No. The government search API used here does not require a key for these calls.
Can I use Pappers-only filters?
Only parameters that map to the official API are applied (see README table). Unsupported Pappers-only filters are ignored.
Why do I see errors or retries in logs?
The official service sometimes throttles heavy traffic. The Actor waits and retries for you. If a run still fails, try again later or split very large jobs into smaller runs.
Is every field always filled?
No. Some companies have redacted or unpublished fields; optional columns may be missing from a row.
Support
For questions, custom automation, or integrations: corentin@outreacher.fr
You can also use the Issues tab on this Actor’s Apify page after publish.