# France Company Search – SIRENE Data, NAF, Directors & VAT (`gazidev/france-company-search`) Actor

Search and export French companies from the official SIRENE/RNE register (api.gouv.fr): by name, SIREN/SIRET, NAF code, département, postal code, size, revenue. Get legal form, head office address, employees, revenue, directors, VAT number. $1.50 per 1,000 companies.

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

## Pricing

from $1.50 / 1,000 companies

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

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## France Company Search – SIRENE Data, NAF Codes, Directors & VAT (Annuaire des Entreprises)

Search and export **French companies** from the **official public register** (INSEE SIRENE + RNE), through the government's open *Recherche d'entreprises* API, the source behind annuaire-entreprises.data.gouv.fr. You can search by **name or keyword**, by **SIREN/SIRET**, or with filters such as **NAF/APE activity code, département, postal code, region, company size, head count, revenue and legal form**. Each company comes back as one clean row:

- **Identity:** SIREN, head-office SIRET, name, legal name, acronym, trade names, status (active or closed), creation and closing dates.
- **Activity:** NAF code **with its label** (for example `62.01Z – Programmation informatique`), section, and the new NAF 2025 code.
- **Legal form** with its label (SAS, SARL, EURL, SA, SCI, association…), size category (PME, ETI, GE), **head-count range** and number of establishments.
- **Head-office address** (street, postal code, city, INSEE commune code, département, region, GPS coordinates).
- **Finances:** latest **revenue** and **net income** plus their history, when the company has published its accounts.
- **Directors** (dirigeants) with name, role and birth month, plus auditors, and a ready-made `mainDirector`.
- **Intra-EU VAT number**, collective agreements (IDCC), and labels: ESS, Qualiopi, RGE, organic, training organisation, *société à mission*.

**$1.50 per 1,000 companies.** That is about 5× cheaper than the most-used French company scraper on the Store. Invalid and not-found numbers are free.

### What can I use it for?

- **B2B lead lists:** for example *all web agencies (NAF 73.11Z, 62.01Z) in the Rhône with 10+ employees*, with directors' names and the head-office address.
- **KYC and supplier checks:** paste a list of SIREN/SIRET numbers and get status, legal form, VAT number, directors and revenue.
- **CRM enrichment:** add NAF code, head count, revenue and VAT number to French accounts.
- **Market sizing:** count and map companies by activity, size and département. GPS coordinates are included.
- **New business monitoring:** schedule a search and use `createdAt` to spot newly registered companies in your sector.

### Input

| Field | Description |
|---|---|
| `queries` | Free-text searches: company name, keyword (`boulangerie`), director name, SIREN |
| `sirenOrSiret`, `bulkIds` | Exact lookups by SIREN (9 digits) or SIRET (14 digits). Checked locally with the Luhn algorithm |
| `nafCodes`, `nafSections` | Activity filters: `62.01Z` or `6201Z`, and sections `A`–`U` |
| `departements`, `postalCodes`, `regions` | Location filters (`75`, `69`, `2A`, `974` / `75011` / `11`, `84`…) |
| `companyCategories`, `minEmployees` | `PME`, `ETI`, `GE` / minimum head count (INSEE ranges) |
| `minRevenue`, `maxRevenue` | Latest published revenue in € |
| `legalFormCodes` | INSEE codes: `5710` SAS, `5720` SASU, `5499` SARL, `5498` EURL, `6540` SCI, `9220` association… |
| `onlyActive`, `excludeSoleTraders` | Active only (default) and companies only (no micro-entrepreneurs) |
| `includeDirectors`, `includeMatchingEstablishments` | Directors (default on) and the matching sites with SIRET and address |
| `maxResults`, `autoSplitByDepartement` | Results cap. Searches with more than 10,000 hits are split by département automatically |

```json
{
  "nafCodes": ["73.11Z", "62.01Z"],
  "departements": ["69", "38"],
  "minEmployees": 10,
  "excludeSoleTraders": true,
  "maxResults": 500
}
```

### Output

The Output tab has three tables: **Companies**, **Address & directors** and **Size & finances**.

