# France Insolvency Check (BODACC Procédures collectives) (`regdata/france-insolvency-scraper`) Actor

Check French companies and sole traders for insolvency proceedings in BODACC by SIREN, SIRET or name: liquidation judiciaire, redressement, sauvegarde, plans and closures, with court, case number and judgment date. No API key needed.

- **URL**: https://apify.com/regdata/france-insolvency-scraper.md
- **Developed by:** [getregdata](https://apify.com/regdata) (community)
- **Categories:** Lead generation, Automation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 insolvency judgments

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## France Insolvency Check (BODACC Procédures collectives)

Check French companies and sole traders against **BODACC "Procédures collectives"** - the official bulletin where French commercial and judicial courts publish every insolvency judgment - by **SIREN, SIRET or name**. Get clean structured JSON for each judgment: what the court decided (liquidation judiciaire, redressement judiciaire, sauvegarde, plan, closure), the judgment date, the court, the debtor's SIREN, legal form and seat, and a link to the official notice.

**No login, no API key, nothing to configure** - just send a SIREN.

A collective proceeding is the strongest negative signal on a French counterparty. Checking for one is a standard step in KYB/KYC onboarding, supplier and customer credit checks, debt collection and counterparty monitoring.

### What data do you get?

One record per insolvency judgment, newest first:

```json
{
  "matchedQuery": "345086177",
  "publicationDate": "2021-04-25",
  "caseNumber": null,
  "court": "Tribunal de Commerce de Lille Métropole",
  "debtorName": "CAMAIEU INTERNATIONAL",
  "debtorType": "company",
  "siren": "345086177",
  "legalForm": "Société par actions simplifiée",
  "seat": "59100 Roubaix",
  "eventType": "bankruptcy_opened",
  "judgmentNature": "Jugement de conversion en liquidation judiciaire",
  "judgmentDate": "2021-04-14",
  "judgmentText": "Jugement de conversion en liquidation judiciaire désignant liquidateur ...",
  "noticeId": "A202100812603",
  "isCorrection": false,
  "correctsNoticeId": null,
  "sourceUrl": "https://www.bodacc.fr/pages/annonces-commerciales-detail/?q.id=id:A202100812603",
  "source": "BODACC (DILA), Licence Ouverte 2.0",
  "retrievedAt": "2026-10-31T00:00:00.000Z"
}
```

`eventType` sorts every judgment into one of five values, so you can filter without reading French:

| eventType | Meaning |
|---|---|
| `bankruptcy_opened` | Liquidation judiciaire opened, or a proceeding converted into liquidation |
| `restructuring_opened` | Redressement judiciaire or sauvegarde opened |
| `plan_confirmed` | Court approved a continuation, restructuring or sale plan |
| `proceeding_closed` | Proceeding closed (for example for lack of assets) |
| `other` | Any other judgment in the proceeding (plan changes, new payment-stop date, orders) |

`judgmentNature` and `judgmentText` keep the original French wording. `caseNumber` (N° RG) is filled only when the court published it in the notice, which is uncommon. `debtorType` is `company` or `individual` (sole traders - entrepreneurs individuels, commerçants, artisans).

| Field | Description |
|---|---|
| `matchedQuery` | The SIREN or name from your input that found this judgment |
| `publicationDate` | Date BODACC published the notice (YYYY-MM-DD) |
| `judgmentDate` | Date of the court judgment (YYYY-MM-DD; older notices may give it as French text) |
| `eventType` | One of five standard values (see the table above) |
| `judgmentNature` | The judgment as BODACC names it, in French |
| `judgmentText` | The judgment wording as published, in French |
| `court` | The court that gave the judgment |
| `caseNumber` | Court case number (N° RG), when published |
| `debtorName` | Company or trader name |
| `debtorType` | `company` or `individual` |
| `siren` | 9-digit SIREN of the debtor |
| `legalForm` | Legal form (for example Société par actions simplifiée) |
| `seat` | Postal code and town of the registered office |
| `noticeId` | BODACC notice id |
| `isCorrection` / `correctsNoticeId` | The notice corrects an earlier one, and which |
| `sourceUrl` | Link to the official notice on bodacc.fr |
| `source` | Source and licence |

**What is left out, on purpose:**

- Procedural filings inside an existing proceeding (claims lists, distribution plans) - they are not judgments.
- Sanctions against company directors (management bans, personal bankruptcy) - they concern a person, not the business.
- Cancelled notices. A corrected notice (avis rectificatif) replaces the one it corrects and is marked `isCorrection: true`.

### How much does it cost?

**Pay per check and per judgment.** You pay a small fee for each SIREN or name that BODACC answers - a "no proceeding found" answer included, because that is the answer you ran the check for - and a small fee for each judgment returned. A clean watchlist costs only the per-check fee. An invalid SIREN, or a check BODACC did not answer, is **not charged**. Set a **maximum cost per run** in the run options to cap your spend: the run stops at that limit and lists any entries it did not reach as UNKNOWN, never as clear. See the **Pricing** tab for current figures.

### How do I use it?

Check one company by SIREN (the most precise check):

```json
{ "siren": ["345086177"] }
```

Check by name (word search on the debtor name, 20 newest judgments by default):

```json
{ "name": "Camaieu", "exactMatch": false }
```

**Monitor a watchlist** - up to 100 SIRENs, SIRETs and names mixed, ideal on a daily or weekly schedule:

```json
{ "watchlist": ["345086177", "552 100 554", "Exemple Distribution SAS"] }
```

Only want recent judgments? Add `"dateFrom": "2026-01-01"`.

### Input options

| Field | Type | Description |
|---|---|---|
| `siren` | array | SIREN (9 digits) or SIRET (14 digits). Spaces allowed. Check digit verified. |
| `name` | string | Company or trader name. Ignored when `watchlist` is set. |
| `watchlist` | array | Up to 100 entries, names and numbers mixed. |
| `exactMatch` | boolean | Keep only debtors whose name equals the query (case, accents and punctuation ignored). |
| `dateFrom` / `dateTo` | string | Publication date window, `YYYY-MM-DD`. Empty = full history. |
| `maxResults` | integer | Most judgments per SIREN or name. Default 100 per SIREN, 20 per name. |

### How to read the result

- **Rows for a SIREN** - the company has been through (or is in) a collective proceeding. Read `eventType` from newest to oldest to see where it stands: a `proceeding_closed` after a `bankruptcy_opened` usually means the company was liquidated and struck off.
- **No rows for a SIREN** - BODACC holds no insolvency judgment for it in the searched window. The run's status message says so explicitly.
- **"Not checked"** - BODACC did not answer for that entry. It is reported as UNKNOWN, not clear, and was not charged. Re-run it.
- **"More judgments than maxResults"** - common for broad names. The newest judgments are returned; use the SIREN or a date range for a complete answer.

Each run also writes an `OUTCOME` record to the key-value store with a machine-readable result for every entry (`results`, `no_match`, `not_checked`, `invalid_input`, and `complete: false` when a result was capped).

### Coverage

BODACC "Procédures collectives" from **January 2008** to today, for all French courts (tribunaux de commerce, tribunaux judiciaires and the Alsace-Moselle courts). New notices appear as BODACC publishes them, usually one to two weeks after the judgment. Proceedings published before 2008 are not covered, so a "no proceeding found" says nothing about earlier years.

### Limitations

- Coverage starts in January 2008: proceedings published earlier are not in BODACC's open data.
- The court case number (N° RG) is published in only a small share of notices.
- Name search matches words, not the exact company: check by SIREN for a precise answer.
- Personal debt-relief cases (surendettement) and inheritance notices are not part of BODACC "Procédures collectives".
- A judgment appears once BODACC publishes it, usually one to two weeks after the court decision.

### Where does the data come from, and can I use it?

All data comes from **BODACC** (Bulletin officiel des annonces civiles et commerciales), published by **DILA** (Direction de l'information légale et administrative) as open data under the **Licence Ouverte 2.0**. Every row carries the source, the licence and a link to the official notice. If you republish the data, cite "BODACC (DILA)" and the date of the data.

Notices about sole traders contain personal data. Use it for a legitimate purpose (KYB, credit risk, counterparty due diligence) and in line with the GDPR - for example, do not keep it longer than you need it. This is not a consumer credit report.

### Other insolvency registers

The same kind of check exists for other countries:

- [Germany Insolvency Register Search](https://apify.com/regdata/germany-insolvency-scraper?fpr=getregdata)
- [Austria Insolvency & Court Publications](https://apify.com/regdata/austria-ediktsdatei-scraper?fpr=getregdata)
- [Czech ISIR Insolvency Register Search](https://apify.com/regdata/czech-isir-insolvency-scraper?fpr=getregdata)
- [Spain Registro Público Concursal Search](https://apify.com/regdata/spain-concursal-scraper?fpr=getregdata)
- [Poland KRZ National Debtor Registry](https://apify.com/regdata/krz-debtor-scraper?fpr=getregdata)

### FAQ

**Can I check a sole trader?** Yes. Use their SIREN, or their surname as a name query. Individuals appear with `debtorType: "individual"`.

**Does a closed proceeding mean the company is fine?** Not necessarily. A `proceeding_closed` after a liquidation usually means the company no longer exists. After a plan, it usually means the plan was completed. Read the full sequence of judgments.

**Why did my name search return unrelated companies?** Name search matches words, so "Martin" matches every debtor with that word in their name. Turn on `exactMatch`, or better, check by SIREN.

# Actor input Schema

## `siren` (type: `array`):

French company identifiers to check: SIREN (9 digits) or SIRET (14 digits, reduced to its SIREN). Spaces are fine. The most precise check - use it whenever you have the number.

## `name` (type: `string`):

A company name or a sole trader's name, matched as a word search on the debtor name in BODACC. Ignored when a watchlist is set.

## `watchlist` (type: `array`):

Up to 100 entries to check in one run - names, SIRENs and SIRETs can be mixed (a 9- or 14-digit entry is treated as an identifier). Overrides the single name field. Schedule it to re-check your counterparties.

## `exactMatch` (type: `boolean`):

Off (default): every debtor whose name contains the words. On: only debtors whose name equals the query, ignoring case, accents and punctuation. No effect on SIREN checks.

## `dateFrom` (type: `string`):

Optional start of the publication-date window (YYYY-MM-DD). Leave empty to search the full BODACC history (online from 2008).

## `dateTo` (type: `string`):

Optional end of the publication-date window (YYYY-MM-DD).

## `maxResults` (type: `integer`):

The most judgments returned for one SIREN or name, newest first. Leave empty for the defaults: 100 per SIREN, 20 per name (a broad name such as "Martin" matches thousands of unrelated debtors).

## Actor input object example

```json
{
  "siren": [
    "345086177"
  ],
  "exactMatch": false
}
```

# Actor output Schema

## `judgments` (type: `string`):

Insolvency judgment records in the default dataset.

## `outcome` (type: `string`):

Per-query outcome (results, no_match, not_checked, invalid_input).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "siren": [
        "345086177"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("regdata/france-insolvency-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "siren": ["345086177"] }

# Run the Actor and wait for it to finish
run = client.actor("regdata/france-insolvency-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "siren": [
    "345086177"
  ]
}' |
apify call regdata/france-insolvency-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,regdata/france-insolvency-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lq9ccc7Y2awtehXFH/builds/DYPh52A0pkd6HuCVQ/openapi.json
