# France Company List – SIRENE B2B Leads, SIREN & SIRET (`ostrata/france-company-list`) Actor

Build French company lists (B2B leads) from the official SIRENE / INSEE register: filter by NAF/APE code, département, headcount, revenue and labels (RGE, Qualiopi). SIREN, SIRET, VAT, address, revenue. Annuaire des entreprises data, no scraping, no personal data. MCP-ready.

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

## Pricing

from $2.00 / 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 List – SIRENE B2B Leads, SIREN & SIRET

**Build lists of French companies from the official register**, filtered by activity (NAF/APE code), area, headcount, size category, revenue and labels. Every row carries the SIREN, head-office SIRET, VAT number, legal form, NAF code, headcount band, head-office address and latest published revenue.

**Also known as:** French companies list, SIRENE export, base SIRENE, INSEE company data, SIRET search by NAF code, France B2B leads, French lead lists. 🇫🇷 *liste d'entreprises françaises, fichier d'entreprises par code NAF / APE, export base SIRENE, annuaire des entreprises, prospection B2B, entreprises RGE ou Qualiopi*.

Data comes from the French government's **API Recherche d'entreprises** (INSEE Sirene + INPI RNE, DINUM), published under **Licence Ouverte 2.0**. No scraping, no login, no API key, no personal data.

### Filters

| Filter | Example |
|---|---|
| `nafCodes` | `62.01Z` (software), `43.22B` (plumbing/heating), `70.22Z` (consulting); `6201Z` works too |
| `sections` | `F` (construction), `J` (information & communication)… |
| `departements`, `regions`, `postalCodes`, `communes` | `54`, `2A`, `974` · `44` (Grand Est) · `88000` · `54395` |
| `geoMatch` | `head_office` (default: company headquartered in the area) or `any_establishment` |
| `employeeBands` | INSEE bands `11` (10-19), `12` (20-49), `21` (50-99)… |
| `companyCategories` | `PME`, `ETI`, `GE` |
| `legalForms` | `5710` SAS, `5720` SASU, `5499` SARL… |
| `labels` | `rge`, `qualiopi`, `bio`, `ess`, `societe_mission`, `egapro`… |
| `minRevenue` / `maxRevenue`, `minNetIncome` / `maxNetIncome` | latest published accounts |
| `createdAfter` / `createdBefore` | `2015-01-01` |
| `keywords` | free text on names and addresses |
| `activeOnly` (default on), `excludeSoleProprietors` (default on), `sortBySize`, `maxResults` | |

```json
{ "nafCodes": ["62.01Z", "62.02A"], "departements": ["54"], "employeeBands": ["11", "12", "21"], "maxResults": 500 }
```

### Output (real local run, 19 Oct 2026: IT services, Meurthe-et-Moselle, 10-99 staff)

| SIREN | Legal name | NAF | Headcount | City | Revenue | VAT |
|---|---|---|---|---|---|---|
| 833037161 | APREX | 62.01Z | 20-49 | NANCY | – | FR03833037161 |
| 508349990 | ARKETEAM | 62.01Z | 50-99 | VANDŒUVRE-LÈS-NANCY | 8 092 004 € | FR74508349990 |

Other test runs: RGE-certified construction companies in Épinal (24 companies), consulting PMEs headquartered in Île-de-France with revenue ≥ 1 M€ created since 2015 (25 companies).

Each row also has `headOffice` (address, postal code, city, commune, département, region, GPS), `legalForm`, `companyCategory`, `creationDate`, `establishments`, `labels`, `collectiveAgreements`, `annuaireUrl` (official company page) and, optionally, `matchingEstablishments` (SIRET + address of establishments in the area).

### Pricing (pay per event)

- **$0.002 per company delivered** (`company`, $2 per 1,000).
- Rows dropped by the head-office or creation-date filters are **free**. Errors are free.
- Set a *maximum cost per run*: the Actor stops before going over it.

### Use it from AI agents (MCP)

```json
{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=ostrata/france-company-list" } } }
```

*"List 50 SaaS companies (NAF 58.29C) headquartered in Lyon with 20-99 employees."*

### Limitations

- The API returns at most 10,000 results per query. Without an area filter, the Actor continues département by département; with an area filter, narrow it (e.g. postal codes) to go further.
- Revenue and net income exist only for companies that publish accounts; `0` can mean accounts filed as confidential.
- Companies that opted out of public diffusion are not in the API.
- The API allows 7 requests per second per IP; the Actor stays below that (about 6 per second) and backs off on 429.

### Privacy

No directors, shareholders, emails or phone numbers are returned. **Sole traders (entrepreneurs individuels) are excluded by default.** If you include them, their name, street address and coordinates are removed (they are personal data); only the SIREN, activity, city and dates remain.

### Related Actors

