# French Company Search (SIRENE) in English + Insights (`zerahdata/france-company-leads`) Actor

Search the official French company registry (SIRENE / RNE) with English field names and labels, directors, normalized HQ addresses, VAT numbers, new-company detection, change tracking and a free market-insight summary.

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

## Pricing

$1.50 / 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 Company Search (SIRENE) in English + Insights

Search every company registered in France — about 30 million businesses from the official SIRENE / RNE registry — and get **clean, English, lead-list-ready rows**: one row per company with its headquarters, directors, activity, size, VAT number and published financials. Every search also comes with a **free market-insight summary**, and scheduled runs can tell you **which companies are new or closed since last time**.

No API key, no login, no French needed.

### Why this actor

- **English everywhere.** Field names, NAF/APE activity labels (all 732 codes), legal forms (SAS, SARL, SASU… with an English description), director roles (Président → President, Gérant → Managing Director, Commissaire aux comptes → Statutory Auditor), regions and headcount ranges (`"10-19 employees"` plus numeric min/max).
- **One row per company, ready for a CRM.** Normalized HQ address (street number ranges, expanded street types, proper casing, department and region names, GPS), computed intra-EU VAT number, link to the official company page.
- **Filters that matter for prospecting.** Activity code or section, department, region, postal code, employee range, size category, legal form, creation date, revenue range, active only, employers only, headquarters in the area only, director name.
- **Brand-new companies.** Set a "created after" date without search terms and the actor reads the official BODACC creation notices (newest first) and returns the freshly registered companies — the earliest moment to reach a new business.
- **Change tracking.** Enable it on a schedule and get a free change row per search with new and closed companies, plus an `isNew` flag on every company.
- **Free insight summary per search:** total matching companies, top activities, top departments and regions, headcount distribution, size categories, legal forms, creations per year (10 years) and per month (12 months), median company age, and plain-English takeaways.
- **Clean billing.** You pay only for company rows. Summary, change, info and error rows are free, and non-public records are skipped and never charged.

### How to use

1. Enter search terms (e.g. `boulangerie`, `agence web`, a company name) and/or filters.
2. Set **Max companies per search**.
3. Run. Results are in the dataset (views: Companies, Insight summaries, Changes, Errors) and a self-check report is in the key-value store (`RUN_REPORT`).

#### Example inputs

Software companies with 10–49 employees in Lyon's department:

```json
{
  "activityCodes": ["62.01Z", "62.02A"],
  "departments": ["69"],
  "headcountRanges": ["10-19", "20-49"],
  "maxResults": 500
}
```

Restaurants registered in Gironde since 1 September, every week (schedule it with change tracking):

```json
{
  "activityCodes": ["56.10A"],
  "departments": ["Gironde"],
  "createdAfter": "2026-09-01",
  "maxResults": 200,
  "trackChanges": true,
  "monitorName": "gironde-restaurants"
}
```

Look up specific companies:

```json
{ "sirenList": ["552032534", "542107651"] }
```

### Output

A company row (shortened):

```json
{
  "type": "company",
  "siren": "878623164",
  "siretHQ": "87862316400018",
  "name": "SINARI PSX",
  "status": "active",
  "legalFormCode": "5710",
  "legalFormEn": "Simplified joint-stock company (SAS)",
  "activityCode": "62.01Z",
  "activityLabelEn": "Computer programming activities",
  "activityLabelFr": "Programmation informatique",
  "sectionEn": "Information and Communication",
  "companyCategory": "Intermediate-sized enterprise",
  "headcountRange": "10-19 employees",
  "headcountMin": 10,
  "headcountMax": 19,
  "isEmployer": true,
  "createdAt": "2019-10-25",
  "ageYears": 7,
  "hq": {
    "address": "Technoparc Bat A, 4 Avenue des Peupliers, 35510 Cesson-Sevigne",
    "postalCode": "35510",
    "city": "Cesson-Sevigne",
    "department": "35",
    "departmentName": "Ille-et-Vilaine",
    "regionName": "Brittany",
    "lat": 48.1137,
    "lng": -1.6053
  },
  "matchedEstablishment": { "siret": "87862316400042", "city": "Craponne", "isHQ": false },
  "directors": [{ "name": "FINANCIÈRE PORTHOS", "role": "Président de SAS", "roleEn": "President", "type": "company" }],
  "revenueEur": 0,
  "netIncomeEur": 189302,
  "financialYear": 2022,
  "vatNumber": "FR40878623164",
  "companyUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/878623164"
}
```

Also included: trade names, acronym, closing date, establishment counts, financial history, NAF 2025 code, collective agreement IDs, and certification flags (RGE, Qualiopi, organic, social economy, mission-driven company…).

Location filters match any establishment of a company, so a company headquartered in Brittany with a branch in Lyon appears in a Lyon search — its branch is shown in `matchedEstablishment`. Turn on **Headquarters must be in the area** to keep only local headquarters.

A summary row (free) includes `totalAvailable`, `topActivities`, `topDepartments`, `topRegions`, `headcountDistribution`, `companyCategoryShares`, `legalFormShares`, `creationsByYear`, `creationsByMonthLast12`, `medianAgeYears` and `insights`, for example:

```json
["93 companies match this search in the French registry.",
 "Most common activity: 62.01Z Computer programming activities (100% of 93 fetched).",
 "Top region: Auvergne-Rhône-Alpes (66.7%)."]
```

### Pricing

Pay per result: **$1.50 per 1,000 companies** ($0.0015 per company row). Summary, change, info and error rows are free. In summary-only mode, each analyzed company is billed like a row. Set a maximum charge per run in the run options to cap spending.

### FAQ

