# French Company KYC 🇫🇷: SIRENE, SIREN/SIRET, Officers & BODACC (`tagadanar/french-company-kyc`) Actor

Enrich any French company from official SIRENE, RNE/INPI and BODACC data. A Pappers alternative with insolvency red flags, pay per company found, no subscription.

- **URL**: https://apify.com/tagadanar/french-company-kyc.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** Lead generation, AI, Automation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 company enricheds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## French Company KYC: SIRENE, SIREN/SIRET, Officers & BODACC

**Verify a French company (vérifier une entreprise) in one call: turn a name, SIREN or SIRET into a complete, structured KYC profile, straight from official French government sources.** It's a **Pappers alternative** with no subscription: you pay per company, and insolvency red flags are available in the same call. One call merges the SIRENE registry, RNE/INPI data (officers, financials) and BODACC legal announcements (insolvency procedures, account filings, radiations) into a single clean JSON record.

Built for **sales & lead enrichment, KYC/KYB onboarding, risk monitoring, and AI agents** (works out of the box via API and MCP).

### Why this actor

- ✅ **Official data only**: pulled from SIRENE (INSEE), RNE (INPI) and BODACC (DILA), so there's no scraping, no stale caches and no legal grey zone. It's GDPR-friendly by construction.
- ✅ **One call, whole picture**: identity, VAT number, legal form, NAF code, headquarters plus geo coordinates, workforce bracket, officers, 5 years of revenue and net income, compliance labels (Qualiopi, RGE, ESS, bio...), and legal-announcement red flags all come back together in one record.
- ✅ **KYC red flags computed for you**: `hasCollectiveProcedure` (redressement, liquidation, sauvegarde), `isRadiated` and `lastAccountsFilingDate` are worked out for you, so you don't have to parse legal announcements by hand.
- ✅ **Bulk-friendly**: feed it a list of thousands of names or SIREN numbers and it works through the whole batch in one run.
- ✅ **Fair pricing**: you're only charged for companies actually found and enriched, and misses cost nothing.

### Use cases

- **Lead enrichment**: turn a CRM list of company names into SIREN, VAT, size, revenue and decision-maker names.
- **KYC / KYB onboarding**: verify that a supplier or customer exists, is active, and carries no insolvency procedure on record.
- **Risk monitoring**: re-run your portfolio weekly and get an alert when a new collective procedure shows up.
- **Market research**: pull legal form, workforce, financials and location for any segment you're studying.
- **AI agents**: plug it into Claude, Cursor or any MCP client and just ask, *"is this company safe to sign with?"*

### Input

```json
{
    "queries": ["Decathlon", "552032534", "38076811300017"],
    "maxResultsPerQuery": 1,
    "includeBodacc": true
}
```

`queries` accepts company names, 9-digit SIREN numbers or 14-digit SIRET numbers, and you can mix them freely.

### Output (one record per company)

```json
{
    "query": "552032534",
    "found": true,
    "name": "DANONE",
    "siren": "552032534",
    "headquartersSiret": "55203253400041",
    "vatNumber": "FR27552032534",
    "legalFormCode": 5599,
    "legalFormLabel": "SA à conseil d'administration",
    "nafCode": "70.10Z",
    "status": "active",
    "creationDate": "1908-01-01",
    "employeesRange": "1000-1999 employees",
    "companyCategory": "GE (large enterprise)",
    "address": "17 BOULEVARD HAUSSMANN 75009 PARIS",
    "latitude": 48.872634,
    "longitude": 2.336423,
    "officers": [
        { "type": "person", "name": "ANTOINE BERNARD DE SAINT-AFFRIQUE", "role": "Directeur général", "birthYear": "1964" }
    ],
    "finances": [{ "year": 2024, "revenue": 27376000000, "netIncome": 1720000000 }],
    "latestRevenue": 27376000000,
    "labels": { "qualiopiCertified": false, "socialSolidarityEconomy": false },
    "hasCollectiveProcedure": false,
    "bodacc": {
        "totalAnnouncements": 106,
        "hasCollectiveProcedure": false,
        "lastAccountsFilingDate": "2026-06-12",
        "isRadiated": false,
        "announcements": [ { "publicationDate": "2026-06-12", "family": "Dépôts des comptes", "court": "Greffe du Tribunal de Commerce de Paris" } ]
    },
    "sources": ["recherche-entreprises.api.gouv.fr (SIRENE, RNE/INPI)", "bodacc-datadila.opendatasoft.com (BODACC)"]
}
```

