# France Company Check — SIREN, BODACC Insolvency & Accounts (`us0r/france-company-check`) Actor

Check French companies by SIREN, SIRET, VAT number or name. One row per company: SIRENE status, BODACC insolvency (liquidation, redressement, sauvegarde), strike-off, overdue accounts, officers, revenue and net result. Official open APIs, no proxy.

- **URL**: https://apify.com/us0r/france-company-check.md
- **Developed by:** [us0r](https://apify.com/us0r) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 company checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Company Check — SIREN, BODACC Insolvency & Accounts

Give this Actor a list of French companies — by **SIREN, SIRET, VAT number
(`FR…`) or name** — and it returns **one row per entry**, including the ones
that were not found. Every row combines two official open sources:

- the **Recherche d'entreprises API** of the French administration (SIRENE
  from INSEE + the national company register RNE from INPI): name, legal form,
  head office address, NAF industry code, employee range, company size,
  founding and closing date, **officers** (managers, directors, auditors),
  **revenue and net result** of the filed accounts, and labels such as ESS,
  société à mission, Qualiopi or RGE;
- the **BODACC** (Bulletin officiel des annonces civiles et commerciales):
  **collective proceedings** — sauvegarde, redressement judiciaire,
  liquidation judiciaire, recovery and sale plans, closure for insufficient
  assets — **strike-off** from the trade register (RCS) and the **annual
  accounts filed**.

Why both: **SIRENE does not know about insolvency.** A company in liquidation
usually stays "active" in SIRENE until it is finally closed. In a sample of
176 companies SIRENE listed as active (26 October 2026), **18 were in
liquidation, receivership or a sale plan, closed for insufficient assets, or
struck off** according to BODACC. This Actor reads both and puts the most
serious finding into `status`.

No scraping, no proxy, no browser. Roughly 4 companies per second.

Built for supplier and customer onboarding (KYB), credit and collections
teams who need to know whether a French counterparty is still trading, and
periodic re-checks of a customer or supplier book.

### What you get per entry

| Field | Example (KOOKAI) |
|---|---|
| `query`, `queryType` | `Kookai`, `name` (or `siren`, `siret`, `vat`) |
| `found`, `status` | `true`, `liquidation` — see the list below |
| `riskFlags`, `riskDetails` | `["liquidation", "net_loss"]` — liquidation since `2023-11-30`, Tribunal de Commerce de Paris, BODACC link and judgment text |
| `siren`, `siret`, `vatNumber` | `399292994`, `39929299402011` (head office), `FR95399292994` (computed from the SIREN) |
| `name`, `fullName`, `acronym`, `tradeNames` | as registered |
| `legalForm` | `{"code": "5710", "description": "SAS, société par actions simplifiée"}` |
| `address` | one-line address, postal code, city, département, region, coordinates |
| `industry` | NAF code and label, e.g. `47.71Z` |
| `employees`, `companyCategory` | INSEE range with year (2024: none left at 31/12), `PME` (or `ETI`, `GE`) |
| `foundedOn`, `ceasedOn` | `1994-11-30`, closing date if closed |
| `establishments` | number of establishments, total and open |
| `financials`, `financialHistory` | latest year on record: 2022, revenue 35,548,427, net result −17,782,167 (EUR); all years |
| `lastAccounts`, `accountsFilings` | closing date `2022-08-31`, type, published in BODACC `2023-10-04` |
| `annualAccountsOverdue` | `true` / `false` / `null` — see Limits |
| `insolvencyHistory` | the last 10 BODACC judgments: date, judgment, court, link |
| `roles` | officers: name, role, person or company (with SIREN) |
| `labels`, `collectiveAgreements` | `["social_economy_ess", "qualiopi", …]`, IDCC codes |
| `establishment` | when you passed a SIRET: that establishment, open or closed |
| `nameMatch`, `matchRank` | for name queries: `exact` · `exact_without_legal_form` · `all_words` |
| `note`, `warnings`, `checkedAt`, `error` | plain-language explanations; error text for rows that could not be checked |

#### Status and risk flags

| Flag | Meaning |
|---|---|
| `ceased` | closed in SIRENE (`on`) |
| `struck_off` | struck off the trade register (RCS) per BODACC — SIRENE may still say active |
| `liquidation` | liquidation judiciaire opened or pronounced |
| `closed_insufficient_assets` | proceedings closed for insufficient assets (the company is finished) |
| `receivership` | redressement judiciaire opened (or a plan was cancelled) |
| `safeguard` | procédure de sauvegarde (incl. accelerated safeguard) opened |
| `sale_plan` | court-approved sale of the business (plan de cession) |
| `recovery_plan` | plan de redressement adopted — the company continues under a court plan |
| `safeguard_plan` | plan de sauvegarde adopted |
| `professional_recovery` | rétablissement professionnel (debt relief for sole traders) |
| `past_insolvency_proceedings` | an earlier procedure has ended (debts paid or procedure closed) |
| `net_loss` | net result below zero in the latest year on record |
| `annual_accounts_overdue` | a commercial company whose last published accounts are more than 26 months old |
| `registered_last_12_months` | founded less than a year ago |