```json
{
  "siren": "794598813",
  "siret": "79459881300077",
  "name": "DOCTOLIB",
  "status": "active",
  "createdAt": "2013-07-15",
  "nafCode": "62.01Z",
  "nafLabel": "Programmation informatique",
  "legalForm": "SAS (société par actions simplifiée)",
  "companyCategory": "ETI",
  "employeeRange": "1,000-1,999",
  "establishments": 9,
  "vatNumber": "FR14794598813",
  "address": "54 QUAI CHARLES PASQUA 92300 LEVALLOIS-PERRET",
  "postalCode": "92300",
  "city": "LEVALLOIS-PERRET",
  "departement": "92",
  "latitude": 48.900771302,
  "longitude": 2.2849148026,
  "latestRevenue": 311448000,
  "latestNetIncome": -127499000,
  "latestFinancialYear": 2024,
  "directors": [
    {"type": "person", "lastName": "NIOX-CHATEAU", "firstNames": "STANISLAS", "role": "Président de SAS", "birthYearMonth": "1987-01"},
    {"type": "company", "name": "KPMG S.A", "siren": "775726417", "role": "Commissaire aux comptes titulaire"}
  ],
  "mainDirector": "Stanislas Niox-Chateau",
  "mainDirectorRole": "Président de SAS",
  "isESS": false,
  "isQualiopi": false,
  "annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/794598813"
}
```

Location filters match **any establishment** of a company. The row shows the **head office**, which can be in another département. Turn on `includeMatchingEstablishments` to get the local sites (SIRET, address, GPS).

### Pricing

Pay per event: **$0.0015 per company** ($1.50 per 1,000), plus $0.00005 per run start. Invalid SIREN/SIRET numbers, not-found numbers and duplicates are free.

| Actor | Monthly users | Price per 1,000 companies |
|---|---|---|
| **This Actor** | – | **$1.50**, directors, finances, VAT, NAF labels, more than 10,000 results per search |
| dltik/pappers-sirene-scraper | 19 | $8 (+ $10 "analyzed") |
| bovi/companies-france | 10 | $4 |
| logiover/france-company-registry-scraper | 6 | $3.50 |
| corent1robert/recherche-entreprises-scraper | 4 | $5.99 |

Competitor figures are from the Apify Store on 2026-10-05. Example: 5,000 IT companies with directors cost **$7.50**.

### FAQ

**Where does the data come from?** From the French government's open API *Recherche d'entreprises* (recherche-entreprises.api.gouv.fr, operated by DINUM). It combines INSEE's SIRENE register, the national company register (RNE/INPI), published accounts and official labels. The data is published under the **Licence Ouverte / Etalab 2.0**, which allows commercial reuse with attribution. Source: *INSEE, INPI, DINUM – Annuaire des Entreprises*.

**Is there personal data?** Directors' names and birth month and year are published by the French state in the RNE. People who asked INSEE not to be listed (*non-diffusible*) are masked by the source and show as `[NON-DIFFUSIBLE]`. If you process the data in the EU, you are the data controller. Use it for B2B purposes with a legitimate interest, and honour opt-out requests.