### Companion actors: French open-data suite

- [**French & EU Public Tenders Monitor**](https://apify.com/tagadanar/french-public-tenders): track public procurement (BOAMP + TED) by keyword, CPV or department, and prospect the same companies' public-sector deals.
- [**French Real Estate Sales (DVF)**](https://apify.com/tagadanar/french-real-estate-dvf): official recorded property sale prices straight from the land registry.

### Pricing

Pay per event, no subscription:

| Event | When |
|---|---|
| Actor start | Once per run |
| Company enriched | Per company found and returned (misses are free) |
| BODACC checked | Per company, only when `includeBodacc` is enabled |

Typical cost: enriching 1,000 known companies with full legal-announcement history costs a few dollars, which compares well against the per-seat subscriptions commercial providers charge.

### FAQ

**Where does the data come from?** Exclusively from official French open-data APIs: `recherche-entreprises.api.gouv.fr` (SIRENE/INSEE + RNE/INPI) and the BODACC open-data portal (DILA). Data is fetched live at run time and is never cached or resold.

**Is this legal / GDPR-compliant?** Yes. These are public registries published by the French state specifically for reuse. Officer names are limited to what the law makes public (no personal addresses; birth dates truncated to month). For your own downstream use you act as the data controller, but verification, onboarding and risk monitoring of companies is a straightforward legitimate-interest case.

**What about companies with confidentiality flags?** Companies with `statut_diffusion` restrictions return only the fields the registry publishes.

**Can I search by criteria (NAF, region, size)?** This actor is optimized for lookup/enrichment of identified companies. Criteria-based prospecting is on the roadmap, so open an issue if you need it.

**Does it work with AI agents?** Yes. Like every Apify actor it is exposed via REST API and **MCP**, so Claude, Cursor and similar tools can call it directly as a tool.

***

### Something missing?

If you need an extra field, another source, or a different output, open an issue on this Actor and describe it. I read every request and small additions usually ship within days. More French company and tender Actors are on [my profile](https://apify.com/tagadanar).

*Keywords: SIREN lookup, SIRET, KYC France, KYB, French company data, TVA intracommunautaire, BODACC, procédure collective, Pappers alternative, societe.com alternative, INSEE SIRENE API, company enrichment, dirigeants, chiffre d'affaires, vérifier une entreprise, informations légales entreprise, vérification SIRET, dirigeants et bénéficiaires.*

# Actor input Schema

## `queries` (type: `array`):

One entry per company to look up. Accepts a company name (e.g. <code>Decathlon</code>), a 9-digit SIREN (e.g. <code>306138900</code>) or a 14-digit SIRET. Bulk lists are fine.

## `maxResultsPerQuery` (type: `integer`):

How many matching companies to return per query. Keep 1 for KYC/enrichment of a known company; raise it for exploratory name searches.

## `includeBodacc` (type: `boolean`):

Fetch official legal announcements (Bulletin officiel des annonces civiles et commerciales): insolvency / collective procedures, account filings, modifications, radiations. Adds one charged event per company.

## `bodaccMaxAnnouncements` (type: `integer`):

Most recent announcements to include in the output (summary flags are always computed from these).

## `onlyActiveCompanies` (type: `boolean`):

Exclude administratively ceased companies from name-search results.

## `pushNotFoundRecords` (type: `boolean`):

When enabled, queries with no match produce a record with <code>found: false</code> so bulk pipelines can track misses. Not-found records are never charged.

## Actor input object example

```json
{
  "queries": [
    "Decathlon",
    "552032534"
  ],
  "maxResultsPerQuery": 1,
  "includeBodacc": true,
  "bodaccMaxAnnouncements": 20,
  "onlyActiveCompanies": false,
  "pushNotFoundRecords": true
}
```

# Actor output Schema

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

All enriched company records (one item per company) in the default dataset.

# 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 = {
    "queries": [
        "Decathlon",
        "552032534"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/french-company-kyc").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 = { "queries": [
        "Decathlon",
        "552032534",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/french-company-kyc").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "queries": [
    "Decathlon",
    "552032534"
  ]
}' |
apify call tagadanar/french-company-kyc --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=tagadanar/french-company-kyc",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/aXIZs3euq3krcammK/builds/eWtD7W8GSIXYNipbY/openapi.json
