French Companies · Search & SIREN Enrich avatar

French Companies · Search & SIREN Enrich

Pricing

from $3.99 / 1,000 company retrieveds

Go to Apify Store
French Companies · Search & SIREN Enrich

French Companies · Search & SIREN Enrich

Paste a Pappers or data.gouv URL or SIREN list — export-ready rows: directors, VAT, addresses, NAF, finances where published. Public INSEE register. No API key.

Pricing

from $3.99 / 1,000 company retrieveds

Rating

0.0

(0)

Developer

Corentin Robert

Corentin Robert

Maintained by Community

Actor stats

0

Bookmarked

65

Total users

11

Monthly active users

5 days ago

Last modified

Share

French Companies · Search & SIREN Enrich · No API Key

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. Data comes from France’s official register (recherche-entreprises.api.gouv.fr, INSEE-backed).

No login. No API key. No Pappers account required.

Need every branch and office, not just the headquarters? Use the French Establishments Scraper — paste the SIRENs from this Actor and get one row per site (SIRET), with address, NAF, headcount, and status.

Prospecting regulated professions? See the French Accountants Directory Scraper (expert-comptables.org) and Notaires.fr Directory Scraper — same HTTP-first CRM export pattern.


Who is this for?

You are…Typical goalSuggested setup
B2B sales / SDR teamProspect list by sector, size, or regionSearch URL + exclude GE/ETI + director filters
Outbound agencyEnrich a CRM spreadsheet of SIRENsMode sirens → export CRM export view
Local franchise / retail opsMap competitors in a city or postcodeMode searchUrl — Pappers link with ville=
Compliance / KYB analystVerify legal form, status, directorsURL or SIRENs — turn director filters off
New-co hunterFresh SAS in your sectorSearch URL + Created from (last 12 months)
Market researchSector snapshot with director demographicsSearch URL + dirigeantAgeMin / Max + optional excludeCategories
Data / RevOpsScheduled master company tableSearch URL with maxResults: 0; raise run timeout for large jobs
AI / automation builderFeed an LLM or MCP agent with structured company rowsSIREN list or Search URL → Agent export view or full JSON

What you get by default: one row per company (SIREN) with identity, address, NAF activity, legal form, VAT, director names where published, and financial bands when the register exposes them. Director email and phone are not in the public register — enrich downstream (e.g. website crawl, FullEnrich).

When to tighten filters: set requireDirigeant: true and requireDirigeantPhysique: true for outreach-ready lists; turn them off for raw compliance extracts. Set excludeCategories: ["GE","ETI"] when you want PME-only prospecting.


Quick start

Search URL (most common)

  1. Run a search on Pappers, Societe.com, or data.gouv and copy the full URL from the address bar.
  2. Open this Actor → mode Search URL → paste into Search URLs.
  3. Optional: tighten filters (exclude GE/ETI, creation dates, director rules) — see Optional filters below.
  4. Set Max companies (25 for a preview, 0 for full export).
  5. Click Start → export from the Dataset tab (JSON, CSV, Excel).

SIREN list (enrich IDs you already have)

  1. Mode SIREN list → paste one SIREN per line (8–9 digits; short values are zero-padded).
  2. Pass only the fields you need — omitted fields are not stored in your run input; code defaults apply when absent.
  3. Click Start.
{
"mode": "sirens",
"sirens": ["63200885", "69200210", "303252225"],
"requireDirigeant": true,
"requireDirigeantPhysique": false
}

What it extracts

CategoryFields (representative)
Identitysiren, nom_complet, nom_raison_sociale, date_creation, etat_administratif
Activityactivite_principale (NAF), libelle_activite_principale, categorie_entreprise
Addressadresse, code_postal, ville, departement, departement_nom, region, region_nom, latitude, longitude
Legal & taxforme_juridique, nature_juridique, tva_intracommunautaire, siret_siege
Scaleeffectif_salarie (band), caractere_employeur, nombre_etablissements, nombre_etablissements_ouverts
Governancedirigeants, dirigeant_1dirigeant_5, role_1role_5, birth year and nationality where published
Outreach helpersdirigeant_1_age, company_age_years, statut_entreprise, pappers_url, data_gouv_url, google_maps_url, linkedin_search_url
BODACC signal (optional)derniere_annonce_date, derniere_annonce_type, derniere_annonce_libelle, derniere_annonce_url — see includeLastBodaccEvent
Financialschiffre_affaires, resultat_net, annee_finances (when published in the source)
Flagsest_entrepreneur_individuel, est_organisme_formation, donnees_diffusibles, convention_collective

