# France Companies — SIRENE Registry (SIREN, VAT, Revenue) (`nefes-tools/france-companies`) Actor

French companies from the official SIRENE registry: filter by activity code (NAF/APE), department, size, revenue and labels (RGE, Qualiopi…). Get SIREN/SIRET, VAT number, address, headcount band and published revenue. Sole traders excluded. Pay per company.

- **URL**: https://apify.com/nefes-tools/france-companies.md
- **Developed by:** [Erich Michal Sikora](https://apify.com/nefes-tools) (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 $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

## France Companies — SIRENE Registry (SIREN, VAT, Revenue)

**Build lists of French companies straight from the official government registry.** Filter by activity code
(NAF/APE), department, city, size, revenue and certifications such as RGE or Qualiopi. Every row has the SIREN
and SIRET numbers, VAT number, head-office address with GPS, headcount band, latest published revenue and a link
to the official record. Sole traders and private individuals are left out. You only pay for companies you receive.

| What you get per company | Example |
|---|---|
| SIREN, SIRET, EU VAT number | 519037253 · 51903725300043 · FR65519037253 |
| Name, trade names, legal form | TRUSTTEAM · SAS, société par actions simplifiée |
| Activity code and label (NAF 2008 + NAF 2025) | 62.01Z *Programmation informatique* · 62.10Y |
| Size | 50 à 99 salariés (2023) · SME · 12 open establishments |
| Finances | revenue, net income, all published years |
| Head office | address, postcode, city, department, region, latitude/longitude |
| Branch that matched your location | the local establishment's SIRET and address |
| Labels | RGE, Qualiopi, organic, social economy, société à mission… |
| Links | official page on annuaire-entreprises.data.gouv.fr |

### Who uses it

- **Sales and marketing teams selling to French businesses.** Pull every software company in Lyon with 20–99
  employees, or every RGE-certified heating installer in Gironde, and load it into your CRM.
- **Data enrichment.** Look up a company by name, SIREN or SIRET and get its VAT number, activity and size.
- **Market research and M\&A.** Count and size companies by sector and region, with published revenue.
- **Supplier checks and compliance.** Confirm a supplier is active, registered and holds the label it claims.
- **AI agents and automations.** Flat JSON with stable fields for Google Sheets, HubSpot, Make, Zapier or MCP.

### Source

Data comes live from the official **API Recherche d'entreprises** of the French government
(annuaire-entreprises.data.gouv.fr). It combines the INSEE SIRENE register and the national companies register
(RNE, INPI) and is published as open data under the *Licence Ouverte / Etalab 2.0*, which allows commercial reuse
with attribution. Every row carries its source. The Actor calls the public API politely (well under its rate
limit) and does not scrape web pages or get around any protection.

### How to use it

1. Choose **what**: activity codes (e.g. `62.01Z`, or a prefix like `43.2` for all electrical and plumbing
   work), broad **sectors**, and/or a **name or keyword**.
2. Choose **where**: departments (`69`, `75`, `2A`, `974`…), regions or postal codes. A company matches when its
   head office *or any branch* is there, and the matching branch is returned in `matchedEstablishment`.
3. Narrow down by **company size**, **category** (SME / mid-size / large), **revenue** and **labels**.
4. Set **Maximum companies** and run. Results are sorted by company size, largest first.

#### Example input

```json
{
    "nafCodes": ["62.01Z", "62.02A"],
    "departments": ["69"],
    "employeeRanges": ["11", "12", "21"],
    "minRevenue": 1000000,
    "maxResults": 500
}
```

#### Example output

```json
{
    "siren": "519037253",
    "siret": "51903725300043",
    "name": "TRUSTTEAM (TRUSTTEAM)",
    "vatNumber": "FR65519037253",
    "status": "active",
    "dateCreated": "2009-12-23",
    "nafCode": "62.01Z",
    "nafLabel": "Programmation informatique",
    "legalForm": "SAS, société par actions simplifiée",
    "companyCategory": "PME",
    "employeeRangeLabel": "50 à 99 salariés",
    "revenue": 8904988,
    "netIncome": 1603916,
    "financialYear": 2022,
    "establishmentsOpen": 12,
    "address": "PARC D'ACTIVITES SAINT JACQUES 41 RUE ALBERT EINSTEIN 54320 MAXEVILLE",
    "city": "MAXEVILLE",
    "department": "54",
    "regionName": "Grand Est",
    "latitude": 48.7006371,
    "longitude": 6.1223250588,
    "matchedEstablishment": {
        "siret": "51903725300118",
        "address": "LE PARC TECHNOLOGIQUE DE LYON IMMEUBLE 333 COURS DU TROISIEME MILLENAIRE 69800 SAINT-PRIEST",
        "city": "SAINT-PRIEST"
    },
    "labels": ["genderEqualityIndex"],
    "registryUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/519037253"
}
```

### Pricing

**Pay per company: $3 per 1 000 companies ($0.003 each)**, plus a tiny Actor start fee. No proxy, browser or
subscription costs.

- You pay only for companies written to the results. Skipped records (sole traders, non-public entries,
  duplicates) are free.
- **Maximum companies** and Apify's *maximum cost per run* cap your spend. The Actor stops cleanly at the limit.
- 500 companies cost about $1.50.

### Good to know

- **No personal data.** Sole traders (*entrepreneurs individuels*) and partnerships of private persons are never
  returned, and names of directors or other people are not included. Only companies in management roles
  (for example the parent company or the statutory auditor) appear in `corporateOfficers`. Entities that opted out
  of publication are not in the source.
- **Large searches.** The registry returns at most 10 000 companies per search. When you ask for more, the Actor
  automatically splits the search by department. If one department alone has more than 10 000 matches, add a
  filter (activity code, size) to reach the rest.
- **Speed.** The registry limits how fast anyone may query it. The Actor respects that and slows down
  automatically when the registry asks, so expect a few hundred companies per minute in busy hours.
- **Revenue** is available only for companies whose accounts are public. The revenue filters skip companies
  without published accounts.
- **Labels in French.** Activity, legal form and headcount labels are the official French INSEE wording; codes
  are included next to them.
- Invalid codes are reported in the log. If none of your filters is valid, the run stops without charging.
  The `SUMMARY` record in the key-value store shows how many companies matched, how many were returned and why
  the run stopped.

### FAQ

**How fresh is the data?** Each run queries the registry live. `lastUpdated` shows when the registry last changed
each record.

**Can I get e-mails or phone numbers?** No. The registry does not publish them and this Actor does not collect
personal contact data.

**Where do I find NAF codes?** On INSEE's NAF nomenclature page, or open any company on annuaire-entreprises.data.gouv.fr
and reuse its code.

**Something is wrong or missing?** Open an issue on the Actor page. Fixes are usually quick.

# Actor input Schema

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

French activity codes, e.g. "62.01Z" (software development) or "6201Z". A prefix like "62" or "43.2" includes all codes under it. Leave empty for all activities.

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

Broad sectors. Use instead of or together with activity codes.

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

Optional text search in the company name, trade name and address (e.g. "boulangerie", "logistique"). You can also paste a SIREN or SIRET number.

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

French departments as codes: "75" Paris, "69" Rhône, "13" Bouches-du-Rhône, "2A"/"2B" Corsica, "974" La Réunion. A company matches if its head office or any branch is there.

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

French regions. A company matches if its head office or any branch is there.

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

5-digit postal codes, e.g. "75011".

## `employeeRanges` (type: `array`):

Headcount band of the company (INSEE, latest available year). Leave empty for any size.

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

INSEE category: SME, mid-size (ETI) or large enterprise.

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

Only companies that published a revenue of at least this amount. Only companies with public accounts have revenue, so this filter drops the rest.

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

Only companies with published revenue up to this amount.

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

Only companies holding all selected labels.

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

INSEE legal form codes, e.g. "5710" SAS, "5499" SARL, "5599" SA, "9220" association. Sole traders are never returned.

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

Skip companies that have ceased trading.

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

Stop after this many companies. You pay per company returned.

## Actor input object example

```json
{
  "nafCodes": [
    "62.01Z"
  ],
  "departments": [
    "69"
  ],
  "activeOnly": true,
  "maxResults": 50
}
```

# Actor output Schema

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

One row per company: SIREN, name, activity, address, size, revenue, VAT number, labels and registry link.

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

How many companies matched, how many were returned, why the run stopped and the filters used.

# 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": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("nefes-tools/france-companies").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": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("nefes-tools/france-companies").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": 50
}' |
apify call nefes-tools/france-companies --silent --output-dataset

```

## MCP server setup

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

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/tiReeMUAPsKYfBQI2/builds/f8sRpjLXwAHYtiSxB/openapi.json