`status` is the most serious finding, in the order ceased → struck off →
liquidation → closed for insufficient assets → receivership → safeguard →
sale plan → recovery plan → safeguard plan → professional recovery → active.

### Input

```json
{
  "companies": [
    "552032534",
    "FR 09 855 200 887",
    "552 032 534 00646",
    "Kookai",
    "Boulangerie Martin, 75011"
  ],
  "maxMatchesPerName": 1,
  "checkBodacc": true,
  "includeOfficers": true
}
```

| Option | Default | Meaning |
|---|---|---|
| `companies` | — | SIREN, SIRET, VAT numbers or names; also `{"siren": …}`, `{"siret": …}`, `{"vatNumber": …}` or `{"name": …, "postalCode": …}` |
| `maxMatchesPerName` | `1` | Rows per name query, best match first (1–10) |
| `checkBodacc` | `true` | Insolvency proceedings, strike-off and filed accounts from BODACC |
| `includeOfficers` | `true` | Managers, directors, auditors — names and roles |
| `includeRawRecord` | `false` | The untouched register record under `raw`, in French |
| `pauseSeconds` | `0` | Extra delay before each request |

`552032534`, `552 032 534` and `FR 27 552 032 534` all work. **Check digits
are validated before querying** (Luhn for SIREN and SIRET, the VAT key for
`FR…` numbers) — a mistyped number comes back as a row with `error`, not as a
false "not found". A SIRET returns the company plus that establishment, even
if the establishment is closed. Duplicates in your list are checked once.

**Name queries are matched strictly.** The register's search is fuzzy —
"danone" also returns people called Danon — and namesakes are common in
France (330 companies for "Boulangerie Martin"). This Actor only accepts a
company whose registered name contains every word of your query, ranks exact
names first and active before closed, and says in `note` when several
companies match equally well. Add a postal code (`"Boulangerie Martin,
75011"`) or use the SIREN to be sure.

### Speed

Measured 26 October 2026: **180 companies in 49 seconds**, 188 requests,
including BODACC. One request per company to the register (it allows 7 per
second; the Actor stays just below), plus one BODACC request per 50
companies.

### Limits, honestly

- **Revenue and net result only.** The open API carries those two figures
  for companies whose accounts are public; balance sheets are not included.
  Many small companies file their accounts confidentially — then
  `financials` stays empty.
- **`annual_accounts_overdue` is a heuristic**: SNC, SARL, SA, SAS, SCA and
  cooperatives older than 30 months whose most recent accounts published in
  BODACC have a closing date more than 26 months ago. BODACC often publishes a
  filing 10–12 months after the closing date, which is why the margin is
  wide. Companies with no filing in BODACC at all get `null`, not `true`.
- **BODACC covers commercial courts since 2008.** A procedure from before
  2008, or one handled outside the commercial register, may not appear.
- **The VAT number is computed from the SIREN** with the official key
  formula. Whether it is active for intra-EU trade is not checked (the VIES
  service is too unreliable for list checks).
- **Officers carry names and roles only.** The register publishes the birth
  month as well; this Actor leaves it out.
- **Companies that opted out of public disclosure** (mostly sole traders)
  come back with the fields the register is allowed to show.
- **This is not a credit report.** It states what the official registers say
  on the day you ask.

### Personal data

Names of officers and of sole traders are published by INSEE, INPI and the
DILA as open data. If you store them, you are the controller for that copy —
keep only what your purpose needs.

### Pricing

Pay per event:

| Event | What it covers |
|---|---|
| `actor-start` | once per run |
| `company-check` | one company row — including "not found" |

**Rows with an `error` are free**: a wrong check digit or a register that
did not answer is never billed. BODACC, officers and revenue are included in
the company price. A spending limit you set on the run is respected — the run
stops cleanly when it is reached.

### En français

**Vérifiez des entreprises françaises en masse.** Collez une liste de SIREN,
SIRET, numéros de TVA intracommunautaire ou raisons sociales. L'Actor
contrôle la clé (Luhn, clé TVA) et renvoie une ligne par entrée, même quand
l'entreprise est introuvable :

- **statut** — active, cessée, radiée du RCS, et surtout les **procédures
  collectives publiées au BODACC** : sauvegarde, redressement judiciaire,
  liquidation judiciaire, plan de redressement, plan de cession, clôture pour
  insuffisance d'actif — avec date du jugement, tribunal et lien BODACC ;
- **dépôt des comptes** — date de clôture des derniers comptes publiés et
  alerte « comptes non déposés » ;