Typical field coverage

Measured on Apify production run HqGPGUFVIsjqahMMR (5 170 SIRENs enriched · 2026-06-05). Your mix will vary by sector and register diffusion rules.

FieldCoverageNotes
siren, nom_complet, etat_administratif100%Core identity
adresse, code_postal, ville100%HQ address on this run
activite_principale + label100%NAF / APE
tva_intracommunautaire100%VAT number
forme_juridique99.4%Legal form label
dirigeant_1 (primary director)100%This cohort had a named director on every row
dirigeant_1_date_naissance (public year)90.5%~9.5% redacted or missing — use requireDirigeantPhysique to drop masked rows
chiffre_affaires, resultat_net0% on this runFinances depend on publication in the register; common on Search URL exports when available (~30–50% in mixed sectors)
Email / phone0%Not in this register — use a separate enrichment step
  • Auditors (commissaires aux comptes) are excluded from director columns by design.
  • Empty values are omitted from each row (no empty strings).
  • Unmatched SIRENs are logged in CSV / RUN_LOG with siren + _error (not written to the dataset — not billed).

How much does it cost to scrape French companies?

Pay per event — each successful row in the default dataset bills apify-default-dataset-item (Store label: Company retrieved). Failed or not-found SIRENs are not written to the dataset and are not billed (see CSV / RUN_LOG for _error rows). HTTP-only keeps compute low on top of row pricing.

ScenarioRows billedFREEBronzeSilverGold
25 companies (preview)25~$0.15~$0.12~$0.11~$0.10
1,000 SIRENs enriched1,000~$5.99~$4.99~$4.49~$3.99
5,200 SIRENs enriched5,200~$31.15~$25.95~$23.35~$20.75
10,000-row search (maxResults: 0)10,000~$59.90~$49.90~$44.90~$39.90

Higher Apify subscription tiers unlock lower per-row prices on the Store (Bronze → Gold discounts).

SIREN enrich speed (handled in code — nothing to configure):

List sizeApify Cloud behaviourTypical duration
< 50 SIRENsSingle IP · 3 workers · 3.5 req/sSeconds to a few minutes
≥ 50 SIRENsAuto Apify Proxy · 10 workers · ~6 req/s per IP~11 min / 5 200 SIRENs (observed); ~5–15 min / 5k depending on API load

Large lists scale through parallel proxy IPs instead of one shared cloud egress. Advanced tuning (enrichMaxConcurrency, enrichMaxRequestsPerSecond, enrichDelayMs, proxyConfiguration) is API-only — not shown in the Console form.

Silver and Gold Apify plans reduce the per-row price further (see table above). A small compute component still applies (512 MB default RAM). Raise timeout under Run options for maxResults: 0. See Apify pricing.


Input examples

Search URL — SAS IT & real estate, directors aged 35–45

{
"mode": "searchUrl",
"searchUrls": [
"https://www.pappers.fr/recherche?en_activite=true&forme_juridique=5710&activite=62.01Z,62.02A,62.02B,63.11Z",
"https://www.pappers.fr/recherche?en_activite=true&forme_juridique=5710&activite=68.10Z,68.20A,68.31Z"
],
"maxResults": 500,
"requireDirigeant": true,
"requireDirigeantPhysique": true,
"dirigeantAgeMin": 35,
"dirigeantAgeMax": 45,
"dateCreationMin": "2021-01-01",
"excludeCategories": ["GE", "ETI"],
"effectifsMin": 10,
"effectifsMax": 49
}

Search URL — SAS created in the last 12 months (full export)

