# France SIRENE Companies API | INSEE B2B Leads — Open Data (`runix/french-companies-api`) Actor

INSEE SIRENE open data: SIREN, SIRET, NAF, legal form, status, HQ address & GPS, headcount band, labels, VAT, revenue where given, officers where published. Filter by department, NAF, size. No API key. Pay per company ($3/1K). HTTP-only—no browser scraping.

- **URL**: https://apify.com/runix/french-companies-api.md
- **Developed by:** [Runix Services](https://apify.com/runix) (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.20 / 1,000 company records

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/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 Leads & Directors

Search French companies in the official **SIRENE** business register and export them as clean B2B lead lists: SIREN and SIRET, legal name, activity code (NAF / APE), headcount band, head office address with GPS, the local establishment that matched your area, directors, VAT number, latest revenue and net income, and certifications such as RGE or Qualiopi.

The data comes from **API Recherche d'entreprises**, the French government's open company-search API (DINUM, the service behind annuaire-entreprises.data.gouv.fr). No API key, no login, no browser and no proxies. **$3 per 1,000 companies.**

### What you can do with it

- **Build a prospect list** of every software company (NAF 62.01Z) with 10-49 employees in Lyon, Paris or any department.
- **Find tradespeople** by activity code: electricians and plumbers (43.2), roofers (43.91), restaurants (56.10), accountants (69.20Z).
- **Target by size and money**: INSEE size category (SME, mid-size, large), headcount bands and published revenue ranges.
- **Find certified companies**: RGE energy-renovation contractors, Qualiopi training providers, organic producers, social-economy companies.
- **Enrich or verify one company** from its SIREN or SIRET: legal form, VAT number, directors, revenue, status.
- **Get lead alerts**: schedule the Actor with *Only new companies* on and each run returns only companies it has not returned before.

### Compliant by default

- **Companies that refuse prospecting are skipped.** French companies can opt out of commercial use of their register data. This Actor reads that flag and leaves them out unless you turn *Skip companies that refuse prospecting* off (useful for KYC or research, not for outreach). Expect a large share of companies to be skipped: in our tests between a third and two thirds of matches had opted out.
- **Sole proprietors are skipped by default**, because they are individuals. Choose *Company type: All* to include them.
- **Directors come without birth dates.** You get each director's name and role (Président, Gérant, Directeur général, auditor…), never personal dates.

### Input

| Field | What it does |
|---|---|
| Activity codes (NAF / APE) | Exact codes like `62.01Z` or `6201Z`, or a prefix: `62` takes every IT-services code, `43.2` every electrical and plumbing code. |
| Departments | `75`, `69`, `13`, `2A`, `971`… Each department is searched separately, up to 10,000 companies each. |
| Postal codes | 5-digit codes such as `69001`. |
| Regions | Any French region, mainland or overseas. |
| Sectors | Broad NAF sections A to U (Construction, Manufacturing, Information and communication…). |
| Headcount | INSEE employee bands, from *no employees* to *10,000+*. |
| Company size category | PME (SME), ETI (mid-size) or GE (large). |
| Minimum / maximum revenue (EUR) | Latest published revenue. Only companies that publish their accounts have one. |
| Certifications and labels | RGE, Qualiopi, Organic, ESS, training provider, mission-driven company, EPV, SIAE, FINESS. |
| Search text | Words from the name, address or a director's name, or a SIREN / SIRET. |
| Company type | Companies (default), All, Sole proprietors only, Associations only. |
| Active companies only | On by default. |
| Include directors | On by default. |
| Largest companies first | Sort by number of establishments. |
| Only new companies / Monitor name | Return only companies not returned by earlier runs of the same search. |
| Max results | The most companies to return (and pay for) in one run. |

Example: software companies in the Rhône with 10 to 49 employees.

```json
{
    "nafCodes": ["62.01Z"],
    "departments": ["69"],
    "headcountBands": ["11", "12"],
    "maxResults": 500
}
```

### Output

One row per company. Example (shortened):

```json
{
    "siren": "348940255",
    "siret": "34894025500022",
    "name": "CEGEDIM SANTE (SOFILOCA)",
    "legalForm": "SAS, société par actions simplifiée",
    "nafCode": "62.01Z",
    "nafLabel": "Programmation informatique",
    "sector": "Information and communication",
    "companyCategory": "ETI",
    "headcount": "500-999 employees",
    "createdOn": "1988-12-01",
    "address": "137 RUE D'AGUESSEAU 92100 BOULOGNE-BILLANCOURT",
    "city": "BOULOGNE-BILLANCOURT",
    "departmentName": "Hauts-de-Seine",
    "latitude": 48.8375,
    "longitude": 2.2380,
    "matchedEstablishment": {
        "siret": "34894025500097",
        "address": "PARC ATLANTIQUE 13 RUE EMILE DECORPS 69100 VILLEURBANNE",
        "city": "VILLEURBANNE",
        "isHeadOffice": false
    },
    "revenueEur": 64033334,
    "netIncomeEur": -2651096,
    "financialYear": 2025,
    "vatNumber": "FR75348940255",
    "certifications": [],
    "marketingOptOut": false,
    "directors": [
        { "type": "person", "name": "Laurent LABRUNE", "role": "Président de SAS" },
        { "type": "company", "name": "SEC JH ET ASSOCIES", "siren": "709500136", "role": "Commissaire aux comptes titulaire" }
    ],
    "directoryUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/348940255"
}
```

Every field is described in the Output tab. Export as JSON, CSV, Excel or through the Apify API, or send it to Google Sheets, a CRM or a webhook with Apify integrations.

### Pricing

**$3 per 1,000 companies returned** (pay per event: one *company* event per row). Skipped companies (opted out, sole proprietors, already returned) are never charged. Set *Max results* or a maximum cost per run to cap what you spend.

### Limits and tips

- The API serves at most **10,000 companies per search**. Listing several departments splits the work automatically (10,000 per department); a capped search with no department is split by department for you.
- Location filters match **any establishment** of the company, so a Paris head office with a Lyon branch matches department 69. The Lyon branch is in `matchedEstablishment`.
- Revenue exists only for companies that publish their accounts; revenue filters drop the rest.
- The API is shared and rate-limited. The Actor paces itself and retries when the API asks it to slow down.
- Phone numbers and e-mail addresses are not part of the public register, so they are not returned.

### FAQ

**Where does the data come from?** From API Recherche d'entreprises (recherche-entreprises.api.gouv.fr), run by the French government's digital agency DINUM. It combines INSEE's SIRENE register with the national business register (RNE) for directors and published accounts. The data is open under the Licence Ouverte / Etalab 2.0.

**How fresh is it?** The register is updated daily; each row carries `updatedAt` from the register and `fetchedAt` from the run.

**Can I look up a list of SIRENs?** Put one SIREN or SIRET in *Search text* per run, or call the Actor through the API in a loop.

**Is it legal to use for prospecting?** The data is public, and companies that refuse commercial use are skipped by default. You remain responsible for how you contact companies (GDPR and French rules on B2B prospecting).

### Other Actors by Runix

- [Arbeitsagentur Jobs API](https://apify.com/runix/arbeitsagentur-jobs-api): jobs from Germany's official job board.
- [ATS Jobs API](https://apify.com/runix/career-site-jobs-api): live jobs from Greenhouse, Lever, Ashby and Workday career sites.

Activity, legal-form and area labels come from the open-source search-api project of DINUM (MIT licence).

# Actor input Schema

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

NAF rev. 2 codes, e.g. 62.01Z (software development) or 6201Z. A prefix takes every code under it: 62 (all IT services), 43.2 (electrical and plumbing works), 56.10 (restaurants). Leave empty to search all activities.

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

French department codes, e.g. 75 (Paris), 69 (Rhône), 13 (Bouches-du-Rhône), 2A, 971. A company matches when one of its establishments is in the department. Each department is searched separately, so you can collect up to 10,000 companies per department.

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

5-digit postal codes, e.g. 69001 or 75008. A company matches when one of its establishments has that postal code.

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

Regions where the company has an establishment.

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

Broad NAF sections. Use activity codes above for a precise trade.

## `headcountBands` (type: `array`):

Employee bands from INSEE. Leave empty for any size.

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

INSEE size category of the company.

## `minRevenueEur` (type: `integer`):

Keep companies whose latest published revenue is at least this much. Only companies that publish their accounts have revenue.

## `maxRevenueEur` (type: `integer`):

Keep companies whose latest published revenue is at most this much.

## `certifications` (type: `array`):

Keep only companies holding all of these labels.

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

Optional: words from the company name, address or a director's name, or a SIREN / SIRET number to look up one company.

## `companyType` (type: `string`):

Companies skips sole proprietors (entrepreneurs individuels), which are individuals. Choose All to include them.

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

Skip companies that have ceased trading.

## `excludeMarketingOptOut` (type: `boolean`):

Skip companies that opted out of commercial use of their register data. Keep this on when you use the list for sales outreach.

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

Add the company's directors and auditors from the national business register: name and role. Birth dates are never returned.

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

Sort by number of establishments, largest first, instead of relevance.

## `onlyNew` (type: `boolean`):

Return only companies this search has not returned in earlier runs, for scheduled lead alerts. Previous results are remembered per search.

## `monitorId` (type: `string`):

Optional name for the only-new memory, so you can change filters and keep the same history. Leave empty to use one memory per set of filters.

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

The most companies to return in this run. You are billed per company returned.

## Actor input object example

```json
{
  "nafCodes": [
    "62.01Z"
  ],
  "departments": [
    "69"
  ],
  "companyType": "companies",
  "activeOnly": true,
  "excludeMarketingOptOut": true,
  "includeDirectors": true,
  "sortBySize": false,
  "onlyNew": false,
  "maxResults": 100
}
```

# Actor output Schema

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

JSON dataset items from the run (one object per company).

# 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"
    ],
    "departments": [
        "69"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("runix/french-companies-api").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"],
    "departments": ["69"],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("runix/french-companies-api").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"
  ],
  "departments": [
    "69"
  ],
  "maxResults": 100
}' |
apify call runix/french-companies-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,runix/french-companies-api"
        }
    }
}
```

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/yZOk3uLBNhfR5PXZY/builds/1eTqpk7sHIldNbZvk/openapi.json
