# France Company Search (SIRENE) - SIREN, Directors $2/1K (`plotpointtech/france-company-search`) Actor

Search French companies in the official SIRENE register: SIREN/SIRET, NAF code, legal form, address, headcount, directors and revenue. Filter by activity, department, postcode, size and creation date. $2 per 1,000 companies.

- **URL**: https://apify.com/plotpointtech/france-company-search.md
- **Developed by:** [Plot Point Technologies](https://apify.com/plotpointtech) (community)
- **Categories:** Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.24 / 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.
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

## France Company Search (SIRENE): SIREN, SIRET, Directors and Financials

**Search the official French company register and get clean company records in seconds.** Search by name or keyword, filter by NAF/APE activity code, department, postcode, commune, legal form, headcount bracket, creation date and revenue, or look up SIREN and SIRET numbers directly. Each record has the SIREN, name, legal form, NAF code with its label, head-office address with GPS, creation date, staff-size bracket, status, directors (dirigeants) and published revenue and net income. **$2 per 1,000 companies**, no API key or account with any French service needed.

The data comes from the French government's free **API Recherche d'entreprises** (recherche-entreprises.api.gouv.fr, run by DINUM / data.gouv.fr), which combines INSEE's SIRENE register with the national company register (RNE) and other public sources. It is the same data that powers annuaire-entreprises.data.gouv.fr.

### What can this French company search do?

- **Search** company names, trade names, addresses and director names with free text, e.g. `boulangerie`, `agence web`, `Danone`.
- **Filter** by NAF/APE codes (e.g. `62.01Z`), NAF sections (A to U), departments, postal codes, INSEE commune codes, legal forms (SAS, SARL, SA, SCI, EI or any INSEE code), staff-size brackets, SME / mid-size / large category, active only, creation date range and revenue range.
- **Look up** any list of SIREN (9 digits) or SIRET (14 digits) numbers to verify or enrich records you already have.
- **Establishments (optional):** add the establishments (SIRET) that match your location filters, or all establishments the API returns for each company, with address, status, activity and headcount.
- **Directors and financials:** directors and officers as published in the register (people and companies holding a role, such as the auditor), plus revenue and net income per year where accounts are published.

### What data do you get?

| Group | Fields |
|---|---|
| Identity | `siren`, `headOfficeSiret`, `name`, `legalName`, `acronym`, `tradeNames`, `vatNumber`, `annuaireUrl` |
| Status and dates | `status` (active / ceased), `creationDate`, `closureDate`, `lastUpdated` |
| Legal form | `legalFormCode`, `legalForm`, `legalFormShort`, `isSoleTrader` |
| Activity | `nafCode`, `nafLabel`, `nafCode2025`, `nafSection`, `nafSectionLabel`, `collectiveAgreements` |
| Size | `staffSizeCode`, `staffSize`, `staffSizeYear`, `companyCategory`, `establishmentCount`, `openEstablishmentCount` |
| Head office | `address`, `postalCode`, `city`, `communeCode`, `department`, `departmentName`, `region`, `regionName`, `latitude`, `longitude` |
| People | `directors` (type, last name, first names, role; or company name, SIREN, role) |
| Money | `financials` (year, revenue, net income), `latestFinancialYear`, `latestRevenue`, `latestNetIncome` |
| Labels | `labels` (e.g. RGE, Qualiopi, ESS, mission company, organic), `prospectingOptOut` |
| Optional | `establishments` (SIRET, head-office flag, status, address, GPS, NAF, staff size, dates), `lookupSiret` |

Official labels (NAF activity, legal form, sections) are in French as INSEE publishes them; staff-size brackets and categories are in English.

### Who uses it?

- **Sales and marketing teams** building B2B target lists by activity, region and company size in France.
- **KYB, compliance and finance teams** verifying a supplier's or customer's SIREN, status, address, legal form and directors.
- **Data teams and CRMs** enriching a list of SIREN/SIRET numbers with up-to-date register data.
- **Market researchers and consultants** counting and mapping companies by sector and department.
- **Developers and AI agents** that need French company data as JSON without writing their own API client.

### How to use it

1. Click **Try for free** (or **Start**).
2. Enter a **search term**, and/or choose filters such as **NAF codes**, **departments**, **legal forms** and **staff-size brackets**. To check specific companies, paste **SIREN / SIRET numbers** instead.
3. Optionally add **establishments**, change **directors** and **financials** options, and set **Maximum companies**.
4. Run it and download the results as Excel, CSV or JSON, or schedule it (for example weekly with a creation-date filter to catch newly created companies).

### Input example

```json
{
  "searchQuery": "boulangerie",
  "departments": [
    "69"
  ],
  "activeOnly": true,
  "maxResults": 50
}
```

More examples:

```json
{"sirenOrSiret": ["552032534", "81280923400030"], "includeEstablishments": "all"}
{"nafCodes": ["62.01Z"], "departments": ["33"], "legalForms": ["SAS"], "createdFrom": "2026-01-01", "maxResults": 500}
{"searchQuery": "plombier", "departments": ["31"], "excludeSoleTraders": true, "minRevenue": 1000000}
```

### Output example

A company from the default run (`boulangerie`, department 69):

```json
{
  "siren": "794528984",
  "headOfficeSiret": "79452898400022",
  "name": "BOULANGERIE DES ARCADES",
  "legalName": "BOULANGERIE DES ARCADES",
  "acronym": null,
  "tradeNames": null,
  "status": "active",
  "creationDate": "2013-07-17",
  "closureDate": null,
  "legalFormCode": "5710",
  "legalForm": "SAS, société par actions simplifiée",
  "legalFormShort": "SAS",
  "isSoleTrader": false,
  "nafCode": "10.71C",
  "nafLabel": "Boulangerie et boulangerie-pâtisserie",
  "nafCode2025": "10.71H",
  "nafSection": "C",
  "nafSectionLabel": "Industrie manufacturière",
  "staffSizeCode": "NN",
  "staffSize": "No employees (non-employer)",
  "staffSizeYear": null,
  "companyCategory": "PME",
  "companyCategoryLabel": "SME",
  "address": "122 GRANDE RUE 69780 TOUSSIEU",
  "postalCode": "69780",
  "city": "TOUSSIEU",
  "communeCode": "69298",
  "department": "69",
  "departmentName": "Rhône",
  "region": "84",
  "regionName": "Auvergne-Rhône-Alpes",
  "latitude": 45.653678264,
  "longitude": 4.9762943771,
  "establishmentCount": 2,
  "openEstablishmentCount": 1,
  "vatNumber": null,
  "collectiveAgreements": null,
  "directors": [
    {
      "type": "person",
      "lastName": "ABRAHAMYAN (ABRAHAMYAN)",
      "firstNames": "GARNIK",
      "role": "Président de SAS",
      "nationality": null
    },
    {
      "type": "person",
      "lastName": "ABRAHAMYAN",
      "firstNames": "GARNIK GAGUIKOVITCH",
      "role": "Président de SAS",
      "nationality": null
    }
  ],
  "financials": [
    {
      "year": 2017,
      "revenue": 394815,
      "netIncome": 2800
    }
  ],
  "latestFinancialYear": 2017,
  "latestRevenue": 394815,
  "latestNetIncome": 2800,
  "labels": null,
  "prospectingOptOut": false,
  "lastUpdated": "2026-11-05T09:15:17",
  "annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/794528984",
  "scrapedAt": "2026-11-05T19:40:27Z"
}
```

### How much does it cost?

| Event | Price | Per 1,000 |
|---|---|---|
| Company record | $0.002 | **$2.00** |

Plus a $0.00005 start fee per run. You pay only for companies saved to the dataset; companies skipped by the filters or privacy rules are free. Examples: the default 50-company search costs about $0.10; 1,000 construction companies in one department cost $2; checking 10,000 SIREN numbers from your CRM costs $20.

**Volume discounts on higher Apify plans.** The prices above are for the Apify Free plan. On paid plans the per-result price drops automatically: about 15% lower on Bronze, 25% lower on Silver and 38% lower on Gold and above.

### Use it via API, Make, Zapier, n8n or an AI agent

**Apify API.** Start a run and get the results back in one HTTP request (replace `YOUR_API_TOKEN` with the token from Apify Console > Settings > Integrations):

```bash
curl -X POST "https://api.apify.com/v2/acts/plotpointtech~france-company-search/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQuery": "boulangerie", "departments": ["69"], "activeOnly": true, "maxResults": 50}'
```

For longer jobs, start the run asynchronously and read the dataset when it finishes. Official `apify-client` libraries exist for Python and JavaScript; the **API** tab on this page has ready-made code.

**No-code automation.** Connect the tool to **Make, Zapier, n8n, Google Sheets, Slack, Airtable** or any webhook with Apify integrations, and use **Schedules** in Apify Console to run it hourly, daily or weekly.

**AI agents (MCP).** Give Claude, ChatGPT, Cursor, VS Code or any MCP-compatible agent direct access to this tool through the hosted Apify MCP server. Add this server URL to your client:

```
https://mcp.apify.com?tools=plotpointtech/france-company-search
```

The agent can then call the tool with the same input fields shown above and read the results.

### FAQ

**Is this legal? What about personal data (GDPR)?**
The tool reads the French government's open API, which is free and open to everyone, and the register data is published under the Licence Ouverte / Open Licence (Etalab) that allows commercial reuse with attribution ("Source: API Recherche d'entreprises, INSEE SIRENE, INPI RNE"). This is a company register tool, not a tool for profiling people. Privacy rules built in:

- Non-diffusible entries (people who asked INSEE not to publish their data) are never returned; the API already excludes them, and the tool also drops any company or establishment marked as partially diffusible.
- Sole traders (entrepreneurs individuels) who objected to the reuse of their data for commercial prospecting (GDPR art. 21, Code de commerce R.123-320) are skipped by default. Every record has a `prospectingOptOut` field; choose "Skip all opted-out entries" if you are building marketing lists, and respect the flag in your own use.
- Directors' birth dates are not returned; the birth year is available only if you switch it on.
  If you process data about individuals (sole traders, directors), you are responsible for having a lawful basis under GDPR.

**Why does a company's head office sit outside the department I filtered on?**
Department, postcode and commune filters match any establishment of the company, not only the head office. Set **Establishments** to "Matching establishments" to see which sites are in your area.

**How many results can one search return?**
The API returns at most 10,000 companies per search. To export more, split the search, for example by department or NAF code, and run it several times.

**Why are financials empty for many companies?**
Revenue and net income are only present when the company's accounts are published (many small companies file confidential accounts). Values are in euros as published. A revenue of 0 usually means the figure was not filled in or kept confidential in the filed accounts, so treat 0 with care.

**Can I search SASU or EURL separately?**
No. SIRENE files SASU under SAS (5710) and EURL under SARL (5499), so these shortcuts return both.

**How fresh is the data?**
The API is updated daily from SIRENE and the RNE; `lastUpdated` shows the last update of each record.

**Rate limits?**
The API allows at most 7 requests per second per IP. This tool stays around 2 per second, identifies itself, and waits whenever the API asks it to (HTTP 429 Retry-After). A search runs about 1,500 companies per minute; "All establishments" needs one extra request per company and is slower.

### Related tools from Plot Point Technologies

- [UK Companies House Scraper - Officers, PSC, Filings $1.50/1K](https://apify.com/plotpointtech/uk-companies-house-scraper): UK companies, directors, PSC owners and filings from the official Companies House API.
- [AI Company Enrichment - Industry, Summary & Signals, $6/1K](https://apify.com/plotpointtech/ai-company-enrichment): industry, summary and business signals for any company website.
- [Email & Contact Scraper - Website Emails, Phones & Socials](https://apify.com/plotpointtech/website-contact-finder): emails, phones and social links from any list of company websites.
- [Bulk Email Validator - Syntax, MX, Disposable & Role Check](https://apify.com/plotpointtech/bulk-email-validator): check email syntax, MX records, disposable and role addresses in bulk.

Plot Point Technologies is not affiliated with DINUM, data.gouv.fr, INSEE or INPI. Source: API Recherche d'entreprises (recherche-entreprises.api.gouv.fr), Licence Ouverte / Etalab. Questions: support@plotpoint.tech.

***

If this tool saved you time, we would be grateful for a short review on this page; it helps other people find it. If something did not work as expected, please open an issue on the **Issues** tab and we will look into it quickly.

# Actor input Schema

## `searchQuery` (type: `string`):

Words to search in company names, trade names, addresses and director names, e.g. boulangerie, Danone, 'agence web Lyon'. Leave empty to search by filters only.

## `sirenOrSiret` (type: `array`):

Look up specific companies by 9-digit SIREN or 14-digit SIRET (spaces allowed). Can be combined with a search, or used alone.

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

Only companies whose main activity is one of these NAF rev. 2 codes, e.g. 62.01Z or 6201Z (software development), 10.71C (bakery).

## `nafSections` (type: `array`):

Broad activity sections (A to U).

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

Department codes, e.g. 75 (Paris), 69 (Rhone), 13, 2A, 971. Matches companies with at least one establishment there.

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

5-digit postal codes, e.g. 75011. Matches establishments.

## `communeCodes` (type: `array`):

5-character INSEE commune codes (not postal codes), e.g. 69123 (Lyon), 75111 (Paris 11e).

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

INSEE legal-form codes (e.g. 5710), code prefixes (e.g. 55) or shortcuts (SIRENE files SASU under SAS and EURL under SARL): SAS, SARL, SA, SCI, SNC, EI, SELARL, SELAS, ASSOCIATION.

## `staffSizes` (type: `array`):

INSEE headcount brackets (employees).

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

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

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

Skip companies that have ceased trading.

## `createdFrom` (type: `string`):

Creation date range start (YYYY-MM-DD). Applied to search results, so combine it with a search or another filter.

## `createdTo` (type: `string`):

Creation date range end (YYYY-MM-DD).

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

Only companies whose latest published revenue is at least this. Companies without published accounts are excluded when set.

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

Only companies whose latest published revenue is at most this.

## `excludeSoleTraders` (type: `boolean`):

Skip individual entrepreneurs (entreprises individuelles) and return only companies and other legal entities.

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

Sort by company size (number of establishments) instead of relevance.

## `includeEstablishments` (type: `string`):

Add a list of establishments to each company. 'Matching' = those matching your search or location filters (no extra requests). 'All' = all establishments the API returns for the company (one extra request per company, slower).

## `maxEstablishmentsPerCompany` (type: `integer`):

Cap on establishments listed per company.

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

Directors and officers as published in the national company register (RNE): name, role, or the company that holds the role.

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

Add the birth year the register publishes for directors who are natural persons. Off by default (data minimisation).

## `includeFinancials` (type: `boolean`):

Revenue and net income by year where the company's accounts are published.

## `prospectingOptOuts` (type: `string`):

Some register entries carry an objection to reuse for commercial prospecting (GDPR art. 21, Code de commerce R.123-320). Default skips sole traders (natural persons) with this objection. Every record also has a prospectingOptOut field.

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

Stop after this many companies. One search can reach at most 10,000 results; narrow filters (e.g. by department) to go further.

## Actor input object example

```json
{
  "searchQuery": "boulangerie",
  "sirenOrSiret": [],
  "nafCodes": [],
  "nafSections": [],
  "departments": [
    "69"
  ],
  "postalCodes": [],
  "communeCodes": [],
  "legalForms": [],
  "staffSizes": [],
  "companyCategories": [],
  "activeOnly": true,
  "excludeSoleTraders": false,
  "sortBySize": false,
  "includeEstablishments": "none",
  "maxEstablishmentsPerCompany": 20,
  "includeDirectors": true,
  "includeDirectorBirthYear": false,
  "includeFinancials": true,
  "prospectingOptOuts": "skipSoleTraders",
  "maxResults": 50
}
```

# Actor output Schema

## `results` (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 = {
    "searchQuery": "boulangerie",
    "departments": [
        "69"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("plotpointtech/france-company-search").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 = {
    "searchQuery": "boulangerie",
    "departments": ["69"],
}

# Run the Actor and wait for it to finish
run = client.actor("plotpointtech/france-company-search").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 '{
  "searchQuery": "boulangerie",
  "departments": [
    "69"
  ]
}' |
apify call plotpointtech/france-company-search --silent --output-dataset

```

## MCP server setup

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

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/1Kb49vr6rt84hMmfR/builds/YvnDn6rzrpKEcF8wq/openapi.json