- **dirigeants** (sans date de naissance), **chiffre d'affaires et résultat
  net**, forme juridique, code NAF, tranche d'effectif, adresse du siège ;
- recherche par nom stricte, avec code postal pour départager les homonymes.

Données issues uniquement de l'API Recherche d'entreprises et du BODACC —
sans proxy ni scraping. Les lignes en erreur (clé invalide) sont gratuites.

### Source and licence

Data from the API Recherche d'entreprises (DINUM, from SIRENE/INSEE and
RNE/INPI) and from BODACC (DILA), published under the Licence Ouverte /
Open Licence 2.0 (Etalab). NAF and legal-form labels from the INSEE
nomenclatures.

### Related Actors

- **[UK Company Check](https://apify.com/us0r/uk-company-check)** — the
  same list check for UK companies: Companies House status, strike-off notices,
  insolvency cases, charges, directors, PSCs and balance sheet figures.
- **[Poland Company Check](https://apify.com/us0r/poland-company-check)** — the
  same list check for Polish companies: KRS court register and VAT white list,
  with bank account verification.
- **[Norway Company Check](https://apify.com/us0r/norway-company-check)** — the
  same list check for Norwegian companies: Brønnøysund registers, bankruptcy and
  forced dissolution, roles and three years of accounts.
- **[Finland Company Check](https://apify.com/us0r/finland-company-check)** — the
  same list check for Finnish companies: PRH/YTJ status, registered loss of
  share capital, tax registers and digital financial statements.
- **[German Insolvency & Bankruptcy Check](https://apify.com/us0r/insolvenz-check-de)**
  — a list of names against the official German insolvency register, one row
  per name, found or not.

***

Keywords: SIREN, SIRET, numéro SIREN, vérification SIREN, SIRENE, INSEE, RNE,
INPI, BODACC, procédure collective, liquidation judiciaire, redressement
judiciaire, sauvegarde, plan de cession, clôture pour insuffisance d'actif,
radiation RCS, dépôt des comptes, comptes annuels, chiffre d'affaires,
résultat net, dirigeants, numéro de TVA intracommunautaire, French VAT number,
France company check, French company register, France business registry,
France company search, France KYB, KYC France, due diligence France, supplier
verification France, counterparty check, French insolvency check, French
bankruptcy check, annuaire des entreprises, recherche entreprises API,
company verification API.

# Actor input Schema

## `companies` (type: `array`):

One entry per company: a 9-digit SIREN ("552032534", "552 032 534"), a 14-digit SIRET of an establishment, a French VAT number ("FR 09 855 200 887") or a company name ("Kookai"). Add a postal code to a name to narrow down namesakes: "Boulangerie Martin, 75011". Numbers are validated by check digit before querying. Names are matched only if every word of your name appears in the registered name.

## `maxMatchesPerName` (type: `integer`):

For entries given as a name: how many matching companies to return, best match first (exact names first, active before closed). Every returned company is one row. SIREN, SIRET and VAT numbers always return exactly one row.

## `checkBodacc` (type: `boolean`):

Looks up every company in the official BODACC gazette: collective proceedings (sauvegarde, redressement judiciaire, liquidation judiciaire, plans, closure), strike-off from the trade register and filed annual accounts. SIRENE alone does not show insolvency — leave this on.

## `includeOfficers` (type: `boolean`):

Managers, directors, chair and statutory auditors as registered (name and role; birth dates are left out).

## `includeRawRecord` (type: `boolean`):

Adds the untouched JSON record from the Recherche d'entreprises API under 'raw' — every field, in French.

## `pauseSeconds` (type: `number`):

The Actor already stays below the register's limit of 7 requests per second. Raise this only if you share an IP with other heavy users.

## Actor input object example

```json
{
  "companies": [
    "552032534",
    "FR 09 855 200 887",
    "Kookai"
  ],
  "maxMatchesPerName": 1,
  "checkBodacc": true,
  "includeOfficers": true,
  "includeRawRecord": false,
  "pauseSeconds": 0
}
```

# Actor output Schema

## `companies` (type: `string`):

One row per entry checked, including the ones not found or rejected for a wrong check digit.

## `risk` (type: `string`):

Status, risk flags, BODACC insolvency history and filed accounts.

## `financials` (type: `string`):

Revenue and net result per year and the last accounts filed.

# 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 = {
    "companies": [
        "552032534",
        "FR 09 855 200 887",
        "Kookai"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("us0r/france-company-check").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 = { "companies": [
        "552032534",
        "FR 09 855 200 887",
        "Kookai",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("us0r/france-company-check").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 '{
  "companies": [
    "552032534",
    "FR 09 855 200 887",
    "Kookai"
  ]
}' |
apify call us0r/france-company-check --silent --output-dataset

```

## MCP server setup

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

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/GFVvt8SEBbrY02ndz/builds/3GFssysbNspHHOYBH/openapi.json
