# French Company Scraper (`aurenic/france-company-scraper`) Actor

Extract company data from France's official SIRENE registry and BODACC legal announcements. SIREN, SIRET, dirigeants, finances, insolvency notices, M\&A. No API key, no login, no proxy.

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

## Pricing

from $1.50 / 1,000 results

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

## French Company Scraper

Extract company data from France's official SIRENE registry and BODACC legal announcements. SIREN, SIRET, dirigeants, finances, insolvency notices, M\&A. No API key, no login, no proxy.

### What does French Company Scraper do?

Scrape France's two official company registries through their public government APIs:

- **SIRENE (recherche-entreprises.api.gouv.fr)** — search by company name, activity, NAF code, or department. Returns SIREN, SIRET, legal name, address, NAF code, employee range, dirigeants (company officers), finances (turnover, net income), and status.
- **BODACC (bodacc-datadila.opendatasoft.com)** — France's official civil and commercial announcements bulletin. Search by text, filter by type (insolvency, M\&A, commercial modifications, company creations), or filter by date range.

Both APIs are free, public, and require no registration. They aggregate official data published by INSEE, INPI, DGFiP, and DILA.

### Output fields

#### Company (SIRENE)

| Field | Description |
|---|---|
| siren / siret | Company and establishment identifiers |
| name | Legal name |
| sigle | Acronym |
| legalForm | Legal form |
| creationDate | Registration date |
| activity / activityLabel | NAF/APE code and label |
| employeeRange / employeeRangeLabel | Employee bracket |
| address / postalCode / city / department / region | Location |
| latitude / longitude | GPS coordinates |
| openEstablishments / closedEstablishments | Establishment counts |
| isActive / status | Administrative status |
| dirigeants | Array of `{ name, role, type, birthYear, nationality }` |
| finances | `{ year, turnover, netIncome, employees }` |
| url | Link to Annuaire Entreprises |

#### BODACC announcement

| Field | Description |
|---|---|
| id | Announcement ID |
| registre | Registry number |
| siren | Company SIREN |
| companyName | Company name |
| type / family | Announcement type and family |
| department / city | Location |
| date | Publication date |
| body | Full announcement text |
| tribunal | Commercial court |
| url | Direct link |

### Who is it for?

- **B2B sales teams** building French prospect lists filtered by activity, size, and location
- **Compliance and KYC teams** verifying French companies and monitoring officer changes
- **M\&A and distress analysts** tracking insolvency filings and business transfers
- **Market researchers** analyzing company formation and dissolution trends
- **Credit risk teams** monitoring French counterparties for collective procedures
- **Data journalists** investigating French business activity

### Pricing

**$1.50 per 1,000 results.** No subscription.

| Results | Cost |
|---|---|
| 100 | $0.15 |
| 1,000 | $1.50 |
| 10,000 | $15.00 |

### How to use it

1. Pick a **Mode**.
2. For search: enter **Search Queries** (company names, keywords, NAF codes).
3. For siren: enter **SIREN Numbers**.
4. For BODACC: enter a **BODACC Query** and/or select **BODACC Types**.
5. Set **Max Items** (default 500).
6. Click **Start**.

### Output example

```json
{
  "recordType": "company",
  "siren": "552100554",
  "siret": "55210055400013",
  "name": "CARREFOUR HYPERMARCHES",
  "sigle": "CARREFOUR",
  "legalForm": "SAS",
  "creationDate": "1963-01-01",
  "activity": "47.11D",
  "activityLabel": "Commerce de détail de produits alimentaires",
  "employeeRange": "53",
  "employeeRangeLabel": "10 000 salariés et plus",
  "address": "1 RUE JEAN MERMOZ",
  "postalCode": "91300",
  "city": "MASSY",
  "department": "91",
  "region": "Île-de-France",
  "openEstablishments": 218,
  "isActive": true,
  "status": "ACTIVE",
  "dirigeants": [
    { "name": "Alexandre Bompard", "role": "Président", "type": "personne physique", "birthYear": "1972", "nationality": "française" }
  ],
  "finances": { "year": "2023", "turnover": 85000000000, "netIncome": 1200000000, "employees": 105000 },
  "url": "https://annuaire-entreprises.data.gouv.fr/entreprise/552100554",
  "scrapedAt": "2026-09-24T12:00:00.000Z"
}
```

