France Company KYC — SIREN, Officers & Financials | $4/1K avatar

France Company KYC — SIREN, Officers & Financials | $4/1K

Pricing

from $3.88 / 1,000 companies

Go to Apify Store
France Company KYC — SIREN, Officers & Financials | $4/1K

France Company KYC — SIREN, Officers & Financials | $4/1K

Search French company records in the official Recherche-Entreprises API. Get normalized identity, status, officers, address, activity, financial, and establishment data. Use queries; no API key. Pricing: $0.004 per company record on the Free plan.

Pricing

from $3.88 / 1,000 companies

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

40

Total users

4

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

French Company Registry Scraper

For KYC teams, B2B sales reps, and M&A analysts, this Actor searches French companies and extracts SIREN/SIRET identity, status, officers, financials, addresses, and NAF data.
It uses the official SIRENE / Recherche-Entreprises API; no buyer API key or source login is required.

  • Verify French counterparties with SIREN/SIRET, legal status, registered address, and officer data.
  • Enrich B2B prospect lists with company names, NAF activity, locations, size, and employee bands.
  • Map M&A sector exposure using NAF codes, company categories, and establishment counts.
  • Extract latest revenue, net income, and finance year when published accounts are available.
  • Search company names, cities, activities, or free text across one or more queries.

What you get

Field familyFieldsDescription
Identitysiren, siretFrench company and registered-office establishment identifiers.
Namesname, legal_name, trade_name, acronymDisplay, legal, commercial, and acronym fields when available.
Legal and statuslegal_form_code, statusNature juridique code and returned administrative status.
Activitynaf_code, naf_labelNAF/APE code and English NAF section label.
Sizecategory, employee_bandGE / ETI / PME / TPE category and decoded employee band.
Datesincorporation_date, closure_dateCreation and applicable closure dates.
Registered officeaddress, city, postal_code, department, regionFormatted address and geographic codes.
Coordinateslatitude, longitudeRegistered-office GPS coordinates when available.
Financialsrevenue, net_income, finance_yearLatest available turnover, net income, and finance year.
Officersofficers, officers_countDirigeants list and count. Objects can include last_name, first_name, role, birth_year, nationality, and type.
Establishmentsestablishments_count, open_establishments_countTotal and open establishment counts.
Provenancequery, scraped_atQuery that returned the record and run timestamp.
Qualityparse_confidence, warningsQuality score from 0 to 1 and machine-readable flags.

Sample output

The sample is shortened by omitting only the acronym field.

{
"siren": "919781021", "siret": "91978102100010",
"name": "LVMH", "legal_name": "LVMH",
"trade_name": null, "legal_form_code": "6540", "status": "active",
"naf_code": "68.20B", "naf_label": "Real Estate",
"category": null, "employee_band": "Non-employer unit",
"incorporation_date": "2022-10-01", "closure_date": null,
"address": "2 CHE DU VIEUX MOULIN 07300 TOURNON SUR RHONE",
"city": "TOURNON SUR RHONE", "postal_code": "07300",
"department": "07", "region": "84",
"latitude": 45.063211747, "longitude": 4.8468676796,
"revenue": null, "net_income": null, "finance_year": null,
"officers": [{"last_name":"HAUTESSERRES","first_name":"VANESSA DINA RAYMONDE","role":"Gérant et associé indéfiniment responsable","birth_year":"1981","nationality":null,"type":"personne physique"},{"last_name":"MARTIN","first_name":"LUDOVIC JEAN AUGUSTE","role":"Associé indéfiniment responsable","birth_year":"1981","nationality":null,"type":"personne physique"}],
"officers_count": 2, "establishments_count": 1, "open_establishments_count": 1,
"query": "LVMH", "scraped_at": "2026-10-30T01:34:39Z",
"parse_confidence": 1, "warnings": []
}

Pricing

The current billing model is Pay Per Event. Prices below are per event:

  • company-record: one event for each scraped company result, including all fields.
  • apify-actor-start: charged when the Actor starts running.
  • The financials-record event has no price, and the officers-fetch event has no price in the published pricing information.
EventFree planBronze planSilver plan
company-record$0.004 per event$0.00396 per event$0.00392 per event
apify-actor-start$0.00005 per event$0.0000495 per event$0.000049 per event
financials-recordNo priceNo priceNo price
officers-fetchNo priceNo priceNo price
EventGold planPlatinum planDiamond plan
company-record$0.00388 per event$0.00384 per event$0.0038 per event
apify-actor-start$0.0000485 per event$0.000048 per event$0.0000475 per event
financials-recordNo priceNo priceNo price
officers-fetchNo priceNo priceNo price

