French Company Data & KYB: SIREN/SIRET + BODACC Alerts
Pricing
from $5.00 / 1,000 companies
French Company Data & KYB: SIREN/SIRET + BODACC Alerts
SIREN and SIRET lookup for French company data, KYB and KYC. Official INSEE SIRENE identity with Kbis-style registry fields, directors, and BODACC insolvency alerts. An open-data alternative to Pappers and Societe.com.
Pricing
from $5.00 / 1,000 companies
Rating
0.0
(0)
Developer
Yahya Nouali
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
French Company Data & KYB: SIREN/SIRET Lookup + BODACC Insolvency Alerts
Official French company data for KYB, KYC, lead generation, and supplier risk. One run returns SIREN, SIRET, legal identity, headquarters, NAF, directors, published revenue, and BODACC insolvency signals. A second mode watches a SIREN list and reports only what changed.
The data comes from two public government APIs: INSEE SIRENE, through the Recherche d'entreprises API, and BODACC, the official gazette of commercial announcements. There is no scrape of Pappers, Societe.com, Infogreffe, or any other private site. This is an open-data alternative to paying a data vendor for the same public registers. It is not a certified Kbis PDF from the commercial court.
The first enrich run is prefilled with Danone, Capgemini, and Orange. A short name can rank a smaller homonym first: MICHELIN currently matches an SCI, while the tire manufacturer is SIREN 855200507.
Where it pays off
- KYB and KYC onboarding. Confirm the SIREN, legal form, active or ceased status, headquarters, and directors before you open an account.
- Lead generation. Build a list by NAF code, department, region, and headcount, then keep SIRET and the official activity label.
- CRM enrichment. Paste names or SIREN/SIRET numbers from a spreadsheet and write one row per company back to the CRM.
- Supplier and credit risk. Flag a new BODACC collective proceeding (redressement, liquidation, sauvegarde) or a move, a rename, or a ceased SIREN on a watchlist.
Price compared with buying a dossier per company
| This actor | A per-company data vendor | |
|---|---|---|
| Source | INSEE SIRENE and BODACC open data | Usually a reseller of the same public registers, sometimes with a certified Kbis |
| Found company | $0.005, plus $0.002 when BODACC history is included | A per-file fee or a seat on a subscription |
| Miss, bad checksum, or API error | Row is stored. Not charged. | A credit is often spent anyway |
| Weekly watchlist | $0.015 per detected change. Unchanged SIRENs are free. The first run is a free baseline. | Another full pull of every company |
| Certified Kbis | Not included. You get the SIRENE fields a Kbis also shows. | Some vendors sell the court extract separately |
With BODACC left on, enrichment is about $7 per 1,000 found companies. Monitoring costs nothing until a watched field or a new announcement moves.
Pricing
Pay per event. Rental pricing is discontinued. Amounts are saved in Apify Console, not in the source. The actor charges three events:
| Event | Price | Charged when |
|---|---|---|
company-enriched (primary) | $0.005 | Enrich mode found a company. $5 / 1,000. |
bodacc-history | $0.002 | Enrich mode fetched BODACC for that company. $2 / 1,000. |
change-detected | $0.015 | Monitor mode found one change or one new BODACC announcement. |
Not charged:
not_found,invalid, anderrorrows- the first monitor observation of a SIREN (
baseline) - a monitored company that has not changed
- a failed BODACC call in enrich mode (the company row is still delivered if SIRENE succeeded, without the BODACC event)
Set the synthetic events apify-default-dataset-item and apify-actor-start to $0. Otherwise every dataset row, including misses, is billed again. Steps are in PUBLISHING.md.
Input
mode is enrich (default) or monitor.
Enrich uses one of three search modes:
- Names. One best match per name.
activeOnlydrops ceased companies. - SIREN / SIRET. Exact lookup. Spaces are ignored. A failed Luhn checksum is
invalidand is not sent to the API.activeOnlydoes not apply. - Filters. At least one of NAF code, NAF section, department, region, or headcount. Department and region match any establishment, so the headquarters on the row can sit in another department.
maxResults defaults to 25 and caps a run at 1,000. A name or identifier list longer than maxResults stops the run instead of silently dropping the tail.
Enrich example:
{"mode": "enrich","searchMode": "identifiers","sirens": ["552032534", "330703844", "380129866"],"includeBodacc": true,"bodaccHistoryLimit": 5,"includeDirigeants": true,"includeFinances": true,"activeOnly": true,"maxResults": 25,"maxConcurrency": 4}
The same three numbers are Danone, Capgemini, and Orange.
Output
Enrich mode writes one dataset item per company. The Output tab has Overview, Legal and BODACC, and Headquarters. A shortened item, from the public Danone record:
{"status": "found","input": "DANONE","matchType": "name","siren": "552032534","siretSiege": "55203253400703","nom": "DANONE","formeJuridique": "5599","formeJuridiqueLibelle": "SA à conseil d'administration (s.a.i.)","dateCreation": "1955-01-01","etatAdministratif": "A","etatAdministratifLibelle": "Active","adresseLigne": "17 BOULEVARD HAUSSMANN","codePostal": "75009","ville": "PARIS","departement": "75","codeNaf": "70.10Z","libelleNaf": "Activités des sièges sociaux","trancheEffectif": "42","trancheEffectifLibelle": "1 000 à 1 999 salariés","dirigeants": [{ "nom": "BERNARD DE SAINT AFFRIQUE", "prenoms": "ANTOINE", "qualite": "Directeur Général", "type": "personne physique" }],"chiffreAffaires": 27376000000,"resultatNet": 2100000000,"anneeFinances": "2025","bodaccCount": 107,"bodaccLastDate": "2026-09-02","bodaccLastType": "Modifications diverses","procedureCollectiveEnCours": false,"procedureCollectiveType": null,"sourceUrls": ["https://recherche-entreprises.api.gouv.fr/search?q=552032534","https://annuaire-entreprises.data.gouv.fr/entreprise/552032534","https://bodacc-datadila.opendatasoft.com/explore/dataset/annonces-commerciales/?q=552032534"],"licence": "Licence Ouverte 2.0 / Etalab","scrapedAt": "2026-10-24T22:05:20.108Z"}
The live item also includes the parsed street fields, coordinates, the TVA number when SIRENE publishes it, and bodaccAnnonces. procedureCollectiveEnCours is null when BODACC was not requested. scrapedAt is the time the official APIs were called.
A miss looks like this and is not billed:
{"status": "not_found","input": "990003105","siren": null,"message": "No company is published for SIREN 990003105.","licence": "Licence Ouverte 2.0 / Etalab"}
Monitor a watchlist
Set mode to monitor and pass SIRENs or SIRETs. Each run reads the current SIRENE record and BODACC notices, then compares them with the snapshot in a named key-value store (monitorStoreName, default fce-monitor-state). Use the same store name on every run. A new name starts the baseline over.
Watched fields: administrative status (active or ceased), headquarters address, legal form, name, NAF code, directors when includeDirigeants is on, any new BODACC announcement, and a change in the collective-proceeding flag.
The first time a SIREN is seen, the actor stores the snapshot and writes one row with status: "baseline". That row is not charged. Later runs write one row per change:
{"status": "change","input": "552032534","siren": "552032534","nom": "DANONE","changeType": "procedure_collective","field": "procedureCollective","before": null,"after": "2026-10-20 — Procédures collectives","eventDate": "2026-10-20","detectedAt": "2026-10-27T07:00:12.000Z","sourceUrl": "https://www.bodacc.fr/annonce/example","licence": "Licence Ouverte 2.0 / Etalab","scrapedAt": "2026-10-27T07:00:12.000Z"}
changeType is one of etat_administratif, adresse_siege, forme_juridique, nom, code_naf, dirigeants, bodacc_annonce, procedure_collective. A new collective announcement is a single procedure_collective row, not a second BODACC row. Open the dataset view Monitor changes.
Unchanged SIRENs produce no row and no charge. not_found, invalid, and error are stored and not charged, and a miss does not erase the previous snapshot. If the run hits the user's charge limit, already-billed changes stay saved and the rest are retried next time.
Monitor input:
{"mode": "monitor","sirens": ["552032534", "330703844", "380129866"],"monitorStoreName": "fce-monitor-state","includeBodacc": true,"includeDirigeants": true,"bodaccHistoryLimit": 20,"maxResults": 1000,"maxConcurrency": 4}
maxResults must be at least the length of sirens (the cap is 1,000).
Run it every week
In Apify Console, open Schedules and create a schedule for this actor. Paste the monitor input above. Keep monitorStoreName identical to the store used on the first baseline run.
Cron for Monday at 07:00 UTC:
0 7 * * 1
Save the schedule. The next run compares against fce-monitor-state and charges change-detected only when something moved. The schedule documentation is at docs.apify.com/platform/schedules.
Integrations: Make, Zapier, n8n
You can call this Actor from no-code tools through Apify's official integrations. Use its Actor ID SjJHbBzPhqXisaz6e, and connect each tool with OAuth or your Apify API token. Never put the token in the Actor input.
- Make: in the Apify app, add Run an Actor and set Run synchronously to Yes. Then add Get Dataset Items with the run's default dataset ID, and map the rows to Google Sheets, a CRM or Slack. For long runs, use the Watch Actor Runs trigger instead.
- Zapier: the Apify app has the Run Actor action. A synchronous run has a 30-second hard timeout, so for larger lists start the run and use the Finished Actor Run trigger with Fetch Dataset Items.
- n8n: install the official node
@apify/n8n-nodes-apify. It is a verified community node on n8n Cloud; on self-hosted n8n, add it under Settings > Community Nodes. Use Run an Actor and Get Dataset, or the Apify trigger for finished runs.
Example input:
{"mode": "enrich", "searchMode": "identifiers", "sirens": ["552032534"], "includeBodacc": true, "includeDirigeants": true}
Scheduled monitor to Slack or Sheets
- Save a monitor input as an Actor task and keep the same store name on every run:
{"mode": "monitor","sirens": ["552032534","330703844"],"monitorStoreName": "fce-monitor-state","includeBodacc": true}
- In Apify Console > Schedules, run the task on a cron such as
0 7 * * 1(every Monday at 07:00), with your timezone selected. - On the task's Integrations tab, add Slack or an HTTP webhook on Run succeeded. You can also use Make Watch Actor Runs, Zapier Finished Actor Run or the n8n Apify trigger.
- Fetch the dataset items and keep only the change rows:
statusis"change". The first run only stores the baseline and is free.
HTTP API
This call runs the Actor and returns the dataset rows in one request. Synchronous runs time out after 300 seconds, so use /runs for big lists.
curl -X POST "https://api.apify.com/v2/acts/SjJHbBzPhqXisaz6e/run-sync-get-dataset-items" \-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"mode": "enrich", "searchMode": "identifiers", "sirens": ["552032534"], "includeBodacc": true, "includeDirigeants": true}'
FAQ
Where does the data come from? The Recherche d'entreprises API (https://recherche-entreprises.api.gouv.fr) for SIRENE identity, and the DILA BODACC dataset annonces-commerciales on bodacc-datadila.opendatasoft.com. No API key is required. NAF and legal-form labels are bundled from INSEE. See src/data/SOURCES.md.
What licence applies? Licence Ouverte 2.0 / Etalab. Every row repeats licence and sourceUrls. Keep both if you republish the dataset. etalab.gouv.fr/licence-ouverte-open-licence.
How fresh is it? SIRENE lookup follows the government search API, which is the live register rather than a monthly file. BODACC appears when the gazette publishes the announcement, which can be days after the court decision. Revenue and net income are the latest year the API exposes, often the last filed accounts, and many companies have none.
What are the rate limits? SIRENE documents about 7 requests/second per IP. This actor stays at 6 and retries HTTP 429 and 5xx with backoff. BODACC has no published quota; the actor stays at 4 requests/second. Several runs sharing one IP can still trip the SIRENE ceiling.
Is this personal data? The actor returns public company data only: legal entities and the directors the register already publishes. It does not look up private individuals, consumers, or hidden persons. Partial diffusion (statutDiffusion = P) omits many sole traders' details. Directors are still personal data under the GDPR once you store them in your own system. You are the controller for that copy. Do not use the output to profile people beyond the public company role.
Is the insolvency flag a legal opinion? No. procedureCollectiveEnCours reads the latest collective announcement. An opening or conversion counts as ongoing. A clôture or an adopted plan does not. Confirm anything material on the gazette text linked from the row.
Why is a large group coded as a non-employer? The headcount bracket is the legal unit's own INSEE code. A parent SIREN can be NN while the group employs thousands of people in subsidiaries.
Region codes
| Code | Region | Code | Region |
|---|---|---|---|
| 11 | Île-de-France | 75 | Nouvelle-Aquitaine |
| 24 | Centre-Val de Loire | 76 | Occitanie |
| 27 | Bourgogne-Franche-Comté | 84 | Auvergne-Rhône-Alpes |
| 28 | Normandie | 93 | Provence-Alpes-Côte d'Azur |
| 32 | Hauts-de-France | 94 | Corse |
| 44 | Grand Est | 01 | Guadeloupe |
| 52 | Pays de la Loire | 02 | Martinique |
| 53 | Bretagne | 03 | Guyane |
| 04 | La Réunion | 06 | Mayotte |
Department codes use the INSEE list, including 2A, 2B, and 971–976.
Run it locally
Node.js 22 or newer.
npm installnpm start
With no input file, the actor enriches Danone, Capgemini, and Orange. To run the monitor example locally (the state store is created under storage/key_value_stores/):
mkdir -p storage/key_value_stores/defaultcp examples/INPUT.monitor.json storage/key_value_stores/default/INPUT.jsonnpm start
npm testnpm run lintnpm run buildnpm run smoke
The Docker image uses apify/actor-node:22. apify push builds it. See PUBLISHING.md.
Author: Yahya Nouali.
Données d'entreprises françaises : SIREN, SIRET, KYB et alertes BODACC
Acteur de données officielles pour le KYB, le KYC, la prospection et le risque fournisseur. Il interroge uniquement des API publiques de l'État : l'API Recherche d'entreprises (SIRENE / INSEE) et le BODACC (DILA). Aucun moissonnage de Pappers, Societe.com ou Infogreffe. Ce n'est pas un extrait Kbis certifié du greffe ; ce sont les informations d'identité que le répertoire SIRENE publie déjà (SIREN, SIRET, forme juridique, siège, activité, dirigeants lorsqu'ils sont diffusés).
Deux modes :
- enrich (par défaut) : une ligne par société, à partir d'un nom, d'un SIREN/SIRET, ou de filtres (code NAF, département, région, tranche d'effectif).
- monitor : une liste de SIREN. Le premier passage enregistre une référence (
baseline), non facturée. Les passages suivants écrivent une ligne par changement (statut actif ou cessé, adresse du siège, forme juridique, dénomination, code NAF, dirigeants, nouvelle annonce BODACC, procédure collective). Les sociétés inchangées ne coûtent rien.
Sources, sans clé d'API :
- API Recherche d'entreprises (recherche-entreprises.api.gouv.fr). Plafond documenté : environ 7 requêtes par seconde. L'acteur se limite à 6 et réessaie en cas de 429 ou d'erreur serveur.
- BODACC, jeu
annonces-commerciales(bodacc-datadila.opendatasoft.com) : créations, modifications, ventes, radiations, procédures collectives (redressement, liquidation, sauvegarde). Au plus 4 requêtes par seconde.
Les données sont réutilisables sous Licence Ouverte 2.0 / Etalab. Chaque ligne porte la licence et les URL sources. Les libellés NAF et les catégories juridiques viennent de l'INSEE, sous la même licence. La fraîcheur suit l'API SIRENE pour l'identité, et la date de parution au BODACC pour les annonces (souvent quelques jours après la décision). Les comptes sont ceux de la dernière année publiée, parfois absents.
Facturation au résultat : 0,005 USD par société trouvée, 0,002 USD pour l'historique BODACC, 0,015 USD par changement détecté en surveillance. Une recherche sans résultat, un SIREN invalide (clé de Luhn) ou une erreur d'API n'est pas facturé. La première observation d'un SIREN surveillé non plus.
Pour une alerte hebdomadaire : dans la console Apify, créer une planification (Schedules) sur cet acteur, avec le même monitorStoreName à chaque fois (par défaut fce-monitor-state). Expression cron du lundi à 07:00 UTC : 0 7 * * 1.
Intégrations : l'acteur se branche sur Make (Run an Actor + Get Dataset Items), Zapier (Run Actor, déclencheur Finished Actor Run) et n8n (nœud officiel @apify/n8n-nodes-apify), ou par l'API run-sync-get-dataset-items. Les exemples sont dans la section Integrations ci-dessus.
RGPD : seules des données publiques de sociétés sont lues. Les dirigeants diffusés par le registre restent des données personnelles dès que vous les conservez dans votre propre base : vous en êtes responsable. Les personnes en diffusion partielle ne sont pas exposées.
Le drapeau procedureCollectiveEnCours résume la dernière annonce de procédure collective. Une ouverture ou une conversion est traitée comme une procédure en cours ; une clôture ou un plan arrêté ne l'est pas. C'est une aide au criblage, pas une analyse juridique.
Le détail de publication et le JSON de tarification sont dans PUBLISHING.md.