- [EU Company Verification (KYB)](https://apify.com/ostrata/eu-company-check): verify companies from a name, SIREN/SIRET, VAT number or LEI (register status, VIES VAT, BODACC insolvency, LEI).
- [Website to Company (Impressum & Mentions Légales)](https://apify.com/ostrata/website-company-check): find the legal entity behind a website (SIREN/VAT from the legal notice) and verify it.
- [Greenhouse, Lever & Ashby Jobs API](https://apify.com/ostrata/ats-jobs-api): normalized job postings from Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee boards, with only-new-jobs mode.
- [AI Brand Visibility Tracker](https://apify.com/ostrata/ai-search-visibility): check whether ChatGPT, Perplexity and Gemini mention and cite your brand, with position, competitors and share of voice (your own API keys).

***

### 🇫🇷 En bref

**Constituez des listes d'entreprises françaises depuis le registre officiel** (API Recherche d'entreprises, INSEE Sirene / INPI RNE, Licence Ouverte 2.0) : code NAF, département, code postal, tranche d'effectif, catégorie (PME/ETI/GE), chiffre d'affaires, labels (RGE, Qualiopi, ESS…). SIREN, SIRET du siège, TVA intracommunautaire, adresse, effectif et CA dans chaque ligne. **0,002 $ par entreprise.** Entrepreneurs individuels exclus par défaut, aucune donnée sur les dirigeants.

Publié par Sublime Traders SAS (Ostrata), France.

# Actor input Schema

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

NAF rev.2 activity codes, e.g. 62.01Z (software), 43.22B (heating/plumbing), 70.22Z (consulting). "6201Z" also works.

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

Broad NAF sections (A to U). Use NAF codes for precise targeting.

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

Département codes, e.g. 54, 75, 2A, 974.

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

2-digit INSEE region codes, e.g. 11 Île-de-France, 44 Grand Est, 84 Auvergne-Rhône-Alpes.

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

5-digit postal codes, e.g. 54000.

## `communes` (type: `array`):

5-character INSEE commune codes (not postal codes), e.g. 54395 for Nancy.

## `geoMatch` (type: `string`):

How the area filters apply. The register matches companies that have any establishment in the area. "Head office" keeps only companies headquartered there. Rows dropped by this filter are free.

## `employeeBands` (type: `array`):

INSEE headcount bands (salaried staff, latest year known).

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

INSEE category: PME (SME), ETI (mid-cap), GE (large).

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

4-digit INSEE legal form codes, e.g. 5710 SAS, 5720 SASU, 5499 SARL, 5498 EURL, 5599 SA.

## `labels` (type: `array`):

Only companies holding all selected labels.

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

Latest published turnover (chiffre d'affaires). Only companies that publish accounts can match.

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

Latest published turnover.

## `minNetIncome` (type: `integer`):

Latest published net result (can be negative).

## `maxNetIncome` (type: `integer`):

Latest published net result.

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

Company creation date, YYYY-MM-DD. Applied after retrieval; rows dropped are free.

## `createdBefore` (type: `string`):

Company creation date, YYYY-MM-DD.

## `keywords` (type: `string`):

Free text matched against company names and addresses, e.g. "logiciel" or "boulangerie".

## `activeOnly` (type: `boolean`):

Exclude companies that have ceased trading.

## `excludeSoleProprietors` (type: `boolean`):

Sole traders (entrepreneurs individuels) are natural persons. When off, they are included but their name, street address and coordinates are removed (personal data).

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

Add up to 5 establishments (SIRET, address, NAF) per company that match the area filter.

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

Sort by number of establishments instead of relevance.

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

Stop after this many companies (each delivered company is one billable event). Above 10 000 matches without an area filter, the Actor continues département by département.

## Actor input object example

```json
{
  "nafCodes": [
    "62.01Z",
    "62.02A"
  ],
  "departements": [
    "54",
    "57",
    "88"
  ],
  "geoMatch": "head_office",
  "activeOnly": true,
  "excludeSoleProprietors": true,
  "includeMatchingEstablishments": false,
  "sortBySize": false,
  "maxResults": 100
}
```

# Actor output Schema

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

Dataset items, one per company.

## `summary` (type: `string`):

Matching total, rows scanned, delivered and filtered, and the query sent to the API.

# 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": [
        "62.01Z",
        "62.02A"
    ],
    "departements": [
        "54",
        "57",
        "88"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ostrata/france-company-list").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": [
        "62.01Z",
        "62.02A",
    ],
    "departements": [
        "54",
        "57",
        "88",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("ostrata/france-company-list").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": [
    "62.01Z",
    "62.02A"
  ],
  "departements": [
    "54",
    "57",
    "88"
  ]
}' |
apify call ostrata/france-company-list --silent --output-dataset

```

## MCP server setup

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

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/Fa9jquqa6rjQETd1e/builds/4vUTJtPlRUxPjvXWg/openapi.json
