France Company KYC — SIREN, Officers & Financials | $4/1K
Pricing
from $3.88 / 1,000 companies
France Company KYC — SIREN, Officers & Financials | $4/1K
Verify French counterparties in one call: SIREN/SIRET identity, active status, officers (dirigeants), revenue & net income — straight from official SIRENE/RNE government data. KYC, compliance & B2B enrichment without a Pappers subscription. No API key, pay per result.
Pricing
from $3.88 / 1,000 companies
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
31
Total users
10
Monthly active users
8 days ago
Last modified
Categories
Share
France Company Registry Scraper — SIRENE / Recherche-Entreprises API
Used by KYC teams verifying French counterparties before contract signing, B2B sales reps enriching French prospect lists, and M&A analysts mapping sector exposure via NAF codes.
Search and extract French company data from the official SIRENE / Recherche-Entreprises open government API. No API key required. Pay per result.
$4.00/1K records (Pay Per Event). Premium add-ons — officers and financials — are charged only when that data is actually present in a record (see the pricing tab for current rates). No API key required. Official French government data (INSEE SIRENE + RNE). SIREN/SIRET authoritative.
What you get
| Field | Description |
|---|---|
siren | 9-digit French company identifier |
siret | 14-digit registered office (siege) identifier |
name | Full company display name |
legal_name | Raison sociale |
trade_name | Commercial name of the registered office |
legal_form_code | Nature juridique code (e.g. 5710 = SAS) |
status | active or closed |
naf_code | NAF/APE activity code (e.g. 30.30Z) |
naf_label | NAF section in English (e.g. Manufacturing) |
category | Company size: GE / ETI / PME / TPE |
employee_band | Employee count range (decoded) |
incorporation_date | Date of creation (YYYY-MM-DD) |
closure_date | Closure date if applicable |
address | Full formatted address of the registered office |
city | City |
postal_code | Postal code |
department | Department code (e.g. 75) |
region | Region code |
latitude / longitude | GPS coordinates of the registered office |
revenue | Latest year turnover in EUR (when available) |
net_income | Latest year net income in EUR (when available) |
finance_year | Year of the financial data |
officers | List of dirigeants (name, role, nationality, birth year) |
officers_count | Total officer count |
establishments_count | Total establishments |
open_establishments_count | Open establishments |
query | Search query that returned this record |
parse_confidence | Data quality score 0–1 |
warnings | Machine-readable quality flags |
Sample output
{"siren": "442843942","siret": "44284394200115","name": "LES BOULANGERIES WATRIN","legal_name": "LES BOULANGERIES WATRIN","trade_name": null,"acronym": null,"legal_form_code": "5710","status": "active","naf_code": "10.71C","naf_label": "Manufacturing","category": "PME","employee_band": "Non-employer unit","incorporation_date": "2002-02-01","closure_date": null,"address": "ZAC BELLE FONTAINE 57185 CLOUANGE","city": "CLOUANGE","postal_code": "57185","department": "57","region": "44","latitude": 49.260633151,"longitude": 6.0939809433,"revenue": 733914,"net_income": 337154,"finance_year": 2024,"officers": null,"officers_count": 2,"establishments_count": 20,"open_establishments_count": 11,"query": "boulangerie","scraped_at": "2026-06-21T16:31:54Z","parse_confidence": 1,"warnings": []}
How to use
- Set Search queries — company name, city, activity sector, or free text (e.g.
LVMH,boulangerie Paris,Airbus) - Set Max results per query (default 100, 0 = unlimited)
- Optionally filter: Active companies only, Company size category
- Optionally disable Include officers if you only need the firmographic data
No API key is needed. The Recherche-Entreprises API is a free, open French government service.
Use cases
- KYC / due diligence — verify a French counterparty's SIREN, legal status, registered address, and officers
- B2B lead generation — find companies by activity (NAF code), city, or size category
- Market research — map sectors, employee bands, incorporation trends
- Compliance — track company status, closure dates, officer changes
- Financial data — extract revenue and net income for companies that file public accounts
Data source
Recherche-Entreprises API — official French government open data platform (api.gouv.fr). Data is sourced from INSEE SIRENE (company registry) and RNE (national company register), updated continuously.
Financial data (revenue, net income) is available for companies that file public annual accounts (approximately 30–40% of registered companies).
Pricing
Pay-per-result (PPE):
| Event | Rate | Trigger |
|---|---|---|
company-record (base) | $5.00/1K | Every company record returned |
financials-record (add-on) | $2.00/1K | Records with revenue or net_income present (~35% of companies) |
officers-fetch (add-on) | $2.00/1K | Records with officers when includeOfficers: true |
Premium events fire only when the data is actually present — you are never charged a premium for companies that don't file public accounts or have no officers on record. No monthly subscription.
Worked examples:
| Run | Records | Financials? | Officers? | Cost |
|---|---|---|---|---|
| 100 companies (name search) | 100 | No | No | $0.50 |
| 1,000 companies | 1,000 | No | No | $5.00 |
| 500 companies with financials (~35% hit rate) | 500 | ~175 | No | $2.85 ($2.50 + $0.35 financials) |
| 200 companies with officers | 200 | No | Yes | $1.40 ($1.00 base + $0.40 officers) |
FAQ
Do I need an API key or proxy? No. The Recherche-Entreprises API is a free, open French government service — no key, no proxy, no signup needed.
How much financial data is available?
Revenue and net income are available for companies that file public annual accounts — approximately 30–40% of French registered companies. Others return null on those fields and are not charged the financial add-on.
Can I filter by region or sector?
Filter by company size category (GE / ETI / PME / TPE) using the categorieEntreprise input. For sector filtering, include NAF code or sector keywords in your search query (e.g. fintech Paris).
What if my search returns empty?
Zero results are not charged. Try broader search terms — the API searches across company name, trade name, and city. Use activeOnly: false to include dissolved companies.
Notes
- The API is open and free; no key is needed
- Financial data is available for companies that file public accounts; others return
nullonrevenue/net_income - Officer birth dates are partially masked (year only) in the API response — full dates are not available
- The
parse_confidencefield ranges from 0 to 1; records below 0.7 may have incomplete data
vs. Competitors
| Feature | This Actor | silentflow/france-company-scraper | Pappers / Societe.com API |
|---|---|---|---|
| Data source | Official INSEE SIRENE + RNE | HTML scraping Pappers | Paid vendor API |
| No API key required | Yes — zero friction | No (proxy needed) | No (paid subscription) |
| Revenue & net income | Yes (public filers, ~35%) | Partial | Yes (paid tier) |
| GPS coordinates | Yes (lat/lon of siege) | No | No |
| Officers (dirigeants) | Yes (included by default) | Partial | Yes (paid) |
| parse_confidence | Yes | No | No |
| Cost | $5/1K | ~$3-7/1K + proxy | $20-50/1K+ |
Use with AI agents (MCP)
An agent calls this tool to look up a French company's legal identity, registered address, size, sector, and officers mid-conversation — e.g. "Is Airbus active and where is it registered?" or "Find all fintech PMEs in Lyon" or "Verify the SIREN and officer list for counterparty X before signing a contract."
Point your MCP client at this single tool:
{"mcpServers": {"apify": {"command": "npx","args": ["mcp-remote","https://mcp.apify.com/?tools=bovi/companies-france","--header","Authorization: Bearer <YOUR_APIFY_TOKEN>"]}}}
Minimal input an agent can pass (set maxResultsPerQuery low to control token cost; set includeOfficers: false when you only need firmographics):
{ "queries": ["LVMH"], "maxResultsPerQuery": 5, "includeOfficers": false }
Returns flat, clean rows the agent can reason over directly:
{"siren": "775670417","name": "LVMH MOËT HENNESSY LOUIS VUITTON","status": "active","naf_code": "70.10Z","naf_label": "Professional, Scientific and Technical","category": "GE","employee_band": "10 000+","incorporation_date": "1987-06-20","city": "PARIS 8","postal_code": "75008","parse_confidence": 1.0,"warnings": []}
Reliability for agents: data comes from the official French government SIRENE API (INSEE + RNE), not HTML scraping — results don't break on website redesigns and every record carries a stable siren identifier for de-duplication across runs. parse_confidence (0–1) and warnings flag any incomplete records so agents can filter low-quality results. Stale or unmatched queries return an empty result set, never bad rows. No API key needed inside the tool — auth is your Apify token in the client config above.
Integrations
Built for KYC analysts and B2B sales teams verifying and enriching French company data via official SIRENE records — the JSON/dataset output drops into the tools you already run, no glue code:
- n8n / Make / Zapier — trigger a run or pipe every new dataset item into 500+ apps (Google Sheets, Airtable, Slack, HubSpot, your database) with no code: n8n, Make, Zapier.
- Webhooks — fire your own endpoint the moment a run finishes, to push results straight into your pipeline (docs).
- MCP server — expose this actor as a tool to Claude, Cursor, or any MCP client so an AI agent can pull this data mid-conversation (guide).
- API & SDKs — fetch the dataset as JSON, CSV, or Excel through the Apify REST API or the Python / JS SDKs.
See all Apify integrations.
More scrapers from our toolkit
Building a data pipeline? These actors pair well with this one — each runs on your own Apify account with the same pay-per-result pricing, no subscription:
- Companies House UK Scraper
- Crunchbase Scraper
- Seeking Alpha Scraper
- Transfermarkt Scraper
- Unusual Options Activity
- Yahoo Finance Scraper
Chain any of them together from the Integrations tab (the Run succeeded trigger) to build a multi-step workflow — one actor's output feeds the next.
Usage statistics
This Actor creates a small, content-free summary at the end of each run. It is used only to monitor reliability and improve this Actor. A copy is saved as USAGE_STATS in your own Apify key-value store, so you can see the exact record created for your run.
Set disableUsageStats to true in the input to opt out. Nothing is sent then; your USAGE_STATS record only says that statistics were disabled.
Only these fields are recorded:
- schema version, Actor name and build number;
- UTC start and finish hour (not a precise timestamp);
- run duration, number of results and time to the first result, each as a coarse range;
- whether the result was empty, the end status, and an error type from a fixed list;
- memory setting and counts of charged events;
- names of the input fields you set, never their values;
- the selected option for input fields that offer a fixed list of choices (for example a sort order).
We do not collect input text, search terms, URLs, domains, usernames, email addresses, names, proxy credentials, tokens, scraped records, output items, raw error messages, stack traces, or hashes of any of those values. Records are kept for no longer than 13 months, used only as aggregated operational statistics, and never sold or shared.
Additional fields (Phase 2)
This Actor also records your Apify user ID, whether Apify marks the account as paying, the size range of list inputs, the selected country when the input offers a fixed list of countries, and one category from a fixed Actor taxonomy. We use these fields only for aggregate reliability, repeat-use and cross-Actor analysis; reports suppress any cell with fewer than five distinct users.
The same disableUsageStats: true input flag turns these fields off too. The user ID is removed after 13 months; we do not export, sell, share, or attempt to re-identify this data.
Run-outcome signals (v2)
To learn whether a run did what it was asked to do, the record also holds a few more coarse ranges and yes/no flags. None of them contains content:
- the result limit you asked for (a range, when the input has one) and what share of it was delivered;
- results delivered per input item you listed (a range);
- output quality as ranges: how fully the result fields were filled, the share of rows that look like errors, the share of duplicate rows, and how many different fields appeared. These are counted in memory while results are saved; no result content is kept;
- how the run was started (console, API, schedule, webhook, another Actor);
- how it ended: stopped by you, timed out, reached the requested limit, stopped by the charge limit, and how many times the platform moved the run;
- if this Actor reports it: how many items to process worked or failed (ranges) and one failure reason from a fixed list;
- a short code made from the names of the input fields you set, never their values.
Repeat-run fingerprint (v2)
When your Apify user ID is recorded (see above), the record also holds an 8-character one-way code made from your input (proxy settings left out) and this Actor's name. It only lets us see that the same account ran the same input again soon after an unsatisfying run; we never see the input itself. It is stored only in the database, never published, and reports use it in aggregate with the same five-user minimum. It is the one exception to the statement above that no hashes are collected, and disableUsageStats: true turns it off.