{
"mode": "searchUrl",
"searchUrls": [
"https://www.pappers.fr/recherche?en_activite=true&forme_juridique=5710&date_creation_min=15-05-2025&date_creation_max=15-05-2026"
],
"maxResults": 0,
"dateCreationMin": "2025-05-15",
"dateCreationMax": "2026-05-15"
}

When a date filter is active, the Actor splits the query into 13 parallel regional shards to cover the full register without hitting the per-query cap.

Agent / MCP — enrich SIRENs for an LLM

Every row includes English alias fields (company_id, summary, …) plus the full French register. In the Console, open the Dataset tab → Agent export (LLM / MCP) view → Export. For API/MCP, read the dataset as JSON and pick the fields you need.

{
"mode": "sirens",
"sirens": ["552032534", "380129866"],
"requireDirigeant": true
}

Each row returns English keys plus quick links. For long lists, start the run with waitSecs: 0 and poll get-actor-runget-dataset-items.

Example row (Agent export view / English fields):

{
"company_id": "732829320",
"company_name": "Example SAS",
"legal_name": "EXAMPLE",
"status": "Active",
"created_at": "2015-01-01",
"company_age_years": 11,
"legal_form": "SAS",
"activity_code": "62.01Z",
"activity_label": "Computer programming activities",
"city": "Paris",
"director_name": "Jean Dupont",
"director_role": "President",
"director_age": 51,
"summary": "Example SAS · Active · Computer programming activities · Paris · director: Jean Dupont (age 51) · 11 yrs old",
"pappers_url": "https://www.pappers.fr/entreprise/732829320",
"annuaire_url": "https://annuaire-entreprises.data.gouv.fr/entreprise/732829320",
"maps_url": "https://www.google.com/maps/search/?api=1&query=...",
"linkedin_search_url": "https://www.linkedin.com/search/results/all/?keywords=..."
}

See Dataset export views below.

Common filter recipes (Console)

Use the optional filters directly — no hidden preset layer.

PME prospecting (outreach-ready)

{
"mode": "searchUrl",
"searchUrls": ["https://www.pappers.fr/recherche?en_activite=true&activite=62.01Z&departement=75"],
"excludeCategories": ["GE", "ETI"],
"requireDirigeant": true,
"requireDirigeantPhysique": true,
"maxResults": 100
}

New SAS — last 12 months

{
"mode": "searchUrl",
"searchUrls": ["https://www.pappers.fr/recherche?forme_juridique=5710&..."],
"dateCreationMin": "2025-06-12",
"maxResults": 100
}

KYB / compliance — full register row

{
"mode": "sirens",
"sirens": ["552032534"],
"requireDirigeant": false,
"requireDirigeantPhysique": false
}

API-only: preset or presetMode (pme_prospection, new_sas_12m, kyb_extract) still pre-fills the same filters for scripted runs.

Optional BODACC last notice (includeLastBodaccEvent)

Adds the most recent official legal announcement per company from bodacc.fr (public gazette, no extra API key). One HTTP call per saved row.

When to enableWhen to leave off
Preview runs (25–100 rows)maxResults: 0 or thousands of rows
SIREN lists < ~200Scheduled bulk exports
Timing signal for outbound (creation, insolvency, sale)Use BODACC Announcements Scraper for full history
{
"mode": "sirens",
"sirens": ["995209905"],
"includeLastBodaccEvent": true
}

Run logs show: [bodacc] Phase — N lookups in Xs · with announcement · none · errors.


All input parameters

ParameterTypeIf omittedDescription
modestringRequired. searchUrl · sirens. Legacy search / enrich normalized in code.
searchUrlsstring[][][Search URL mode] One URL per line from Pappers, Societe.com, or data.gouv. Required when mode is searchUrl.
sirensstring[][][SIREN mode] One ID per line. Required when mode is sirens.
maxResultsinteger25[Search] Global cap for the whole run (all URL shards combined). 0 = no cap. Ignored when a date filter forces full pagination.
requireDirigeantbooleantrue[All] Drop rows with no named director.
requireDirigeantPhysiquebooleantrue[All] Drop rows where the primary director has no usable birth year.
excludeCategoriesstring[][][All] Exclude GE and/or ETI. Empty = no size filter.
dateCreationMinstring[All] Created on or after (YYYY-MM-DD). Console datepicker. Merged with URL dates by intersection.
dateCreationMaxstring[All] Created on or before (YYYY-MM-DD).
effectifsMininteger[All] Min employees (headcount band overlap). Merged with Pappers effectifs_min by intersection.
effectifsMaxinteger[All] Max employees (headcount band overlap).
dirigeantAgeMininteger[All] Min age of primary director (dirigeant_1).
dirigeantAgeMaxinteger[All] Max age for the same rule.
includeLastBodaccEventbooleanfalse[All] Last BODACC notice per row. Slower on large runs — see section above.