### Technical details

- **SIRENE via recherche-entreprises.api.gouv.fr** — France's official meta-API, aggregating INSEE Sirene + INPI dirigeants + DGFiP finances + RGE labels + association registry. Free, no auth, no rate limit.
- **BODACC via bodacc-datadila.opendatasoft.com** — OpenDataSoft Explore v2.1 API, ~50M+ rows, free, no key.
- **No browser, no proxy** — pure REST JSON.
- **Pagination** — SIRENE uses `page` + `per_page` (max 25). BODACC uses `limit` + `offset` with `where` clauses.
- **Full-text search** on BODACC via `search()` function in `where` clause.

### Known limits

- **SIRENE `per_page` caps at 25.** For large runs, paginate via `page`.
- **BODACC covers legal announcements, not general company data.** Use SIRENE for company identity, BODACC for insolvency, M\&A, and modifications.
- **Finances are only available when filed.** Small companies and recent registrations may have `finances: null`.
- **Dirigeants are shown when publicly available.** Some entities have no declared officers in the open data.
- **The BODACC search function matches exact terms** — use quotes and Boolean operators for complex queries.

### FAQ

**Do I need an API key?** No. Both APIs are free and public.

**Do I need a proxy?** No. Datacenter IPs work.

**What's the difference between SIREN and SIRET?** SIREN is the 9-digit company identifier. SIRET is the 14-digit establishment identifier (SIREN + 5-digit NIC).

**How do I find a company's SIREN?** Search by name in search mode — the SIREN is in every result.

**What is BODACC?** The Bulletin officiel des annonces civiles et commerciales — France's official bulletin of civil and commercial announcements, published by DILA.

**How do I export data?** After a run, go to Storage → Export as JSON, CSV, Excel.

### Support

Open an issue on the Actor's page for bugs or feature requests.

# Actor input Schema

## `mode` (type: `string`):

What to scrape.

## `searchQueries` (type: `array`):

Company names, activity keywords, or NAF codes to search in SIRENE.

## `sirens` (type: `array`):

9-digit SIREN numbers to fetch directly.

## `department` (type: `string`):

Filter by French department code (e.g. 75, 69, 13).

## `activity` (type: `string`):

Filter by activity code (e.g. 56.10A for restaurants).

## `effectif` (type: `string`):

Filter by employee bracket code (e.g. 11 = 10-19, 12 = 20-49, 21 = 50-99).

## `bodaccQuery` (type: `string`):

Text search across BODACC legal announcements.

## `bodaccTypes` (type: `array`):

Filter by announcement family. Common: 'Collective procedures' (insolvency), 'Commercial modifications', 'Sales and transfers' (M\&A), 'Company creations'.

## `bodaccDateFrom` (type: `string`):

Earliest publication date (YYYY-MM-DD).

## `bodaccDateTo` (type: `string`):

Latest publication date (YYYY-MM-DD).

## `maxItems` (type: `integer`):

Hard cap on records per run.

## `perPage` (type: `integer`):

Search page size for SIRENE.

## `requestDelayMs` (type: `integer`):

Delay between API requests.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "boulangerie Paris"
  ],
  "sirens": [],
  "department": "",
  "activity": "",
  "effectif": "",
  "bodaccQuery": "",
  "bodaccTypes": [],
  "bodaccDateFrom": "",
  "bodaccDateTo": "",
  "maxItems": 500,
  "perPage": 25,
  "requestDelayMs": 500
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "searchQueries": [
        "boulangerie Paris"
    ],
    "sirens": [],
    "bodaccTypes": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("aurenic/france-company-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 = {
    "searchQueries": ["boulangerie Paris"],
    "sirens": [],
    "bodaccTypes": [],
}

# Run the Actor and wait for it to finish
run = client.actor("aurenic/france-company-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 '{
  "searchQueries": [
    "boulangerie Paris"
  ],
  "sirens": [],
  "bodaccTypes": []
}' |
apify call aurenic/france-company-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aurenic/france-company-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/h2pZNgnHXfCEyp2yS/builds/14NlLVkQInuTFvCaD/openapi.json