**Where does the data come from?** The official French government open-data company search API ([recherche-entreprises.api.gouv.fr](https://recherche-entreprises.api.gouv.fr/)), which aggregates INSEE SIRENE, the national companies register (RNE) and other public sources, and the official BODACC legal notices ([bodacc.fr](https://www.bodacc.fr/)) for new-company mode. Data is published under the French Open Licence (Licence Ouverte / Etalab). Company pages link to [annuaire-entreprises.data.gouv.fr](https://annuaire-entreprises.data.gouv.fr/).

**Are emails and phone numbers included?** No. The official registry does not publish them. Use the company name, address and website search of your choice to enrich.

**What about directors and GDPR?** Director names and roles are public registry data. Birth years are off by default; enable them only if you have a lawful basis. Companies whose owners opted out of public disclosure are skipped by default. You are responsible for using personal data in line with GDPR (e.g. legitimate interest assessment and opt-out handling for B2B prospecting).

**Is there a limit on results?** The registry returns up to 10,000 records per filter combination. When a search without a location filter matches more, the actor automatically splits it by department. With a location filter, narrow the activity codes or areas instead (you get a free error row explaining this).

**How fast is it?** The public API allows 7 requests per second; the actor uses 4 by default and retries politely on rate limits. 1,000 companies usually take well under a minute. New-company mode checks each notice individually, so it is slower.

**Why is a brand-new company missing?** Companies appear in BODACC and in the search index a few days apart. Those not yet indexed are skipped and counted in the run report.

**Is revenue available for every company?** Only for companies that publish their accounts. `revenueEur` is empty otherwise.

# Actor input Schema

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

Company names, brands, keywords, or addresses (French search, e.g. "boulangerie", "agence web", "Danone"). Each term is a separate search. Leave empty to search by filters only.

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

Look up specific companies by 9-digit SIREN (or 14-digit SIRET). Invalid numbers produce a free error row.

## `activityCodes` (type: `array`):

NAF rev.2 codes like 62.01Z or 6201Z, or a section letter A-U (e.g. J = Information and communication). Labels are returned in English and French.

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

Department codes or names, e.g. 75, 69, 2A, Gironde.

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

Region names or INSEE codes, e.g. Île-de-France, Occitanie, 84.

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

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

## `hqInAreaOnly` (type: `boolean`):

Location filters match any establishment of a company. Enable to keep only companies whose headquarters is in the selected departments / regions / postal codes.

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

Registered headcount ranges (number of employees).

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

Official INSEE size category.

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

INSEE legal form codes (catégorie juridique), e.g. 5710 = SAS, 5499 = SARL, 5720 = SASU, 1000 = sole proprietor. 2-digit prefixes are accepted.

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

YYYY-MM-DD. When used without search terms, the actor switches to new-company mode: it reads official BODACC creation notices published since this date, newest first, then enriches each company.

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

YYYY-MM-DD.

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

Exclude closed companies.

## `employerOnly` (type: `boolean`):

Keep only companies flagged as employers.

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

Only companies with published accounts above this revenue.

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

Only companies with published accounts below this revenue.

## `directorLastName` (type: `string`):

Find companies where a person with this last name is a director or officer.

## `onlySoleProprietors` (type: `boolean`):

Keep only individual entrepreneurs (entreprise individuelle).

## `excludeAssociations` (type: `boolean`):

Remove non-profit associations from the results.

## `excludeConfidential` (type: `boolean`):

Skip companies whose owners opted out of public disclosure (their name and address are hidden in the registry, so they are useless as leads). Skipped records are never charged.

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

Maximum company rows per search term (or per filter-only search).

## `maxPagesToScan` (type: `integer`):

Safety limit for searches that use post-download filters (creation date, employer, HQ in area) and for new-company mode (1 page = 25 registry records or 100 BODACC notices).

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

Directors and officers with English role names (President, Managing Director, Statutory Auditor...).

## `includeDirectorBirthYear` (type: `boolean`):

Personal data: only enable if you have a lawful basis to process it.

## `outputMode` (type: `string`):

Choose which rows go to the dataset. In summary-only mode each analyzed company is billed like a company row, but only the summary is stored.

## `trackChanges` (type: `boolean`):

Remember the results of each search and report new and closed companies on the next run (free change rows; isNew flag on companies). Ideal for scheduled runs.

## `monitorName` (type: `string`):

Separate change-tracking memory per monitor (e.g. one per client).

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

The public API allows 7 requests per second per IP. Lower it if you see rate-limit errors.

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

Optional. Not needed for normal use.

## Actor input object example

```json
{
  "queries": [
    "boulangerie"
  ],
  "departments": [
    "75"
  ],
  "hqInAreaOnly": false,
  "activeOnly": true,
  "employerOnly": false,
  "onlySoleProprietors": false,
  "excludeAssociations": false,
  "excludeConfidential": true,
  "maxResults": 20,
  "maxPagesToScan": 40,
  "includeDirectors": true,
  "includeDirectorBirthYear": false,
  "outputMode": "all",
  "trackChanges": false,
  "requestsPerSecond": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All rows (companies, summaries, changes, errors).

## `runReport` (type: `string`):

Counts, warnings and data-quality checks for the run.

# 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": [
        "boulangerie"
    ],
    "departments": [
        "75"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("zerahdata/france-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 = {
    "queries": ["boulangerie"],
    "departments": ["75"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("zerahdata/france-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 '{
  "queries": [
    "boulangerie"
  ],
  "departments": [
    "75"
  ],
  "maxResults": 20
}' |
apify call zerahdata/france-company-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zerahdata/france-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/TBPTDTVwGUf90abcV/builds/qTuI6ZBF8c3u3zcRO/openapi.json