Console form: two sections — Your data (mode, URLs, SIRENs, max) and Optional filters & enrichments.

Dataset views: Companies Overview, CRM export, Agent export (LLM / MCP) — pick the view when you export; no input setting needed.

Dataset export views

ViewBest for
Companies OverviewQuick scan in the Console
CRM exportLean French spreadsheet (Lemlist, HubSpot, Excel)
Agent export (LLM / MCP)English keys + summary one-liner for automations

All views read from the same dataset — each row stores the full register plus helper links and English aliases.

Agent field mapping (selected):

Agent keySource (full profile)
company_idsiren
company_namenom_complet
legal_namenom_raison_sociale
statusstatut_entreprise (Active / Closed)
director_namedirigeant_1
director_agedirigeant_1_age
revenue_eurchiffre_affaires
annuaire_urldata_gouv_url
maps_urlgoogle_maps_url
last_legal_event_datederniere_annonce_date (when BODACC enabled)
last_legal_event_typederniere_annonce_type
summaryComputed English one-liner (includes last legal event when BODACC enabled)

Local output.csv follows the same profile: Full = wide CSV with helpers; CRM / Agent = profile columns only.

Minimal input: send only mode plus the fields you care about. Omitted keys are not injected into your stored run input; runtime defaults above apply in code only.

API-only parameters (not in Console)

ParameterDescription
verboseLogsPer-SIREN pagination detail in live logs (default false).
maxCompanyAgeYearsDeprecated — use dateCreationMin instead.
nearPoint, nearCity, radiusKm, nearActivityCode, nearActiveOnlyLegacy radius search — prefer a Pappers URL with ville=.
enrichMaxConcurrency, enrichMaxRequestsPerSecond, enrichDelayMs, proxyConfigurationSIREN enrich tuning.

Pappers URL parsing

Paste a Pappers search URL (pappers.fr/recherche?…) — supported parameters are converted automatically:

Pappers parameterApplied as
en_activite=trueetat_administratif=A
activite=62.01Z,62.02Aactivite_principale (comma-separated NAF)
forme_juridique=5710nature_juridique (5710 = SAS in SIRENE)
ville=74160commune (INSEE code)
date_creation_min/maxPost-filter on date_creation (DD-MM-YYYY → ISO)
effectifs_min/maxPost-filter via tranche_effectif_salarie bands
departement, region, code_postalPassed to API
age_dirigeant_min/maxNot supported — use dirigeantAgeMin / Max inputs

Societe.com URL parsing

Paste a Societe.com search or export URL (societe.com/cgi-bin/search?… or societe.com/fichier?…). Filters are replayed against the official INSEE API (same dataset as Pappers/data.gouv — not Societe.com’s premium fields).

Societe.com parameterApplied as
ftJlegal=5710 (repeatable)nature_juridiqueone API shard per code when several forms are selected
ftAstatus=0 / 1etat_administratif=A / C (open / closed)
q or champsText search q
departement, ftDeptdepartement
ftActivity, code_naf, apeactivite_principale
ftRegion, ftZipregion, code_postal
Director age, CA filters in UINot in URL — use Actor optional filters

Note: ftJlegal values are INSEE legal-form codes (same family as Pappers 5710 = SAS). A Societe.com URL with 20 legal forms runs 20 parallel API queries; results are deduplicated by SIREN.


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",
"dirigeant_1": "Jean Dupont",
"dirigeant_1_date_naissance": "1975-03",
"dirigeant_1_age": 51,
"company_age_years": 11,
"statut_entreprise": "Active",
"pappers_url": "https://www.pappers.fr/entreprise/732829320",
"google_maps_url": "https://www.google.com/maps/search/?api=1&query=..."
}

