BODACC Scraper - French Insolvencies & Sales avatar

BODACC Scraper - French Insolvencies & Sales

Pricing

from $2.00 / 1,000 legal announcements

Go to Apify Store
BODACC Scraper - French Insolvencies & Sales

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

Tom Awake

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

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.

distressLevelMeaning
1Safeguard — preventive, company still trading
2Recovery or safeguard plan approved
3Receivership opened, or plan resolved
4Liquidation opened, or conversion to liquidation
5Closed 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:

Fieldinsolvenciessalescreationsderegistrations
siren, companyName, court96-100%97-100%100%100%
department, region, publishedAt100%100%100%100%
street / city / postalCode100%89%31%95%
legalForm93%89%31%59%
judgementDate100%
procedureType99%
eventNature, eventDetail100%
distressLevel87%
daysSinceJudgement100%
salePriceEur, salePriceSource86%
sellerName / sellerSiren83 / 79%
capitalAmount / capitalCurrency78%29%49%
activityStartDate77%96%
establishmentType, fundOrigin86%82%
creationCategory100%
registrationDate24%86%
activity100%67%
tradeName11%38%19%
previousOperatorName / Siren5 / 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 openingsOnly on your customer or supplier SIRENs, run it daily, and you see a receivership the week it is pronounced.
  • Debt recovery. distressLevel 4-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\ Judgement
tells you whether a fresh notice describes a fresh event.

Why 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.
  • distressLevel is 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; noticeType and isCorrection say 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 daysSinceJudgement and 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 ApifyClient
client = 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

FAQ

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.