**No phone numbers or emails?** The official register does not include them. To add them, pass the company websites to our [Website Contact Finder](https://apify.com/gazidev/website-contact-finder).

**How many results can I get?** The API returns up to 10,000 companies per search. With `autoSplitByDepartement` on, larger searches (for example the whole NAF 62.01Z) are repeated per département and deduplicated, so you can export tens of thousands of companies.

**How fast is it?** About 25 companies per request at 2 requests per second (the API allows 7 per second per IP), so roughly 3,000 companies per minute.

### Use with AI agents / Apify MCP

Ask *"list 50 SAS architecture firms in Lyon with their directors"* or *"check these 20 SIRENs: are they active, and what is their VAT number?"*. Through the [Apify MCP server](https://mcp.apify.com) (`https://mcp.apify.com?actors=gazidev/france-company-search`), Claude, ChatGPT, Cursor and other MCP clients can call it directly. Over the API: `POST https://api.apify.com/v2/acts/gazidev~france-company-search/run-sync-get-dataset-items`.

### Related Actors

[Website Contact Finder](https://apify.com/gazidev/website-contact-finder) · [Imprint Scraper (DE/AT/CH)](https://apify.com/gazidev/imprint-scraper) · [Brazil CNPJ Lookup](https://apify.com/gazidev/brazil-cnpj-lookup) · [Global Tender Alerts](https://apify.com/gazidev/global-tender-alerts)

# Actor input Schema

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

Free-text searches in the French company register: a company or brand name (`Doctolib`), an activity keyword (`boulangerie`, `agence web`), a director's name or a SIREN/SIRET. Combined with the filters below. Leave empty to list companies by filters only.

## `sirenOrSiret` (type: `array`):

Look up specific companies: 9-digit SIREN (`794598813`) or 14-digit SIRET (`79459881300033`), spaces allowed. Numbers are validated locally (Luhn); invalid or not-found numbers are free.

## `bulkIds` (type: `string`):

Paste many SIREN/SIRET numbers separated by new lines, commas or spaces.

## `nafCodes` (type: `array`):

e.g. `62.01Z` (programmation informatique), `73.11Z` (agences de publicité), `56.10A` (restauration traditionnelle), `10.71C` (boulangerie). `6201Z` is accepted too.

## `nafSections` (type: `array`):

Broad NAF sections, e.g. `J` (information & communication), `F` (construction), `I` (accommodation & food).

## `departements` (type: `array`):

Codes like `75` (Paris), `69` (Rhône), `13`, `2A`, `974`.

## `postalCodes` (type: `array`):

5-digit codes, e.g. `75011`.

## `regions` (type: `array`):

e.g. `11` Île-de-France, `84` Auvergne-Rhône-Alpes, `93` Provence-Alpes-Côte d'Azur, `75` Nouvelle-Aquitaine, `76` Occitanie, `32` Hauts-de-France, `44` Grand Est, `52` Pays de la Loire, `53` Bretagne.

## `companyCategories` (type: `array`):

`PME` (SME), `ETI` (mid-size), `GE` (large enterprise).

## `minEmployees` (type: `integer`):

Uses the INSEE head-count ranges (e.g. 10 → 10-19 and above).

## `minRevenue` (type: `integer`):

Latest published turnover (chiffre d'affaires), when filed publicly.

## `maxRevenue` (type: `integer`):

Latest published turnover upper bound.

## `legalFormCodes` (type: `array`):

e.g. `5710` SAS, `5720` SASU, `5499` SARL, `5498` EURL, `5599` SA, `6540` SCI, `9220` association.

## `onlyActive` (type: `boolean`):

Skip closed companies (état administratif = cessée).

## `excludeSoleTraders` (type: `boolean`):

Useful for B2B lists: keep only companies (sociétés, associations…).

## `includeDirectors` (type: `boolean`):

Officers from the RNE as published (name, role, birth month/year), plus auditors. Adds `mainDirector`.

## `includeMatchingEstablishments` (type: `boolean`):

For each company, add the establishments (sites) that match your search/filters (up to 10), with SIRET and address.

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

Stop after this many companies in total (0 = no limit).

## `autoSplitByDepartement` (type: `boolean`):

The API returns at most 10,000 companies per search. When a search has more, and no département/postal code filter is set, it is repeated per département automatically.

## `requestsPerSecond` (type: `integer`):

The public API allows 7 requests/second per IP; the default leaves headroom.

## Actor input object example

```json
{
  "queries": [
    "agence web"
  ],
  "onlyActive": true,
  "excludeSoleTraders": false,
  "includeDirectors": true,
  "includeMatchingEstablishments": false,
  "maxResults": 50,
  "autoSplitByDepartement": true,
  "requestsPerSecond": 2
}
```

# Actor output Schema

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

No description

## `contacts` (type: `string`):

No description

## `finances` (type: `string`):

No description

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

No description

## `summary` (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 = {
    "queries": [
        "agence web"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("gazidev/france-company-search").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["agence web"],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("gazidev/france-company-search").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 '{
  "queries": [
    "agence web"
  ],
  "maxResults": 50
}' |
apify call gazidev/france-company-search --silent --output-dataset

```

## MCP server setup

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

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/JHyUJu3LGkSF6lIsj/builds/YiqNqB6OmXcYftsW6/openapi.json