Export as JSON, CSV, Excel, or HTML from the Dataset tab. A plain-text Run log (phase summary and final counts) is saved to the default key-value store as RUN_LOG.


How it works

  1. Parse input — mode-specific validation; no demo URLs or SIRENs injected.
  2. Query the register — Search URL (paginated filters) or SIREN (exact match with pagination).
  3. Normalize — flat row per company via transform.js; NAF labels, director columns, financial bands.
  4. Post-filter — creation date, director rules, company size, director age (same rules in all modes).
  5. Export — optional BODACC lookup · enrich row · push to Dataset (pick a view when downloading).

Throughput, proxy selection, and retries are handled in code — nothing to tune in the Input form. SIREN enrich on Apify Cloud automatically switches to Apify Proxy from 50 SIRENs upward so each worker uses its own IP.


Limitations

  • No email or phone in the official register — director names and birth years only where published.
  • Not every field on every row — micro-companies and redacted entries may lack financials or birth dates.
  • Date-filtered searches scan all pages (no maxResults cap) and may run 15–45+ minutes — increase timeout.
  • Pappers age_dirigeant filter is not in the public API — use dirigeantAgeMin / Max.
  • BODACC toggle adds ~0.4–1 s per saved row — use on small batches, not bulk maxResults: 0 runs.

Local development

npm install
apify run --purge-none
  • apify run validates against storage/key_value_stores/default/INPUT.json — copy from .actor/INPUT.json or use --input-file=./input.json.
  • Local cloud-off runs read root input.json first, then KV input (src/main.js).
  • Tests: npm test (59 unit tests, no network). CI smoke: npm run test:smoke (Pappers, gouv, Societe.com 20 shards). Full integration: npm run test:integration.
$npm run run:local # copies input.json → storage/.../INPUT.json, then apify run

This Actor reads only the French administration’s public register API (recherche-entreprises.api.gouv.fr) — not private websites or paywalled Pappers pages. Data is published under official open-data rules where diffusion is allowed.

Rows may contain personal data (director names). Ensure your use complies with GDPR and your lawful basis. See Apify’s guide on legal scraping.


FAQ

Do post-filters apply in SIREN mode?
Yes — creation-date bounds, headcount bounds, requireDirigeant, requireDirigeantPhysique, excludeCategories, and director age apply in both modes. Filtered rows are not written; check run logs for filtered out vs not found.

How do I get a CRM or Agent spreadsheet?
Open the Dataset tab after the run → choose CRM export or Agent export (LLM / MCP) → Export (JSON, CSV, Excel). No input setting required.

Do filters replace my Pappers Search URL?
No. Filters narrow the companies returned from the URL or SIREN list you provide — sector and region always come from your link.

What does includeLastBodaccEvent do?
Adds the latest official notice from bodacc.fr per company (derniere_annonce_* fields). Off by default. Enable for small runs; for full announcement history use the dedicated BODACC Scraper.

Do I need an API key?
No.

How does director age filtering work?
Age is computed from the primary director’s birth year (dirigeant_1). Missing or [NON-DIFFUSIBLE] birth years are excluded when age bounds are set or when requireDirigeantPhysique is true.

Why scan all pages when a date filter is set?
The API caps at 10 000 results per query with no date sort. Regional sharding (13 parallel queries) avoids missing recent companies.

Why do logs mention retries?
The public service can slow down under load. The Actor waits and retries automatically — no Input tuning required.

How long will my SIREN list take?
Paste your IDs and run — pacing is automatic. Short lists (< 50) use a single IP; larger lists enable Apify Proxy in the background (~11 minutes for 5 200 SIRENs in production). Raise timeout under Run options for very large jobs (10k+).


Also available

Browse all: apify.com/corent1robert


Support

Questions, custom automation, or integrations: corentin@outreacher.fr

Use the Issues tab on this Actor’s Apify page after publish.