Worked example: 1,000 company records = $4.00 on the Free plan for company-record events; 10,000 company records = $40.00 on the Free plan for company-record events, plus the applicable apify-actor-start charge of $0.00005 per event on the Free plan.

The Apify Free plan includes $5 of monthly platform usage credit. The supplied Free-plan calculation gives 1,249 company-record events after one $0.00005 Free-plan Actor Start event, before any events without a current price. The Free plan limits output to 25 results per run; paid Apify plans remove the per-run cap.

For this Actor, compute, Apify Proxy traffic including residential traffic, and storage are included in event prices and paid by the Actor developer.

How to use

  1. Enter one or more strings in queries, such as a company name, city, activity, or free-text search. Each query is searched separately and matching results are merged.
  2. Set maxResultsPerQuery to an integer limit. Use 0 for no requested limit, subject to the source API maximum of approximately 10,000 results.
  3. Choose filters: keep activeOnly enabled for active entities, set categorieEntreprise to GE, ETI, PME, or TPE, and enable requireFinancials when you need companies with published accounts.
  4. Keep includeOfficers enabled for officer lists; set it to false when firmographic fields are sufficient.
  5. Run the Actor, inspect parse_confidence and warnings, and repeat the run through Apify Schedules; a monthly schedule is a suitable starting point for this registry job.
{
"queries": ["LVMH"],
"maxResultsPerQuery": 5,
"includeOfficers": false,
"activeOnly": true,
"requireFinancials": false,
"categorieEntreprise": "",
"disableUsageStats": false
}

Export the dataset as JSON or CSV, or read it through the Apify dataset API.

Input parameters

ParameterWhat it doesDefault
queriesRequired array of search strings. Empty strings are removed; each remaining query is searched separately.Required
maxResultsPerQueryMaximum records per query. 0 means no requested limit, up to the API maximum of approximately 10,000.25 in the input schema; code fallback is 100 when omitted
includeOfficersIncludes the normalized dirigeants list when true; sets officers to null when false.true
activeOnlyWhen true, keeps active administrative status; when false, also permits closed or dissolved entities.true
requireFinancialsSends the financial-data filter and returns companies with filed published accounts.false
categorieEntrepriseFilters by GE, ETI, PME, or TPE; an empty string applies no size filter. TPE maps to employee bands below 10 employees.""

Limits and edge cases

ConditionWhat you seeWhat to do
The run uses the Apify Free planThe Actor stops after 25 output records per run.Use a paid Apify plan to go beyond 25 output records per run, or run a smaller preview.
maxResultsPerQuery is 0The Actor paginates without a requested per-query limit, but the source API has a maximum of approximately 10,000 results.Use a specific limit or split broad searches.
No query remains after empty values are removedThe run records no_queries in OUTPUT and returns without company records.Provide at least one non-empty queries value.
A search has no matchesThe dataset is empty for that search and no company-record event is charged.Broaden the company, city, activity, or free-text query.
A query receives an API error or remains rate limited after retriesThe query is recorded as failed and later queries continue; earlier pushed records remain available.Retry the run or use narrower queries.
A matching company has no published financial datarevenue, net_income, and finance_year can be null.Set requireFinancials to true when financial data is essential.
parse_confidence is below 0.7The record may be incomplete, with details in warnings when available.Review the affected fields and warnings.
The same SIREN appears through multiple queriesDuplicate records are skipped.Use query to see which query produced each retained record.

FAQ

How much does it cost to scrape French companies?

On the Free plan, company-record costs $0.004 per result and apify-actor-start costs $0.00005 per event. 1,000 company records = $4.00 on the Free plan, plus the applicable Actor Start event.

Do I need an API key or login?

No API key or source login is required. The Actor calls the official open Recherche-Entreprises API; you supply your Apify account.

Why use this instead of the official Recherche-Entreprises API?

The Actor returns flat normalized records, accepts multiple queries, applies the documented filters, paginates source results, and removes duplicate SIRENs across the run.

What if my search is empty or a query is not working?

For no matches, broaden the search string. For an API error or rate limit, the affected query is recorded as failed while later queries continue; retry with a narrower query.

The Actor accesses public data from the official Recherche-Entreprises API, sourced from INSEE SIRENE and RNE. Source terms and applicable law depend on your use case; this README does not provide a legal guarantee.

Usage statistics

This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.

A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.

To opt out, set disableUsageStats to true in the input. Nothing is sent then.

Full list of collected fields