# France Company Registry Scraper — SIREN B2B Leads (`logiover/france-company-registry-scraper`) Actor

Scrape France's official company registry (Annuaire des Entreprises / SIREN). Get SIREN, company name, NAF/APE code, legal form, head-office address, employees, status & director leads. Filter by activity, postcode, department, region & more. No login, no API key.

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

## Pricing

from $1.99 / 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.
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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

<div align="center">

## 🇫🇷 France Company Registry Scraper — SIREN & B2B Leads

#### Scrape France's official company registry (Annuaire des Entreprises / SIREN). Get SIREN, company name, NAF-APE code, legal form, head-office address, employees, status, plus director leads. No login, no API key.

<br>

![No login](https://img.shields.io/badge/✓_No_login-no_API_key-2ea44f?style=for-the-badge)
![Official data](https://img.shields.io/badge/🇫🇷_Official-open_registry-1f6feb?style=for-the-badge)
![High volume](https://img.shields.io/badge/📦_Up_to-10k_per_query-1f6feb?style=for-the-badge)
![Leads](https://img.shields.io/badge/🎯_France-B2B_leads-9333ea?style=for-the-badge)
![Export](https://img.shields.io/badge/Export-JSON·CSV·Excel·API-f59e0b?style=for-the-badge)

<br>

**Pull a clean, structured list of French companies straight from the official Annuaire des Entreprises (SIREN register) — filter by activity, department, region or company size and export name, NAF code, head-office address, status and director names.**
The fast, no-code way to build targeted **France B2B lead lists** and a full **French business database** at scale.

</div>

---

### 📌 Overview

The **France Company Registry Scraper** turns the **Annuaire des Entreprises** — the French government's official **SIREN** company directory — into an analysis-ready dataset. It reads directly from the **recherche-entreprises API** (`recherche-entreprises.api.gouv.fr`), the same open data the registry publishes, so there is **no login, no API key and no captcha**.

For every French company you get the **SIREN identifier, full & legal name, NAF/APE activity code, legal form, company-size category, employee bracket, head-office SIRET + full address (city, postcode, department, region, geo) and the list of directors / officers (dirigeants)** as director leads.

Perfect for **France B2B lead generation**, sales prospecting, market research, CRM enrichment, KYC / compliance and competitor mapping — exported to **CSV, Excel, JSON** or pushed to Google Sheets and your CRM via API.

> ✅ Combine a **NAF/APE code + department** filter and raise `maxResults` to assemble a large, targeted French prospect list in a single run.

---

### ❓ What does the France company registry scraper do?

It queries the official **recherche-entreprises API** with your filters, flattens the nested JSON into clean spreadsheet-ready columns, de-dupes by SIREN, paginates automatically and lists each company's directors / officers (dirigeants). You set filters in a simple form; you get a structured dataset back — no code, no registry account, no INSEE / SIRENE API integration work.

---

### ✨ Features

| | Feature | Description |
|---|---|---|
| 🎯 | **France B2B lead data** | SIREN, company name, NAF/APE activity, head-office address — plus directors / officers and company size. |
| 🔎 | **Rich filtering** | Search by name / activity, NAF-APE code, activity section (A–U), postcode, department, region, legal form and company-size category. |
| 🏢 | **Director / officer leads** | Every row lists the company's `dirigeants` — president, manager (gérant), CEO (directeur général) and corporate officers — with their role. |
| ⚖️ | **Active vs ceased status** | Filter and flag active (`A`) vs ceased (`C`) companies — ideal for KYC and lead quality. |
| 🏷️ | **Company size category** | Filter PME (small/medium), ETI (mid-cap) or GE (large enterprise) and read employee brackets. |
| 📦 | **Bulk export** | Up to 10,000 companies per query, auto-paginated; export to JSON, CSV, Excel, HTML or pull via API & webhooks. |
| 🔓 | **No API key needed** | Reads the official open recherche-entreprises API — no login, no key, no signup, no captcha. |
| 🧩 | **Escape hatch** | `extraParams` passes any other supported recherche-entreprises query param as raw key/value. |

---

### 📊 What data you get

One clean row per company. Verified output fields:

| Field | Description |
|-------|-------------|
| `siren` | French SIREN identifier (9 digits) |
| `name` | Full company name (nom_complet) |
| `legalName` | Legal / registered name (raison sociale) |
| `acronym` | Company acronym (sigle), when present |
| `nafCode` | Main activity code (NAF / APE / activite_principale) |
| `nafSection` | Activity section letter (A–U) |
| `legalFormCode` | Legal form / catégorie juridique code (nature_juridique) |
| `companyCategory` | Company size category (PME / ETI / GE) |
| `employeeRange` | Employee bracket code (tranche_effectif_salarie) |
| `employeeYear` | Reference year of the employee bracket |
| `status` | Administrative status (A = active, C = ceased) |
| `establishments` / `openEstablishments` | Total and open establishment counts |
| `createdDate` | Creation date (date_creation) |
| `siret` | Head-office establishment identifier (SIRET) |
| `address` | Head-office address |
| `zip` / `city` | Head-office postcode and city |
| `departement` / `region` | Department and region codes |
| `latitude` / `longitude` | Head-office coordinates |
| `directors` | Directors / officers (dirigeants), semicolon-separated with role |
| `directorCount` | Number of directors / officers |
| `url` | Direct Annuaire des Entreprises URL for the company |
| `scrapedAt` | ISO timestamp of the run |

---

### 🚀 How to use

1. Open the actor and set your **filters** (activity, department, region, company size, etc.) — or just type a name / activity in `query`.
2. Set `maxResults`.
3. Run, then **export** the dataset to CSV, Excel, JSON or Google Sheets.

#### Input fields

| Field | Type | Description |
|-------|------|-------------|
| `query` | string | Free-text search (`q`) over name / activity / person, e.g. `boulangerie` |
| `naf` | string | Activity / NAF-APE code, e.g. `62.01Z` (software), `10.71C` (bakery); comma-separate several |
| `section` | string | Activity section letter A–U, e.g. `J` (information & communication) |
| `codePostal` | string | Head-office postcode, e.g. `75001` Paris, `69002` Lyon |
| `departement` | string | Department code, e.g. `75` Paris, `13` Bouches-du-Rhône, `69` Rhône |
| `region` | string | INSEE region code, e.g. `11` Île-de-France, `84` Auvergne-Rhône-Alpes |
| `natureJuridique` | string | Legal form code, e.g. `5710` (SAS), `5499` (SARL), `1000` (sole trader) |
| `categorieEntreprise` | select | Company size: `any` / `PME` / `ETI` / `GE` |
| `etatAdministratif` | select | Status: `any` / `A` (active — best for leads) / `C` (ceased) |
| `estAssociation` | select | Associations: `any` / `true` (only) / `false` (exclude) |
| `extraParams` | object | Any other raw recherche-entreprises query param as key/value |
| `maxResults` | integer | Cap (default `200`, `0` = unlimited; API caps deep pagination at 10k/query) |
| `useProxy` | boolean | Route through Apify Proxy (datacenter). Default `true` |
| `proxyConfiguration` | object | Proxy override |

#### Example scenarios

**1) Bakeries in Paris (active only)**
```json
{
  "naf": "10.71C",
  "departement": "75",
  "etatAdministratif": "A",
  "maxResults": 1000
}
````

**2) Software / computer-programming companies in Lyon**

```json
{
  "naf": "62.01Z",
  "codePostal": "69002",
  "maxResults": 2000
}
```

**3) Mid-cap (ETI) manufacturers in Auvergne-Rhône-Alpes**

```json
{
  "section": "C",
  "region": "84",
  "categorieEntreprise": "ETI",
  "maxResults": 500
}
```

***

### 📦 Example output

```json
{
  "siren": "478455793",
  "name": "BOULANGERIES BG (B B G)",
  "legalName": "BOULANGERIES BG",
  "acronym": "B B G",
  "nafCode": "10.71C",
  "nafSection": "C",
  "legalFormCode": "5710",
  "companyCategory": "GE",
  "employeeRange": "22",
  "employeeYear": "2023",
  "status": "A",
  "establishments": 596,
  "openEstablishments": 574,
  "createdDate": "2004-08-25",
  "siret": "47845579305205",
  "address": "615 AVENUE DE LA CHAFFINE 13160 CHATEAURENARD",
  "zip": "13160",
  "city": "CHATEAURENARD",
  "departement": "13",
  "region": "93",
  "latitude": "43.8903640316375",
  "longitude": "4.82612901648503",
  "directors": "BERNARD BLACHERE (Président de SAS); MARIE BLACHERE (Directeur Général); HOLDING BERNARD BLACHERE (Président de SAS)",
  "directorCount": 3,
  "url": "https://annuaire-entreprises.data.gouv.fr/entreprise/478455793",
  "scrapedAt": "2026-06-08T00:00:00.000Z"
}
```

Export to CSV, Excel, JSON or XML, push to Google Sheets / your CRM, or pull via the Apify API and webhooks.

***

### 🎯 Use cases

- **B2B lead generation** — build targeted French prospect lists by activity + department with company name, address and directors.
- **Sales prospecting** — filter active firms by NAF code and company size and reach the right officer (président, gérant, directeur général).
- **Market research** — count and profile companies by NAF/APE code, region, size category and creation date.
- **KYC / compliance & due diligence** — verify SIREN / SIRET, legal form and active vs ceased status.
- **Competitor mapping** — survey every company in a vertical or town and benchmark size and status.
- **CRM enrichment** — look companies up by name or SIREN and append official registry fields.

***

### ❓ FAQ

#### Is there a free France company API?

Yes. The French government publishes the **Annuaire des Entreprises** via a fully open, free JSON API (`recherche-entreprises.api.gouv.fr`) — no key, no login, no signup. This actor is a friendly, filterable export layer on top of it: set filters in a form, run, and download a clean dataset with pagination handled and nested fields flattened.

#### How do I export French company data to Excel?

Every run writes one row per company to a dataset you can export to **Excel, CSV, JSON or HTML**, or pull via the Apify API. Set your filters (activity, department, region, etc.), run, and use the **Export** button to download an `.xlsx` / `.csv` of the whole French company segment.

#### Does it include director / officer names?

Yes — every row lists the company's **dirigeants** (directors / officers) from the registry: president, manager (gérant), CEO (directeur général) and any corporate officers, each with their role (qualité). These come straight from the official open data.

#### Does it include company emails and phone numbers?

The open SIREN registry does **not** publish company email or phone numbers, so those fields are not available here. What you do get is the official company identity (SIREN/SIRET), full head-office address, activity, legal form, size and directors — a strong base you can enrich with contact-finder tools.

#### Is scraping the Annuaire des Entreprises legal?

This actor reads only the **official open data** that the French government publishes under an open licence (Licence Ouverte / Etalab) via its public API — no login or circumvention involved. As always, credit the source (Annuaire des Entreprises / data.gouv.fr) and follow the applicable terms and law for your specific use case.

#### How do I find NAF/APE or region codes?

NAF / APE codes use the `nn.nnX` format (e.g. `62.01Z` software, `10.71C` bakery, `56.10A` restaurants). Region codes are INSEE 2-digit codes (`11` Île-de-France, `84` Auvergne-Rhône-Alpes). You can also just use `query` for a name search and read the `nafCode` / `region` columns in the output.

#### Is this a SIRENE / recherche-entreprises API alternative for bulk download?

Yes — it's the easiest **recherche-entreprises API alternative** for non-developers: no code, automatic pagination, nested JSON flattened to columns, and direct export to CSV / Excel / JSON.

***

### 📈 Notes on coverage & limits

- **No email / phone.** The open SIREN registry does not include company email or phone numbers; this actor returns official identity, address, activity, size and director data only.
- **10,000 results per query.** The recherche-entreprises API hard-caps deep pagination at **10k records per query**. For larger segments, **split your run by department, postcode or activity code** and combine the datasets.
- **Head office only.** Each row describes the company and its head office (siège); individual secondary establishments (établissements) are summarised as counts, not listed separately.

***

<div align="center">

**France Company Registry Scraper · SIREN API · SIRENE · Annuaire des Entreprises · recherche-entreprises API · French Business Data · France B2B Leads · France Company Data Export · NAF APE Scraper · Scrape French Companies · France Company Database to CSV / Excel**

<sub>⚖️ Reads only France's official open registry data (Annuaire des Entreprises / Licence Ouverte). You are responsible for compliance with the applicable terms and laws.</sub>

</div>

# Actor input Schema

## `query` (type: `string`):

Free-text search, mapped to the API's `q` param — matches company name, activity or a person. Leave empty to use the more specific filters below. Example: "boulangerie", "conseil informatique", "restaurant Lyon".

## `naf` (type: `string`):

Filter by main activity (NAF / APE / activite\_principale), e.g. 62.01Z (computer programming), 10.71C (bakery), 56.10A (restaurants). Comma-separate several codes. Leave empty for all activities.

## `section` (type: `string`):

Filter by NAF activity section, a single letter A–U, e.g. C (manufacturing), F (construction), G (trade), J (information & communication), I (hospitality). Leave empty for all.

## `codePostal` (type: `string`):

Filter by head-office postcode, e.g. 75001 (Paris 1st), 69002 (Lyon). Leave empty for the whole country.

## `departement` (type: `string`):

Filter by department code, e.g. 75 (Paris), 13 (Bouches-du-Rhône), 69 (Rhône), 2A (Corse-du-Sud). Leave empty for all departments.

## `region` (type: `string`):

Filter by INSEE region code, e.g. 11 (Île-de-France), 84 (Auvergne-Rhône-Alpes), 93 (Provence-Alpes-Côte d'Azur). Leave empty for all.

## `natureJuridique` (type: `string`):

Filter by legal form code (catégorie juridique INSEE), e.g. 5710 (SAS), 5499 (SARL), 1000 (sole trader / entrepreneur individuel). Leave empty for all.

## `categorieEntreprise` (type: `string`):

Filter by company size category: PME (small/medium), ETI (mid-cap), GE (large enterprise).

## `etatAdministratif` (type: `string`):

Filter by status: 'any' (default), 'A' (active — best for leads), 'C' (ceased / closed).

## `estAssociation` (type: `string`):

Filter by non-profit association status: 'any', 'true' (only associations), 'false' (exclude associations).

## `extraParams` (type: `object`):

Escape hatch: any other recherche-entreprises query param as key/value, e.g. {"tranche\_effectif\_salarie":"22"}. Merged into the request as-is.

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

Stop after this many companies. 0 = unlimited (note: the API hard-caps deep pagination at 10,000 results per query — narrow your filters to get more).

## `useProxy` (type: `boolean`):

Route requests through Apify Proxy (datacenter by default). The recherche-entreprises API is open, so you can turn this off to go direct, but keeping proxy on is stable and recommended.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. Datacenter is plenty for the open recherche-entreprises API.

## Actor input object example

```json
{
  "query": "boulangerie",
  "naf": "62.01Z",
  "section": "J",
  "departement": "75",
  "natureJuridique": "5710",
  "categorieEntreprise": "any",
  "etatAdministratif": "any",
  "estAssociation": "any",
  "maxResults": 200,
  "useProxy": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `siren` (type: `string`):

French SIREN identifier (9 digits)

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

Full company name (nom\_complet)

## `legalName` (type: `string`):

Legal / registered name (raison sociale)

## `acronym` (type: `string`):

Company acronym (sigle)

## `nafCode` (type: `string`):

Main activity code (activite\_principale)

## `nafSection` (type: `string`):

Activity section letter (A–U)

## `legalFormCode` (type: `string`):

Legal form / catégorie juridique code (nature\_juridique)

## `companyCategory` (type: `string`):

Size category (PME / ETI / GE)

## `employeeRange` (type: `string`):

Employee bracket code (tranche\_effectif\_salarie)

## `employeeYear` (type: `string`):

Reference year of the employee bracket

## `status` (type: `string`):

Administrative status (A=active, C=ceased)

## `establishments` (type: `string`):

Total number of establishments

## `openEstablishments` (type: `string`):

Number of open establishments

## `createdDate` (type: `string`):

Creation date (date\_creation)

## `siret` (type: `string`):

Head-office establishment identifier (SIRET)

## `address` (type: `string`):

Head-office address

## `zip` (type: `string`):

Head-office postcode (code\_postal)

## `city` (type: `string`):

Head-office city (libelle\_commune)

## `departement` (type: `string`):

Department code (departement)

## `region` (type: `string`):

Region code (region)

## `latitude` (type: `string`):

Head-office latitude

## `longitude` (type: `string`):

Head-office longitude

## `directors` (type: `string`):

Directors / officers (dirigeants), semicolon-separated with role

## `directorCount` (type: `string`):

Number of directors / officers

## `url` (type: `string`):

Annuaire des Entreprises URL for this company

## `scrapedAt` (type: `string`):

Scraped at

# 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 = {
    "query": "boulangerie"
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/france-company-registry-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 = { "query": "boulangerie" }

# Run the Actor and wait for it to finish
run = client.actor("logiover/france-company-registry-scraper").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 '{
  "query": "boulangerie"
}' |
apify call logiover/france-company-registry-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "France Company Registry Scraper — SIREN B2B Leads",
        "description": "Scrape France's official company registry (Annuaire des Entreprises / SIREN). Get SIREN, company name, NAF/APE code, legal form, head-office address, employees, status & director leads. Filter by activity, postcode, department, region & more. No login, no API key.",
        "version": "1.0",
        "x-build-id": "JLYjb4mkRNalyT9iB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~france-company-registry-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-france-company-registry-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~france-company-registry-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-france-company-registry-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~france-company-registry-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-france-company-registry-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "title": "Search query (name / activity / person)",
                        "type": "string",
                        "description": "Free-text search, mapped to the API's `q` param — matches company name, activity or a person. Leave empty to use the more specific filters below. Example: \"boulangerie\", \"conseil informatique\", \"restaurant Lyon\"."
                    },
                    "naf": {
                        "title": "Activity / NAF-APE code",
                        "type": "string",
                        "description": "Filter by main activity (NAF / APE / activite_principale), e.g. 62.01Z (computer programming), 10.71C (bakery), 56.10A (restaurants). Comma-separate several codes. Leave empty for all activities."
                    },
                    "section": {
                        "title": "Activity section (A–U)",
                        "type": "string",
                        "description": "Filter by NAF activity section, a single letter A–U, e.g. C (manufacturing), F (construction), G (trade), J (information & communication), I (hospitality). Leave empty for all."
                    },
                    "codePostal": {
                        "title": "Postcode (code postal)",
                        "type": "string",
                        "description": "Filter by head-office postcode, e.g. 75001 (Paris 1st), 69002 (Lyon). Leave empty for the whole country."
                    },
                    "departement": {
                        "title": "Department (departement)",
                        "type": "string",
                        "description": "Filter by department code, e.g. 75 (Paris), 13 (Bouches-du-Rhône), 69 (Rhône), 2A (Corse-du-Sud). Leave empty for all departments."
                    },
                    "region": {
                        "title": "Region code (region)",
                        "type": "string",
                        "description": "Filter by INSEE region code, e.g. 11 (Île-de-France), 84 (Auvergne-Rhône-Alpes), 93 (Provence-Alpes-Côte d'Azur). Leave empty for all."
                    },
                    "natureJuridique": {
                        "title": "Legal form code (nature juridique)",
                        "type": "string",
                        "description": "Filter by legal form code (catégorie juridique INSEE), e.g. 5710 (SAS), 5499 (SARL), 1000 (sole trader / entrepreneur individuel). Leave empty for all."
                    },
                    "categorieEntreprise": {
                        "title": "Company size category",
                        "enum": [
                            "any",
                            "PME",
                            "ETI",
                            "GE"
                        ],
                        "type": "string",
                        "description": "Filter by company size category: PME (small/medium), ETI (mid-cap), GE (large enterprise).",
                        "default": "any"
                    },
                    "etatAdministratif": {
                        "title": "Administrative status",
                        "enum": [
                            "any",
                            "A",
                            "C"
                        ],
                        "type": "string",
                        "description": "Filter by status: 'any' (default), 'A' (active — best for leads), 'C' (ceased / closed).",
                        "default": "any"
                    },
                    "estAssociation": {
                        "title": "Association filter",
                        "enum": [
                            "any",
                            "true",
                            "false"
                        ],
                        "type": "string",
                        "description": "Filter by non-profit association status: 'any', 'true' (only associations), 'false' (exclude associations).",
                        "default": "any"
                    },
                    "extraParams": {
                        "title": "Extra raw query params",
                        "type": "object",
                        "description": "Escape hatch: any other recherche-entreprises query param as key/value, e.g. {\"tranche_effectif_salarie\":\"22\"}. Merged into the request as-is."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Stop after this many companies. 0 = unlimited (note: the API hard-caps deep pagination at 10,000 results per query — narrow your filters to get more).",
                        "default": 200
                    },
                    "useProxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Route requests through Apify Proxy (datacenter by default). The recherche-entreprises API is open, so you can turn this off to go direct, but keeping proxy on is stable and recommended.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy settings. Datacenter is plenty for the open recherche-entreprises API.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
