BODACC Commercial Announcements Scraper (France)
Pricing
from $1.60 / 1,000 notice delivereds
BODACC Commercial Announcements Scraper (France)
Structured French BODACC announcements as JSON: company, family, court, department and publication date, with family/department/date filters and a company watchlist monitor. For KYB, supplier vetting and liquidation judiciaire alerts. Official DILA open data, legal entities only.
Pricing
from $1.60 / 1,000 notice delivereds
Rating
0.0
(0)
Developer
Steadfetch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
steadfetch/bodacc-monitor
French BODACC commercial announcements as structured JSON, plus a monitor that delivers only new notices for the companies or departments you watch.
What it does
BODACC (Bulletin officiel des annonces civiles et commerciales) is the official French register of commercial announcements: company creations, filings, insolvency proceedings, business sales, changes and deregistrations. The public Opendatasoft dataset holds more than 51 million records with no saved filters, no alerts and no ready-made monitor.
This Actor turns it into a product:
- one structured row per announcement: company, family, notice type, court, city, postal code, department, publication date and the official notice URL;
- filters by notice family, French department and publication date window;
- free-text search over the notice;
- monitor mode: watch a company name (and optionally a department or family) and receive only notices never delivered before, deduplicated by the official notice id.
Public official data only: no login, no CAPTCHA, no paywall. Source: DILA - BODACC, licence Etalab 2.0 (retrieved 2026-10-25).
Legal entities only (privacy)
BODACC also publishes sole traders (personnes physiques), whose notices carry
personal names. This Actor delivers legal entities only: a record is
emitted only when its listepersonnes payload proves typePersonne: "pm" for
every person in the notice and its commercant name carries no sole-trader
marker. DILA sometimes labels an entreprise individuelle (EI) as pm, so a
civil title (Monsieur, Madame, Mme, Mlle) or a trailing EI / E.I.
also excludes the row. Sole-trader rows and rows without that proof are
excluded before validation, never reach the dataset and are never charged. No
personal-name field exists in the output schema.
Residual risk: a sole trader published by DILA with a pm label, no civil
title and no EI marker in commercant would pass. The rule is deterministic
and tested against the captured rows; it does not guess at names.
Example output
{"url": "https://bodacc-datadila.opendatasoft.com/api/v2/catalog/datasets/annonces-commerciales/records?limit=100&offset=0&order_by=dateparution+desc","scrapedAt": "2026-10-25T20:00:00.000Z","noticeId": "A20260205241","company": "ESPACE AUTOMATISMES","noticeFamily": "Ventes et cessions","noticeType": "Avis initial","court": "Greffe du Tribunal de Commerce de Saintes","city": "Cozes","postalCode": "17120","department": "Charente-Maritime","publicationDate": "2026-10-25","sourceUrl": "https://www.bodacc.fr/pages/annonces-commerciales-detail/?q.id=id:A20260205241"}
Input
| Field | Type | Meaning |
|---|---|---|
mode | search or monitor | Search once, or check a watchlist. |
fulltext | string | Free-text search (company, activity, keyword). |
noticeFamily | string | Exact BODACC family, e.g. Ventes et cessions, Modifications diverses, Radiations, Immatriculations. The Store form lists every family label (some keep their French accents). Empty means all families. |
department | string | French department code (06, 31, 2A, 971) or official name (Alpes-Maritimes). |
dateFrom, dateTo | YYYY-MM-DD | Publication date window. Empty means no bound. |
watchlist | array | Monitor mode: { "keyword": "KAOLY", "department": "06", "noticeFamily": "Ventes et cessions" }. keyword is required; the other two fall back to the top-level values. One check is billed per watchlist item per run. |
maxRows | integer | 1-1,000. Output cap; in monitor mode it also caps how many new notices are delivered per run. |
strictSchema | boolean | Keep enabled: every row is validated against the output schema. |
Monitor mode
Each watch item searches the company name (commercant, case-insensitive
contains; * is not allowed in the keyword), optionally narrowed by department
and family. The Actor stores the delivered notice ids in its named key-value
store and emits only ids never seen before. New notices beyond maxRows stay
unseen and are delivered on a later run.
Pricing
Pay per event, no subscription:
- 2.00 USD per 1,000 results (notices delivered) - charged by the platform
through
apify-default-dataset-item, the only per-result charge. Rows rejected by the output schema, sole-trader rows and quiet monitor checks are never charged. - 0.05 USD per 1,000 checks (watchlist items) - charged through the reserved
monitor-checkevent once per watchlist item actually checked in a monitor run. Search runs never charge this event. A check with no new notice still costs the check only. - 0.00005 USD per run start - the Apify-recommended
apify-actor-startprice, which also includes the first 5 seconds of compute.
On the Apify free plan (5 USD monthly credit) that is about 2,500 delivered notices at 2.00 USD per 1,000 results, before the per-check charge.
Measured cost: the official JSON API needs no proxy and no browser. One request returns 100 records, so a 1,000-notice run is 11 requests; the Actor runs at 256 MB and finishes in a few seconds locally, i.e. about 0.0001 USD per 1,000 notices of platform compute. Margin against the 2.00 USD price is positive.
FAQ
Is this scraping? No browser and no HTML scraping: it reads the official public Opendatasoft API published by DILA, under the Etalab 2.0 licence. Each row keeps the public bodacc.fr notice URL for attribution.
Why are some notices missing? Notices about sole traders (personnes
physiques), including entreprises individuelles that DILA labels pm, are
excluded on purpose (privacy). They are dropped before validation, so they
never reach the dataset or the bill.
How do I monitor insolvency proceedings in one department? Set
mode: "monitor", department: "06" and noticeFamily to the insolvency
family label shown in the Store form, then add the companies you watch. Use a
maxRows large enough for a day of new notices.
Can I get every notice ever published? The API caps a single query at
10,000 records (offset + limit). Use date windows to page through history;
maxRows caps each run at 1,000 delivered rows.
Which departments use a code? Metropolitan departments use two digits
(06, 31), Corsica uses 2A/2B and overseas departments use three digits
(971). An official name also works.
Maintenance
Tested daily by Steadfetch. The source is the official DILA Opendatasoft API
(no HTML layout to break). If the dataset schema or the API changes, the
schema validation and the daily QA run fail loudly; the Actor is fixed before
new features. Only bodacc-datadila.opendatasoft.com is requested; the
sourceUrl field is returned, never crawled.