# Pappers / Sirene Scraper: 26M French Companies SIREN/SIRET (`dltik/pappers-sirene-scraper`) Actor

Search 26M+ French companies from the official Sirene database. Get SIREN, SIRET, legal name, address, dirigeants, NAF code, finances, GPS coordinates. Text search, geo radius, batch SIREN lookup, 53 filters. For B2B prospecting, KYC verification, CRM enrichment, lead generation. $5/1K companies.

- **URL**: https://apify.com/dltik/pappers-sirene-scraper.md
- **Developed by:** [dltik](https://apify.com/dltik) (community)
- **Categories:** Business, Lead generation, Marketing
- **Stats:** 8 total users, 4 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 company fetcheds

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/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

## Pappers / Sirene Scraper — French Company Intelligence (SIREN/SIRET)

Search **26M+ French companies** via the open government Sirene API. Get SIREN, SIRET, name, address, NAF code, dirigeants (managers), revenue, and geo coordinates. The fastest, cheapest way to enrich a French B2B database.

**HTTP-only, 128MB. $5/1K companies. Pay only what you use.**

Built for B2B prospecting, KYC compliance, CRM enrichment, lead generation, market analysis.

<!-- bookmark-cta -->

> ⭐ **Found this useful?** Click the **Bookmark** button at the top of [this page](https://apify.com/dltik/pappers-sirene-scraper) — it helps the scraper stay visible to others who need it. Takes 1 click. No signup beyond your existing Apify account.

---

### Why this actor

| Feature | This actor | Pappers.fr | Societe.com | Sirene direct |
|---------|-----------|------------|-------------|---------------|
| 26M+ French companies | Yes | Yes | Yes | Yes |
| Search by name / postal / NAF / dirigeant | Yes | Yes | Limited | Yes |
| Geo search (lat/lon/radius) | **Yes** | Limited | No | No |
| Finances (CA, résultat net) | Yes (recent) | Yes (paid) | Yes (paid) | No |
| API access | **Pay-as-you-go** | $19-99/month | Limited | Free but raw |
| No subscription | **Yes — pay only what you use** | No | No | Yes |
| Output flat & ready for CRM | **Yes** | No | No | No |

This actor wraps **`recherche-entreprises.api.gouv.fr`** (the official Etalab API) and:
- Normalizes the response into clean flat records
- Handles pagination + rate limit (7 req/s)
- Adds Pappers + Annuaire Entreprises URLs for each company
- Supports text, geo, and SIREN-batch modes

---

### Quick start

#### Find all bakeries in Paris

```json
{
  "mode": "search",
  "query": "boulangerie",
  "departement": "75",
  "etat_administratif": "A",
  "maxResults": 500
}
````

#### Find SaaS companies (NAF 62.01Z) with 50+ employees

```json
{
  "mode": "search",
  "activite_principale": "62.01Z",
  "tranche_effectif_salarie": "21",
  "maxResults": 1000
}
```

#### Companies near a specific point (10km radius)

```json
{
  "mode": "geo",
  "lat": 48.8566,
  "lon": 2.3522,
  "radiusKm": 10,
  "section_activite_principale": "J",
  "maxResults": 500
}
```

#### Lookup a list of SIRENs (CRM enrichment)

```json
{
  "mode": "siren",
  "sirens": ["552032534", "444419428", "390070147"]
}
```

#### Find all RGE-certified companies in Lyon

```json
{
  "mode": "search",
  "code_postal": "69002",
  "est_rge": true,
  "maxResults": 200
}
```

#### Find Qualiopi-certified training orgs in Île-de-France

```json
{
  "mode": "search",
  "region": "11",
  "est_qualiopi": true,
  "maxResults": 1000
}
```

***

### Input

| Parameter | Type | Description |
|-----------|------|-------------|
| `mode` | enum | `search` (text/filters), `geo` (lat/lon/radius), `siren` (batch SIREN/SIRET lookup) |
| `query` | string | Free text — name, address, dirigeant, etc. |
| `sirens` | array | List of SIREN (9 digits) or SIRET (14 digits) for batch mode |
| `departement` | string | 2-digit code (`75`, `69`, `13`...) |
| `code_postal` | string | 5-digit postal code |
| `region` | string | 2-digit region code (`11` = Île-de-France) |
| `activite_principale` | string | NAF code (`62.01Z`, `56.10A`...) |
| `section_activite_principale` | string | Single letter NAF section |
| `categorie_entreprise` | enum | `PME`, `ETI`, `GE` |
| `tranche_effectif_salarie` | string | INSEE bracket code (`00`-`53`) |
| `etat_administratif` | enum | `A` (active), `C` (ceased) |
| `nom_personne` | string | Dirigeant last name |
| `prenoms_personne` | string | Dirigeant first name |
| `type_personne` | enum | `dirigeant` or `elu` |
| `ca_min`, `ca_max` | int | Revenue (€) min/max — only for companies that filed accounts |
| `lat`, `lon`, `radiusKm` | number | Geo search (radius max 50km) |
| `est_rge` | bool | RGE eco-construction certified |
| `est_qualiopi` | bool | Qualiopi training-certified |
| `est_bio` | bool | Bio-certified (Agence Bio) |
| `est_ess` | bool | Social economy (ESS) |
| `est_association` | bool | Associations (loi 1901) |
| `est_organisme_formation` | bool | Training organizations |
| `est_societe_mission` | bool | Mission-driven (B-Corp eq.) |
| `maxResults` | int | Max companies to return (max 10,000 per query) |

***

### Output (per company)

```json
{
  "type": "company",
  "siren": "444419428",
  "siret_siege": "44441942800016",
  "nom_complet": "ANTHROPIC",
  "nom_raison_sociale": "ANTHROPIC",
  "sigle": null,
  "etat_administratif": "A",
  "date_creation": "2002-10-04",
  "date_mise_a_jour": "2026-04-27T09:45:43",
  "categorie_entreprise": null,
  "tranche_effectif_salarie": "NN",
  "nature_juridique": "9220",
  "activite_principale": "90.01Z",
  "activite_principale_naf25": "90.20Y",
  "section_activite_principale": "R",
  "nombre_etablissements": 1,
  "nombre_etablissements_ouverts": 1,
  "is_association": false,
  "is_qualiopi": false,
  "is_rge": false,
  "siege_address": "IMPASSE DE LA BOULE ROUGE 75009 PARIS",
  "siege_code_postal": "75009",
  "siege_commune": "PARIS",
  "siege_departement": "75",
  "siege_region": "11",
  "siege_latitude": "48.873578217",
  "siege_longitude": "2.3437850964",
  "ca_latest": null,
  "resultat_net_latest": null,
  "finances_year": null,
  "dirigeants": [
    {
      "type": "personne_physique",
      "nom": "DOE",
      "prenoms": "JOHN",
      "annee_naissance": "1985",
      "qualite": "Président"
    }
  ],
  "url_pappers": "https://www.pappers.fr/entreprise/444419428",
  "url_annuaire_entreprises": "https://annuaire-entreprises.data.gouv.fr/entreprise/444419428",
  "scraped_at": "2026-04-27T20:00:00Z"
}
```

***

### Pricing

**$0.005 per company** = **$5 per 1,000 companies**.

| Scenario | Companies | Cost |
|----------|-----------|------|
| Lookup 100 SIRENs (CRM enrichment) | 100 | $0.50 |
| All bakeries in Paris (~3,500) | 3,500 | $17.50 |
| All RGE companies in IdF (~50K) | 50,000 | $250 |
| 1M French companies snapshot | 1,000,000 | $5,000 |

vs Pappers paid plans: $19-99/month flat (limited API calls), Societe.com paid: similar. **Here you pay only what you actually pull.**

***

### Use cases

- **B2B prospecting** — find your TAM by NAF code + region + size
- **CRM enrichment** — feed your CRM SIREN list, get full company details
- **KYC compliance** — verify French companies before onboarding
- **Lead generation** — extract dirigeant names + addresses for direct outreach
- **Market intelligence** — track newly created companies in your sector
- **Geographic targeting** — find all companies within 10km of your store
- **Compliance audits** — check if companies are RGE / Qualiopi / Bio certified
- **Data journalism** — investigate corporate structures, dirigeant networks

***

### API integration

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("dltik/pappers-sirene-scraper").call(run_input={
    "mode": "search",
    "activite_principale": "62.01Z",
    "departement": "75",
    "tranche_effectif_salarie": "21",
    "maxResults": 1000
})

## Push to your CRM
for company in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{company['siren']} - {company['nom_complet']} - {company['siege_commune']}")
```

#### Make / Zapier / n8n

Connect via Apify integrations to push companies directly to:

- HubSpot, Pipedrive, Salesforce (CRM)
- Google Sheets, Airtable (databases)
- Slack (deal alerts when new companies match your criteria)

***

### Technical details

- **Source**: `recherche-entreprises.api.gouv.fr` — official Etalab open API
- **Rate limit**: 7 req/sec (handled automatically with backoff)
- **Coverage**: ~26M French companies, daily updated from INSEE Sirene + RNE + RGE + Qualiopi
- **No anti-bot**: API is fully open — proxy rarely needed
- **No login required**: zero credentials, zero monthly cost on the data source
- **53 search filters** — same surface as the underlying API
- **Pagination cap**: API limits to ~10,000 results per query — split your search by department/postal code for larger sweeps

***

### Other scrapers by dltik

| Actor | Description | Price |
|-------|-------------|-------|
| [Trustpilot](https://apify.com/dltik/trustpilot-scraper) | Reviews + sentiment | $0.50/1K |
| [Reddit](https://apify.com/dltik/reddit-scraper) | Posts + sentiment | $2/1K |
| [Google Maps Email Extractor](https://apify.com/dltik/google-maps-email-extractor) | B2B leads + WhatsApp | $3/1K |
| [Welcome to the Jungle](https://apify.com/dltik/welcome-to-the-jungle-scraper) | Tech jobs FR | $0.50/1K |
| [HelloWork](https://apify.com/dltik/hellowork-scraper) | French job board | $1/1K |
| [Malt](https://apify.com/dltik/malt-scraper) | Freelancers FR/EU | $1/1K |
| [Amazon Bestsellers](https://apify.com/dltik/amazon-bestsellers) | Top 100 by category | $2/1K |

# Actor input Schema

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

search = text/filter search, geo = lat/lon/radius, siren = batch lookup by SIREN/SIRET list.

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

Free text. Searches name, address, dirigeant. Example: 'boulangerie Lyon', 'Anthropic', 'Bernard Arnault'.

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

List of SIREN (9 digits) or SIRET (14 digits) for batch lookup. Set mode=siren.

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

Two-digit department code (e.g. '75' for Paris, '69' for Rhône, '13' for Bouches-du-Rhône).

## `code_postal` (type: `string`):

5-digit postal code (e.g. '75009', '69002').

## `code_commune` (type: `string`):

INSEE city code (different from postal code). E.g. '75109' for Paris 9th arrondissement.

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

Two-digit region code (e.g. '11' for Île-de-France, '84' for Auvergne-Rhône-Alpes).

## `activite_principale` (type: `string`):

NAF/APE code (e.g. '62.01Z' for software, '56.10A' for restaurants, '47.11D' for supermarkets).

## `section_activite_principale` (type: `string`):

Single-letter NAF section (A=agriculture, C=manufacturing, F=construction, G=trade, J=info/comm, K=finance, M=consulting, Q=health).

## `categorie_entreprise` (type: `string`):

PME (small/medium), ETI (intermediate), GE (large enterprise).

## `tranche_effectif_salarie` (type: `string`):

INSEE bracket code: 00=0, 01=1-2, 02=3-5, 03=6-9, 11=10-19, 12=20-49, 21=50-99, 22=100-199, 31=200-249, 32=250-499, 41=500-999, 42=1000-1999, 51=2000-4999, 52=5000-9999, 53=10000+.

## `etat_administratif` (type: `string`):

A = Active, C = Ceased.

## `nom_personne` (type: `string`):

Search by manager / director last name (e.g. 'ARNAULT').

## `prenoms_personne` (type: `string`):

Search by manager / director first name.

## `type_personne` (type: `string`):

dirigeant (company manager) or elu (elected official).

## `ca_min` (type: `integer`):

Filter by minimum CA (chiffre d'affaires) in euros. Only available for companies that filed accounts.

## `ca_max` (type: `integer`):

Filter by maximum CA in euros.

## `lat` (type: `number`):

Latitude for geo search. Use with mode=geo.

## `lon` (type: `number`):

Longitude for geo search. Use with mode=geo.

## `radiusKm` (type: `number`):

Search radius in km, max 50.

## `est_rge` (type: `boolean`):

Reconnu Garant de l'Environnement (eco-construction).

## `est_qualiopi` (type: `boolean`):

Companies with Qualiopi training certification.

## `est_bio` (type: `boolean`):

Organic/bio certified companies (Agence Bio).

## `est_ess` (type: `boolean`):

Économie Sociale et Solidaire.

## `est_association` (type: `boolean`):

Restrict to associations (loi 1901).

## `est_organisme_formation` (type: `boolean`):

Companies registered as training organizations.

## `est_societe_mission` (type: `boolean`):

Société à mission (B-Corp equivalent).

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

Max companies to return. API caps total search at ~10,000 results per query.

## `proxyConfig` (type: `object`):

Optional Apify proxy. The API gouv has no anti-bot — proxy rarely needed unless your IP is rate-limited.

## Actor input object example

```json
{
  "mode": "search",
  "sirens": [],
  "etat_administratif": "A",
  "est_rge": false,
  "est_qualiopi": false,
  "est_bio": false,
  "est_ess": false,
  "est_association": false,
  "est_organisme_formation": false,
  "est_societe_mission": false,
  "maxResults": 100,
  "proxyConfig": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Sirene company records.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/pappers-sirene-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("dltik/pappers-sirene-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 '{}' |
apify call dltik/pappers-sirene-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pappers / Sirene Scraper: 26M French Companies SIREN/SIRET",
        "description": "Search 26M+ French companies from the official Sirene database. Get SIREN, SIRET, legal name, address, dirigeants, NAF code, finances, GPS coordinates. Text search, geo radius, batch SIREN lookup, 53 filters. For B2B prospecting, KYC verification, CRM enrichment, lead generation. $5/1K companies.",
        "version": "1.0",
        "x-build-id": "V5nJqh0xhYurSPZFW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/dltik~pappers-sirene-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-dltik-pappers-sirene-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/dltik~pappers-sirene-scraper/runs": {
            "post": {
                "operationId": "runs-sync-dltik-pappers-sirene-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/dltik~pappers-sirene-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-dltik-pappers-sirene-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": {
                    "mode": {
                        "title": "Search mode",
                        "enum": [
                            "search",
                            "geo",
                            "siren"
                        ],
                        "type": "string",
                        "description": "search = text/filter search, geo = lat/lon/radius, siren = batch lookup by SIREN/SIRET list.",
                        "default": "search"
                    },
                    "query": {
                        "title": "Text query",
                        "type": "string",
                        "description": "Free text. Searches name, address, dirigeant. Example: 'boulangerie Lyon', 'Anthropic', 'Bernard Arnault'."
                    },
                    "sirens": {
                        "title": "SIREN/SIRET batch list",
                        "type": "array",
                        "description": "List of SIREN (9 digits) or SIRET (14 digits) for batch lookup. Set mode=siren.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "departement": {
                        "title": "Department code",
                        "type": "string",
                        "description": "Two-digit department code (e.g. '75' for Paris, '69' for Rhône, '13' for Bouches-du-Rhône)."
                    },
                    "code_postal": {
                        "title": "Postal code",
                        "type": "string",
                        "description": "5-digit postal code (e.g. '75009', '69002')."
                    },
                    "code_commune": {
                        "title": "INSEE commune code",
                        "type": "string",
                        "description": "INSEE city code (different from postal code). E.g. '75109' for Paris 9th arrondissement."
                    },
                    "region": {
                        "title": "Region code",
                        "type": "string",
                        "description": "Two-digit region code (e.g. '11' for Île-de-France, '84' for Auvergne-Rhône-Alpes)."
                    },
                    "activite_principale": {
                        "title": "NAF code (activité principale)",
                        "type": "string",
                        "description": "NAF/APE code (e.g. '62.01Z' for software, '56.10A' for restaurants, '47.11D' for supermarkets)."
                    },
                    "section_activite_principale": {
                        "title": "NAF section",
                        "type": "string",
                        "description": "Single-letter NAF section (A=agriculture, C=manufacturing, F=construction, G=trade, J=info/comm, K=finance, M=consulting, Q=health)."
                    },
                    "categorie_entreprise": {
                        "title": "Company size category",
                        "enum": [
                            "PME",
                            "ETI",
                            "GE"
                        ],
                        "type": "string",
                        "description": "PME (small/medium), ETI (intermediate), GE (large enterprise)."
                    },
                    "tranche_effectif_salarie": {
                        "title": "Employee bracket",
                        "type": "string",
                        "description": "INSEE bracket code: 00=0, 01=1-2, 02=3-5, 03=6-9, 11=10-19, 12=20-49, 21=50-99, 22=100-199, 31=200-249, 32=250-499, 41=500-999, 42=1000-1999, 51=2000-4999, 52=5000-9999, 53=10000+."
                    },
                    "etat_administratif": {
                        "title": "Administrative status",
                        "enum": [
                            "A",
                            "C"
                        ],
                        "type": "string",
                        "description": "A = Active, C = Ceased.",
                        "default": "A"
                    },
                    "nom_personne": {
                        "title": "Dirigeant last name",
                        "type": "string",
                        "description": "Search by manager / director last name (e.g. 'ARNAULT')."
                    },
                    "prenoms_personne": {
                        "title": "Dirigeant first name",
                        "type": "string",
                        "description": "Search by manager / director first name."
                    },
                    "type_personne": {
                        "title": "Person type",
                        "enum": [
                            "dirigeant",
                            "elu"
                        ],
                        "type": "string",
                        "description": "dirigeant (company manager) or elu (elected official)."
                    },
                    "ca_min": {
                        "title": "Revenue minimum (€)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Filter by minimum CA (chiffre d'affaires) in euros. Only available for companies that filed accounts."
                    },
                    "ca_max": {
                        "title": "Revenue maximum (€)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Filter by maximum CA in euros."
                    },
                    "lat": {
                        "title": "Latitude (geo mode)",
                        "type": "number",
                        "description": "Latitude for geo search. Use with mode=geo."
                    },
                    "lon": {
                        "title": "Longitude (geo mode)",
                        "type": "number",
                        "description": "Longitude for geo search. Use with mode=geo."
                    },
                    "radiusKm": {
                        "title": "Radius (km)",
                        "minimum": 0.1,
                        "maximum": 50,
                        "type": "number",
                        "description": "Search radius in km, max 50."
                    },
                    "est_rge": {
                        "title": "RGE certified only",
                        "type": "boolean",
                        "description": "Reconnu Garant de l'Environnement (eco-construction).",
                        "default": false
                    },
                    "est_qualiopi": {
                        "title": "Qualiopi certified only",
                        "type": "boolean",
                        "description": "Companies with Qualiopi training certification.",
                        "default": false
                    },
                    "est_bio": {
                        "title": "Bio certified only",
                        "type": "boolean",
                        "description": "Organic/bio certified companies (Agence Bio).",
                        "default": false
                    },
                    "est_ess": {
                        "title": "Social economy only",
                        "type": "boolean",
                        "description": "Économie Sociale et Solidaire.",
                        "default": false
                    },
                    "est_association": {
                        "title": "Associations only",
                        "type": "boolean",
                        "description": "Restrict to associations (loi 1901).",
                        "default": false
                    },
                    "est_organisme_formation": {
                        "title": "Training orgs only",
                        "type": "boolean",
                        "description": "Companies registered as training organizations.",
                        "default": false
                    },
                    "est_societe_mission": {
                        "title": "Mission-driven companies only",
                        "type": "boolean",
                        "description": "Société à mission (B-Corp equivalent).",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Max companies to return. API caps total search at ~10,000 results per query.",
                        "default": 100
                    },
                    "proxyConfig": {
                        "title": "Proxy (rarely needed)",
                        "type": "object",
                        "description": "Optional Apify proxy. The API gouv has no anti-bot — proxy rarely needed unless your IP is rate-limited.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
