# French Companies API: SIRENE, SIREN, SIRET & NAF (`responsible_front_evw/france-companies-b2b-leads`) Actor

France company lists from the official SIRENE / RNE register, no API key. Filter by NAF code, department, region, postcode, headcount, revenue and RGE, Qualiopi, organic labels. Local establishments, VAT, finances. No repeats between runs. No sole traders, SCI or director names. No emails or phones.

- **URL**: https://apify.com/responsible_front_evw/france-companies-b2b-leads.md
- **Developed by:** [Open Data Tools](https://apify.com/responsible_front_evw) (community)
- **Categories:** Lead generation, Business, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## French Companies API: SIRENE, SIREN, SIRET & NAF

Build lists of French companies from the **official Sirene / RNE register**, through the French government's open API (Recherche d'entreprises). Filter by sector, area, size, revenue and official labels, and get one clean row per company, with the local establishments that match your area.

**No personal data.** Sole traders (whose company name is a person's name) and real estate civil companies (SCI) are never returned, and director names are removed. Only companies acting as officers (holdings, auditors) are kept. Safer for GDPR when you store, enrich or resell the data.

### What you can do

- **Prospect lists by sector and area:** all bakeries in Gironde, all software companies with 10 to 49 employees in Occitanie, all RGE-certified heating installers in the Rhone.
- **Local establishments:** many chains have their head office in Paris. With *Include local establishments*, each row lists the shops or sites that match your department, region or postcode, with SIRET, address, sign, headcount and GPS coordinates.
- **Finances:** last published revenue and net income, with the history by year.
- **Official labels:** RGE (energy renovation), Qualiopi (training), organic (Agence Bio), social economy (ESS), societe a mission, food safety inspections, gender equality index.
- **New companies:** keep only companies created after a date.
- **Alerts:** *Only new companies since the last run* remembers what you already received for the same search. It means new to you, not newly created: for newly created companies filter by creation date (`createdAfter`). Schedule it daily or weekly and you never pay twice for the same company.

### Input example

```json
{
  "nafCodes": ["10.71C"],
  "departments": ["33"],
  "onlyEmployers": true,
  "maxEstablishmentsPerCompany": 5,
  "maxItems": 100
}
```

You need at least one filter: a NAF code, a section, an area, or a search text. NAF codes use the dot: `62.01Z`, `43.22B`, `56.10A`.

### Output example (shortened)

```json
{
  "siren": "539403170",
  "name": "VERIC",
  "legalForm": "SAS",
  "nafCode": "10.71C",
  "companyCategory": "PME",
  "headcountRange": "10-19",
  "createdOn": "2012-01-20",
  "openEstablishments": 4,
  "headOfficeAddress": "42 AVENUE CHARLES DE GAULLE 33260 LA TESTE-DE-BUCH",
  "headOfficeLatitude": 44.633832306,
  "headOfficeLongitude": -1.137891208,
  "vatNumber": "FR38539403170",
  "revenue": 2138070,
  "netIncome": -184542,
  "financialYear": 2023,
  "labels": ["foodSafetyInspected"],
  "corporateOfficers": [{"siren": "478165418", "name": "KEVALI", "role": "Président de SAS"}],
  "personalDataRemoved": false,
  "matchingEstablishments": [
    {"siret": "53940317000043", "name": "AUX SAVEURS D'ALEX", "signs": ["BOULANGERIE LES MIMOSAS"], "address": "58 AV DU MAL DE LATTRE DE TASSIGNY 33470 GUJAN-MESTRAS", "city": "GUJAN-MESTRAS", "createdOn": "2019-02-22", "latitude": 44.637370495, "longitude": -1.110341234}
  ],
  "companyUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/539403170",
  "source": "API Recherche d'entreprises (DINUM), data from INSEE Sirene and INPI RNE, Licence Ouverte 2.0"
}
```

### Fields

SIREN, name, acronym, legal form, NAF code (2008 and 2025), section, size category (PME, ETI, GE), headcount range and year, creation and closing date, status, number of establishments, head office SIRET, address, postcode, city, department, region and coordinates, employer flag, VAT number, revenue, net income, finances by year, labels, collective agreements (IDCC), corporate officers that are companies, local establishments, official page link and source.

Revenue is empty when the company keeps its accounts confidential.

### Pricing

Pay per result: you pay for each company delivered, nothing for companies skipped by your filters or already seen in alert mode.

| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Each company returned | $0.002 ($2 per 1,000) |

### Limits

- The official API returns at most **10,000 companies per search**. For more, split by department or headcount.
- The register cannot be sorted by creation date: with *Created on or after*, the Actor reads up to *Maximum companies scanned* to find them.
- Data is as fresh as the official register (updated daily). Companies that asked INSEE not to be published are not in the API.
- Some company names include a founder's name. That is the official legal name of a company, not a private person's data.

### Source and licence

Data from the French administration: API Recherche d'entreprises (DINUM), built on INSEE Sirene and INPI RNE, under the Licence Ouverte / Open Licence 2.0. You can reuse it, also commercially, mentioning the source (it is in every row). This Actor is not affiliated with or endorsed by the French administration.

### FAQ

#### Is this a SIRENE / SIREN / SIRET API?

It uses the official French government API built on INSEE Sirene and INPI RNE, the same register behind sites such as Pappers or Societe.com. No key, no login.

#### Can I build B2B lead lists by sector and area?

Yes: filter by NAF code, department, region, postcode, headcount, revenue and labels (RGE, Qualiopi, organic, ESS). You get the local establishments in your area.

#### How much does it cost?

$2 per 1,000 companies. Companies skipped by your filters are not charged.

#### Why no director names or sole traders?

To keep the data free of personal data (GDPR). Sole traders are named after a person, so they are skipped, and director names are never returned.

#### Can I get only new companies?

To get only companies you have not received yet, turn on the "only new since last run" mode and schedule it. For newly created companies, filter by creation date (`createdAfter`).

### Questions or a missing field?

Open an issue in the **Issues** tab. Feature requests are welcome.

# Actor input Schema

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

INSEE activity codes with the dot, for example 10.71C (bakery), 62.01Z (software), 43.22B (heating and plumbing), 56.10A (restaurants). Applies to the company's main activity.

## `sections` (type: `array`):

Optional broad sectors: A agriculture, C manufacturing, F construction, G trade, H transport, I hotels and restaurants, J information and communication, K finance, L real estate, M professional services, N admin services, P education, Q health, R arts, S other services.

## `departments` (type: `array`):

Two or three character department codes, for example 33 (Gironde), 69 (Rhone), 75 (Paris), 2A (Corse-du-Sud), 971 (Guadeloupe). Matches companies with at least one establishment there.

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

INSEE region codes, for example 11 (Ile-de-France), 84 (Auvergne-Rhone-Alpes), 75 (Nouvelle-Aquitaine), 76 (Occitanie), 93 (Provence-Alpes-Cote d'Azur), 32 (Hauts-de-France), 44 (Grand Est), 53 (Brittany), 52 (Pays de la Loire).

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

Five-digit postcodes, for example 75011, 31000.

## `communeCodes` (type: `array`):

Five-character INSEE commune codes (not postcodes), for example 33063 (Bordeaux).

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

Optional words in the company name or address, or a SIREN/SIRET number.

## `headcountRanges` (type: `array`):

INSEE codes: 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+), NN (non-employer).

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

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

## `legalForms` (type: `array`):

Optional INSEE legal category codes, for example 5710 (SAS), 5499 (SARL), 5720 (SASU), 5599 (SA), 9220 (association). Sole traders (1000) and real estate civil companies (SCI) are always left out.

## `revenueMin` (type: `integer`):

Only companies whose last published revenue is at least this. Companies without published accounts are left out when you use it.

## `revenueMax` (type: `integer`):

Only companies whose last published revenue is at most this.

## `netIncomeMin` (type: `integer`):

Optional.

## `netIncomeMax` (type: `integer`):

Optional.

## `createdAfter` (type: `string`):

Optional date (YYYY-MM-DD). Keeps only companies created on or after it. The register cannot sort by date, so the Actor reads up to 'Maximum companies scanned' and you only pay for the ones kept.

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

Leave out closed companies.

## `onlyEmployers` (type: `boolean`):

Keep only companies whose head office has employees.

## `onlyRge` (type: `boolean`):

Only RGE certified (energy renovation).

## `onlyQualiopi` (type: `boolean`):

Only Qualiopi certified (training).

## `onlyOrganic` (type: `boolean`):

Only organic certified (Agence Bio).

## `onlySocialEconomy` (type: `boolean`):

Only social and solidarity economy (ESS).

## `onlyAssociations` (type: `boolean`):

Only associations.

## `onlyTrainingOrganisations` (type: `boolean`):

Only training organisations.

## `onlyMissionCompanies` (type: `boolean`):

Only 'societes a mission'.

## `sortBySize` (type: `boolean`):

Sort by number of establishments.

## `includeEstablishments` (type: `boolean`):

For each company, the establishments (shops, sites) that match your area and filters, with SIRET, address, sign, headcount and coordinates. Ideal when the head office is elsewhere.

## `maxEstablishmentsPerCompany` (type: `integer`):

From 1 to 100.

## `onlyNewSinceLastRun` (type: `boolean`):

Remembers the companies already delivered for this same search and skips them, so you never pay twice for the same company. Use it with a schedule.

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

Stop after this many companies. The official API returns at most 10,000 per search: narrow the filters for more.

## `maxScannedCompanies` (type: `integer`):

Only used with 'Created on or after', 'Only employers' or alerts: how many companies to read to find the ones you want. You only pay for the companies delivered.

## `requestDelaySecs` (type: `integer`):

Minimum 3, to be gentle with the public API (its limit is 7 per second). Lower values are raised to 3.

## Actor input object example

```json
{
  "nafCodes": [
    "10.71C"
  ],
  "departments": [
    "33"
  ],
  "onlyActive": true,
  "onlyEmployers": false,
  "onlyRge": false,
  "onlyQualiopi": false,
  "onlyOrganic": false,
  "onlySocialEconomy": false,
  "onlyAssociations": false,
  "onlyTrainingOrganisations": false,
  "onlyMissionCompanies": false,
  "sortBySize": false,
  "includeEstablishments": true,
  "maxEstablishmentsPerCompany": 10,
  "onlyNewSinceLastRun": false,
  "maxItems": 100,
  "maxScannedCompanies": 2000,
  "requestDelaySecs": 3
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "nafCodes": [
        "10.71C"
    ],
    "departments": [
        "33"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("responsible_front_evw/france-companies-b2b-leads").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 = {
    "nafCodes": ["10.71C"],
    "departments": ["33"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("responsible_front_evw/france-companies-b2b-leads").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 '{
  "nafCodes": [
    "10.71C"
  ],
  "departments": [
    "33"
  ],
  "maxItems": 100
}' |
apify call responsible_front_evw/france-companies-b2b-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,responsible_front_evw/france-companies-b2b-leads"
        }
    }
}
```

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/47zX99TvVMFeqqIJT/builds/Xu0dfgoOjQiRsaBy3/openapi.json
