BODACC Scraper - French Insolvencies & Sales
Pricing
from $2.00 / 1,000 legal announcements
BODACC Scraper - French Insolvencies & Sales
Scrape BODACC French legal announcements as clean rows: insolvency proceedings with a normalized distress level, business sales with the price extracted from free text, and new company registrations with SIREN. Filter by event type, département and date. No API key.
Pricing
from $2.00 / 1,000 legal announcements
Rating
0.0
(0)
Developer
Tom Awake
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
What does BODACC Scraper do?
Every French legal announcement — insolvencies, business sales, company creations — as usable rows instead of nested JSON.
French companies are legally required to publish their significant events in the BODACC: a court opens a receivership, a business changes hands, a company registers. 50.6 million announcements. It is the official record behind every French credit-risk score and every "company in difficulty" alert.
It is published in a shape nobody can use: six nested JSON objects per row
(listepersonnes, jugement, acte, listeetablissements,
listeprecedentproprietaire, depot), free-text legal wording, and an API
that refuses to paginate past 10,000 results.
No API key. No account.
The four things this does that the source does not
1. It extracts the transaction price.
The price of a business sale exists nowhere as a field. It is written out in a sentence: "établissement principal acquis par achat au prix stipulé de 80000.00 euros". Parsed from free text on 85.5% of sales notices (measured on 800 recent notices). Against 891k sale notices, that is on the order of 760,000 priced transactions — a comparables set for valuing French businesses that does not otherwise exist in structured form.
Median price in the sample: €93,000. Largest: €79.7M.
The seller is recovered too, from a different nested object: name on 94% of priced notices, SIREN on 90%. So each row is a transaction with two identified counterparties.
2. It puts insolvencies on an ordered scale.
The source says "Jugement de conversion en liquidation judiciaire". An analyst needs to know where the company sits and which way it is moving.
distressLevel | Meaning |
|---|---|
| 1 | Safeguard — preventive, company still trading |
| 2 | Recovery or safeguard plan approved |
| 3 | Receivership opened, or plan resolved |
| 4 | Liquidation opened, or conversion to liquidation |
| 5 | Closed for insufficient assets; personal bankruptcy; director ban |
Plus procedureType, isProcedureOpening and isProcedureClosure — an
opening is a credit event, a closure is an epilogue, and they should never
be counted together.
Measured on 500 recent insolvency notices: Liquidation 342, Receivership 64, Sanctions 15, Safeguard 10.
Procedural filings — filing of the list of claims, filing of the
distribution plan — are labelled Procedural filing and deliberately
carry no distress level. They are administrative steps, not changes of
state, and giving them a level would invent a deterioration that did not
happen. They are 8.6% of insolvency notices, and openingsOnly removes
them.
3. It computes the delay between judgement and publication.
Median 9 days — but up to 1,052 days observed. A notice published
today can concern a judgement from three years ago. Without
daysToPublication, every monitoring system built on this source will
eventually report an old judgement as today's news.
4. It gets past the 10,000-row ceiling.
The public records API refuses offset + limit > 10,000, while a single
department holds 1.3 million notices. This Actor uses the export endpoint,
which does not have that limit, and always sorts by publication date —
without an explicit sort the API returns an arbitrary sample whose first
row was dated January 2025 rather than today.
Field coverage
eventType decides which columns fill. The BODACC publishes seven
different kinds of notice, and each carries its own information: a sale
price exists only on a sale, share capital only where the registry
restates it, a court ruling only on an insolvency. This is not missing
data — it is a different kind of announcement.
Measured 17 September 2026 on 150 notices of each type:
| Field | insolvencies | sales | creations | deregistrations |
|---|---|---|---|---|
siren, companyName, court | 96-100% | 97-100% | 100% | 100% |
department, region, publishedAt | 100% | 100% | 100% | 100% |
street / city / postalCode | 100% | 89% | 31% | 95% |
legalForm | 93% | 89% | 31% | 59% |
judgementDate | 100% | — | — | — |
procedureType | 99% | — | — | — |
eventNature, eventDetail | 100% | — | — | — |
distressLevel | 87% | — | — | — |
daysSinceJudgement | 100% | — | — | — |
salePriceEur, salePriceSource | — | 86% | — | — |
sellerName / sellerSiren | — | 83 / 79% | — | — |
capitalAmount / capitalCurrency | — | 78% | 29% | 49% |
activityStartDate | — | 77% | 96% | — |
establishmentType, fundOrigin | — | 86% | 82% | — |
creationCategory | — | — | 100% | — |
registrationDate | — | 24% | 86% | — |
activity | 100% | — | — | 67% |
tradeName | — | 11% | 38% | 19% |
previousOperatorName / Siren | — | 5 / 4% | — | — |
A dash means the field is structurally absent for that notice type, not that the extraction failed.
previousOperatorName is thin even on sales (5%): the outgoing operator
is named only when the registry chose to restate it.
There is no country column. Measured across 240 notices of all four
types, the BODACC publishes no country in its address blocks — only
numeroVoie, typeVoie, nomVoie, complGeographique, codePostal,
ville and localite. Hard-coding FR would be a constant carrying no
information, since this is by definition the bulletin of the French
commercial registries.
Companies and sole traders land in the same columns: personType says
which, and an individual's name is assembled into companyName rather
than left in separate fields.
What it is for
- Credit risk. Filter
openingsOnlyon your customer or supplier SIRENs, run it daily, and you see a receivership the week it is pronounced. - Debt recovery.
distressLevel4-5 tells you whether a claim is still worth pursuing. - M&A and valuation. 760k priced transactions with buyer, seller, activity and location. Comparables by sector and region.
- B2B prospecting. Company creations, the day they register, with address, capital, activity and SIREN.
- Competitive monitoring. Track a competitor's SIREN for every legal event it publishes.
Four dataset views ship with the Actor: Notices, Insolvencies, Transactions and New companies.
Running this as a scheduled watch
Insolvency notices are a credit-risk signal, and their value decays fast: learning in March that a customer entered receivership in January is learning too late.
{"eventType": "insolvencies","openingsOnly": true,"publishedWithinDays": 7,"maxItems": 500}
Note the gap this Actor measures: the median delay between a court ruling and its publication is 9 days, but reaches 839.
daysSince\ JudgementWhy not a fixed publishedFrom date? A schedule replays the same
input every time. A fixed date returns the same notices at every run and
charges for them again.
Limits
Stated plainly, because they affect what you can conclude.
- 20,000 rows per run. The export endpoint gets past the API's 10,000 ceiling but is not unlimited. For a full historical extraction, split the work by date range.
- Price extraction is a text parse, not a field. 85.5% coverage means 14.5% of sales carry no extractable price — often because there is genuinely none published (transfers by contribution, mergers, free-text notices). The monetary suffix is required deliberately: relaxing it would catch a few more, and would also read "Au capital de : 1 000 000,00" as a sale price. A missing price is honest; a wrong one corrupts the analysis.
- One-euro sales are kept. They are real — the symbolic takeover of an indebted company — and they are 2% of priced notices. Treat them as transfers of liability, not as valuations.
distressLevelis our normalisation, not an official scale. It maps French judgement wording onto an ordered scale so rows can be sorted and compared. 5% of insolvency notices are not classified at all, mostly "Autre jugement et ordonnance", which the source itself leaves undetermined. We leave them empty rather than guess.- Corrections are marked, not merged. A notice can be a correction or a
cancellation of an earlier one;
noticeTypeandisCorrectionsay so. Reconciling a correction with its original is left to you, because the source does not reliably link them. - A published event is not a current state. BODACC records events. A
company with a receivership notice from 2023 may have recovered since.
Use
daysSinceJudgementand do not read a single notice as a status. - Sole traders are natural persons. Their names appear because French law requires these announcements to be public. Their presence here carries the obligations that come with processing personal data.
How much does it cost?
You pay per legal announcement returned: $0.003 each, that is $3.00 per 1,000. There is no start fee, and subscription plans pay less per legal announcement.
The example input below asks for up to 500 legal announcements, so it costs $1.50 at most.
If a run reaches the spending limit you set, the output stops at that limit and never goes past it. You are never charged for rows that were not delivered.
Use BODACC Scraper as an API
Call it from your own code with the Apify client, here in Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("DataIO/bodacc-french-insolvencies-sales").call(run_input={'eventType': 'insolvencies','openingsOnly': True,'maxItems': 500,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
It also works from JavaScript, Make, Zapier, n8n, and from AI agents through the Apify MCP server.
Other actors you might like
- GLEIF LEI Lookup: Legal Entity Identifier API
- SEC XBRL Screener: Company Financials Data
- IRS 990 Scraper: Nonprofit Financials & Revenue
FAQ
Is it legal to use this data?
The actor reads public data from its official source, without logging in and without bypassing any access control. What you do with the data, for example contacting people listed in it, is your responsibility under the laws that apply to you, such as GDPR in Europe.
Can I run it on a schedule?
Yes. See Running this as a scheduled watch above: use the rolling-window setting so each run returns only what is new.
Can AI agents use it?
Yes. It is available through the Apify MCP server, and every input field is described in its input schema, so an agent can call it directly.
Source
BODACC (Bulletin officiel des annonces civiles et commerciales), published by the DILA and distributed as open data through opendatasoft. Public, no authentication. Licence Ouverte / Open Licence. This Actor is not affiliated with the DILA.