# French Company Leads: Official SIRENE Search with Revenue (`frenchdatalab/french-company-leads`) Actor

Find French companies by activity, city, department or region, size, revenue and labels from the official SIRENE/RNE registry: SIREN, SIRET, address, GPS, VAT, revenue, net income, directors. Legal open data, no 10,000-result limit.

- **URL**: https://apify.com/frenchdatalab/french-company-leads.md
- **Developed by:** [French Data lab](https://apify.com/frenchdatalab) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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

## French Company Leads: Official SIRENE Search with Revenue

Build **B2B prospect lists of French companies** in one click — by activity, city, department or region, number of employees, **revenue**, **net income**, labels (RGE, Qualiopi, organic…) and creation date — straight from the **official French company registry** (INSEE Sirene + INPI RNE, via the government's *Annuaire des Entreprises*).

No scraping of private websites: this Actor uses the **official open data API**, published under the French *Licence Ouverte 2.0*, which explicitly allows commercial reuse. Legal, stable and updated daily.

### What can you do with it?

- 🎯 **Prospecting lists (B2B lead generation).** *"All plumbing & heating companies in Brittany with 10–49 employees"*, *"RGE-certified construction companies in Gironde with revenue above €1M and profitable"*, *"accounting firms headquartered in Lyon"*.
- 🆕 **Target young companies.** *"Restaurants created in Marseille since January 2025"* — perfect for suppliers, banks, insurers and accountants.
- 🧾 **Enrich your CRM.** Paste a list of SIREN or SIRET numbers and get the full record of each company: address, headcount, revenue, VAT number, labels, activity.
- 📊 **Market sizing & mapping.** Count companies by activity, size and area (a summary is produced with every run), with GPS coordinates ready for maps.
- ✅ **Supplier checks.** Is the company active? Since when? What is its legal form, its VAT number, its latest revenue?

### Why this Actor?

| | This Actor | Typical French company scrapers |
|---|---|---|
| Source | ✅ Official government open data (Licence Ouverte 2.0) | ⚠️ Often scraped from private websites |
| Search by **everyday trade names** ("plombier", "restaurant", "accountant") | ✅ + official NAF/APE codes | Codes only, or free text |
| Revenue & net income filters | ✅ `revenueMin`, `revenueMax`, `netIncomeMin` | Rare |
| Head office vs local branches | ✅ Choose; closed establishments never count | ❌ Companies matched by a branch closed decades ago |
| More than 10,000 results | ✅ Automatic splitting | ❌ Capped at 10,000 |
| Sole proprietors excluded by default (B2B) | ✅ | ❌ |
| Directors | ✅ Optional, **without birth dates** | Often with personal data |
| Stops exactly at your max cost per run | ✅ | varies |

### Input

| Field | Description | Example |
|---|---|---|
| `activities` | Trade names (FR/EN), NAF codes or sector letters | `["plombier"]`, `["69.20Z"]`, `["F"]` |
| `location` | City, postal code, department number or region. Empty = all of France | `"Lyon"`, `"75011"`, `"33"`, `"Bretagne"` |
| `locationMatch` | `headOffice` (local companies, default) or `anyEstablishment` (also national companies with an open local branch) | `"headOffice"` |
| `keywords` | Free text on name / trade name / address | `"bio"` |
| `companySizes` | `0`, `1-9`, `10-49`, `50-249`, `250-999`, `1000+` employees | `["10-49", "50-249"]` |
| `companyCategories` | `PME`, `ETI`, `GE` | `["PME"]` |
| `revenueMin` / `revenueMax` | Latest published revenue, € | `1000000` |
| `netIncomeMin` | Latest published net income, € (0 = profitable only) | `0` |
| `labels` | `rge`, `qualiopi`, `bio`, `ess`, `trainingOrganization`, `siae`, `missionCompany`, `livingHeritage` | `["rge"]` |
| `createdAfter` / `createdBefore` | Creation date range | `"2025-01-01"` |
| `status` | `active` (default), `closed`, `all` | `"active"` |
| `excludeSoleProprietors` | Remove *entrepreneurs individuels* (default `true`) | `true` |
| `includeDirectors` | Add directors' names and roles (no birth dates) | `false` |
| `largestFirst` | Multi-site companies first | `false` |
| `sirenList` | **Enrichment mode**: SIREN/SIRET numbers to look up (search filters are then ignored) | `["552108722"]` |
| `maxResults` | Maximum companies returned (beyond 10,000 supported) | `500` |

#### Recipes

```json
{ "activities": ["plombier"], "location": "Bretagne", "companySizes": ["10-49"], "maxResults": 500 }
```

```json
{ "labels": ["rge"], "location": "33", "revenueMin": 1000000, "netIncomeMin": 0 }
```

```json
{ "activities": ["restaurant"], "location": "Marseille", "createdAfter": "2025-01-01" }
```

```json
{ "sirenList": ["552108722", "55210872206411"] }
```

### Output

One item per company (real example):

```json
{
    "siren": "552108722",
    "siret": "55210872210462",
    "name": "SOC FIDUCIAIRE NATIO EXPERTISE COMPTABLE",
    "tradeNames": ["FIDUCIAL EXPERTISE ; JADE FIDUCIAL"],
    "activityCode": "69.20Z",
    "activity": "Activités comptables",
    "sectorCode": "M",
    "legalForm": "SA à conseil d'administration (s.a.i.)",
    "companyCategory": "GE",
    "employeeRange": "2 000 à 4 999 salariés",
    "status": "active",
    "creationDate": "1984-05-27",
    "address": "41 RUE DU CAPITAINE GUYNEMER 92400 COURBEVOIE",
    "postalCode": "92400",
    "city": "COURBEVOIE",
    "department": "Hauts-de-Seine",
    "region": "Île-de-France",
    "latitude": 48.8958,
    "longitude": 2.2434,
    "localEstablishment": null,
    "establishments": 1294,
    "openEstablishments": 532,
    "vatNumber": "FR59552108722",
    "revenue": 149884313,
    "netIncome": 1316847,
    "financialYear": 2024,
    "financials": [{ "year": 2024, "revenue": 149884313, "netIncome": 1316847 }],
    "labels": ["Training organization"],
    "annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/552108722",
    "source": "Annuaire des Entreprises (data.gouv.fr) — INSEE Sirene & INPI RNE data, Licence Ouverte / Open Licence 2.0"
}
```

- `localEstablishment`: with `locationMatch: anyEstablishment`, the open branch located in your area.
- `requestedEstablishment`: in enrichment mode with a SIRET, the establishment you asked for.
- `directors` (optional): `[{ "type": "person", "lastName": "...", "firstNames": "...", "role": "Président" }]`.
- A **`SUMMARY`** record (Storage → Key-value store) counts companies by department, activity and headcount range.

Labels such as `activity`, `legalForm` and `employeeRange` are the official INSEE wording (in French).

### Pricing

Pay per company returned. Enrichment lookups that find nothing are not charged. Set a maximum cost per run and the Actor stops exactly there.

### FAQ

**Why is revenue empty for some companies?** Revenue and net income are only available for companies that publish their accounts (many small companies are exempt or ask for confidentiality).

**Is it legal? What about GDPR?** The data comes from the official open data registry, under *Licence Ouverte 2.0* (commercial reuse allowed, source attribution included in every item). Companies that exercised their non-disclosure right are excluded by the source. Directors' data is optional and never includes birth dates; if you use personal data (e.g. for prospecting), you are responsible for complying with the GDPR and French prospecting rules.

**How fast is it?** The official API limits how many requests cloud servers can send, so the Actor paces itself: count roughly 2,000 companies in 4–5 minutes, and a few seconds for small searches or short SIREN lists. Results are saved as they come, so you can use the first rows right away.

**How fresh is the data?** The registry behind the API is updated daily; each item includes `lastUpdated`.

**My activity word is not recognized.** Use the official NAF/APE code (e.g. `43.22A`); the run log also suggests the closest official activities.

**Something is wrong?** Open an issue with your run link — it will be fixed quickly.

***

#### 🇫🇷 En bref

Générez des **fichiers de prospection d'entreprises françaises** à partir des **données officielles** (Sirene / RNE, Annuaire des Entreprises, Licence Ouverte 2.0) : recherche par métier en langage courant (« plombier », « restaurant »), code NAF, ville, code postal, département ou région, effectif, **chiffre d'affaires**, **résultat net**, labels (RGE, Qualiopi, bio…) et date de création. SIREN, SIRET, adresse, GPS, TVA intracommunautaire, dirigeants en option, au-delà de 10 000 résultats, et **enrichissement de listes de SIREN/SIRET**. Export CSV, Excel, JSON.

# Actor input Schema

## `activities` (type: `array`):

Everyday trade names in French or English ("plombier", "restaurant", "accountant", "agence immobilière"), official NAF/APE codes ("69.20Z") or sector letters ("F" = construction). Leave empty to search every activity.

## `location` (type: `string`):

City ("Lyon"), postal code ("69003"), department number ("69") or region ("Bretagne"). Empty = all of France.

## `locationMatch` (type: `string`):

Head office in the location (local companies, recommended) or any OPEN establishment there (also national companies with a local branch; the branch address is returned in 'localEstablishment').

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

Optional free-text search on company name, trade name or address (e.g. "bio", "transport").

## `companySizes` (type: `array`):

Official INSEE headcount ranges. Empty = any size.

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

INSEE category: SME, mid-size or large company.

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

Latest published revenue (chiffre d'affaires), in euros. Only companies that published their accounts can match.

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

Latest published revenue, in euros.

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

Latest published net income (résultat net), in euros. Use 0 to keep only profitable companies.

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

Keep only companies holding ALL the selected labels.

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

Only companies created on or after this date (YYYY-MM-DD). Great to target young companies.

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

Only companies created on or before this date (YYYY-MM-DD).

## `status` (type: `string`):

Active companies only (recommended), closed ones, or both.

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

Recommended for B2B prospecting: removes one-person businesses registered in a person's own name.

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

Add the directors published in the national registry (name, first names, role). Birth dates are never included. You are responsible for GDPR-compliant use of personal data.

## `largestFirst` (type: `boolean`):

Sort results by number of establishments (networks and chains first).

## `sirenList` (type: `array`):

Paste SIREN (9 digits) or SIRET (14 digits) numbers, one per line, to get the full record of each company (CRM enrichment). When filled, the search filters above are ignored.

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

Maximum number of companies to return. Large searches are split automatically to go beyond the official API limit of 10,000 results.

## `proxyConfiguration` (type: `object`):

Not needed: the official API is reached directly. Leave off unless advised.

## Actor input object example

```json
{
  "activities": [
    "comptable"
  ],
  "location": "Lyon",
  "locationMatch": "headOffice",
  "status": "active",
  "excludeSoleProprietors": true,
  "includeDirectors": false,
  "largestFirst": false,
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `companies` (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 = {
    "activities": [
        "comptable"
    ],
    "location": "Lyon",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("frenchdatalab/french-company-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 = {
    "activities": ["comptable"],
    "location": "Lyon",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("frenchdatalab/french-company-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 '{
  "activities": [
    "comptable"
  ],
  "location": "Lyon",
  "maxResults": 50
}' |
apify call frenchdatalab/french-company-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,frenchdatalab/french-company-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/hhPQIadObeIZmYKfB/builds/K3kAUHtgilutqz296/openapi.json
