# French Companies Scraper: SIRENE Leads, Directors & Emails (`euroscrape/france-companies`) Actor

Search all 26M+ French companies from the official SIRENE register by activity (NAF), area, size, revenue and labels. Get directors, finances, VAT, and optionally a website verified by SIREN plus emails and phones. No 10,000-result cap. Monitor new companies.

- **URL**: https://apify.com/euroscrape/france-companies.md
- **Developed by:** [EuroScrape](https://apify.com/euroscrape) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 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

## French Companies Scraper: SIRENE Leads, Directors & Emails

Build **B2B lead lists of French companies** straight from the official government register (SIRENE / RNE, via the open *Recherche d'entreprises* API). Filter by activity (NAF code or sector), department, postal code, headcount, revenue, company age and official labels. For every company you get its directors, finances, VAT number and headquarters.

Optionally, the Actor also finds the **company's own website and verifies it**: French law requires every business website to display its SIREN number, so we only mark a site `verified_siren` when the company's SIREN is actually printed on it. We then extract its **emails, phone numbers and social links**.

**No login, no API key, no Pappers subscription needed.**

### ✨ Why this Actor

| | |
|---|---|
| ♾️ **No 10,000-result cap** | The official API stops at 10,000 results per search. This Actor detects that and automatically splits your search by department, headcount and activity code, so you can export a whole sector. |
| 🌐 **Verified websites** | Websites are matched to companies by the SIREN on their legal notice, not guessed by name, so you don't email the wrong "Dupont SARL". Unverified but likely matches are labeled `probable`. |
| 📧 **Emails, phones, socials** | Pulled from the verified website (home, legal notice and contact pages). Emails on the company's own domain come first, and generic addresses (contact@, info@) are flagged. |
| 🔔 **Monitoring** | Schedule a saved search to get only **new companies** (for example new plumbers in Lyon) and **companies whose key data changed**: status, directors, address, activity, headcount or legal form. Each change comes with the old and new value, for example `{"field": "directors", "before": "…", "after": "…"}`. |
| 🧾 **Clean, readable data** | Official labels for NAF codes, legal forms and headcount ranges, numeric headcount bounds, confidential revenue shown as `null` (not a misleading 0), person vs. company directors, and links to Annuaire Entreprises and Pappers. |
| 💸 **Fair pricing** | You pay per company, and **contact enrichment is billed only when a website is found**. |

### 🎯 Use cases

- **Sales prospecting**: every construction SME with 10–49 employees in Isère, with director names and verified websites.
- **New-business leads**: companies created in the last 30 days in your area, for accountants, banks, insurers, web agencies and equipment suppliers.
- **Market mapping**: how many restaurants there are in Paris, and how big.
- **KYC and supplier monitoring**: get alerted when a partner company ceases activity or changes directors.
- **CRM enrichment**: paste a list of SIRENs and get complete, standardized profiles back.

### 🚀 Examples

**Plumbing SMEs around Grenoble, with contacts:**

```json
{
  "nafCodes": ["43.22A"],
  "departments": ["38"],
  "employeeRanges": ["03", "11", "12"],
  "findContacts": true,
  "maxItems": 500
}
```

**All IT consulting companies in Île-de-France with over €1M revenue:**

```json
{
  "nafCodes": ["62.02A"],
  "regions": ["11"],
  "revenueMin": 1000000,
  "maxItems": 5000
}
```

**Daily feed of newly created restaurants in Lyon (schedule it every day):**

```json
{
  "nafCodes": ["56.10A", "56.10C"],
  "postalCodes": ["69001", "69002", "69003", "69004", "69005", "69006", "69007", "69008", "69009"],
  "monitorName": "new-restaurants-lyon",
  "monitorChanges": false
}
```

**Enrich your own list:**

```json
{ "sirens": ["403052111", "552100554"], "findContacts": true }
```

### 📦 Output (a real company)

```json
{
  "siren": "891052672",
  "name": "SOLAIRE CLIM CHAUFFAGE (LOIRE CLIM CHAUFFAGE)",
  "status": "active",
  "createdAt": "2020-10-30",
  "ageYears": 5,
  "legalForm": {
    "code": "5710",
    "label": "SAS, société par actions simplifiée"
  },
  "companyCategory": "PME",
  "nafCode": "43.22B",
  "nafLabel": "Travaux d’installation d’équipements thermiques et de climatisation",
  "sectorLabel": "Construction",
  "employees": {
    "code": "12",
    "label": "20 à 49 salariés",
    "min": 20,
    "max": 49,
    "year": 2023
  },
  "headquarters": {
    "siret": "89105267200112",
    "address": "12 ALLEE DE L'ARTISANAT 42340 VEAUCHE",
    "postalCode": "42340",
    "city": "VEAUCHE",
    "departmentName": "Loire",
    "regionName": "Auvergne-Rhône-Alpes",
    "latitude": 45.5554374,
    "longitude": 4.291315583
  },
  "directors": [
    {
      "type": "company",
      "name": "RC BUSINESS",
      "siren": "894729870",
      "role": "Directeur Général"
    },
    {
      "type": "company",
      "name": "NC BUSINESS",
      "siren": "894776558",
      "role": "Président de SAS"
    }
  ],
  "latestFinances": {
    "year": 2024,
    "revenue": 7455891,
    "netIncome": 11506,
    "revenueDisclosed": true
  },
  "vatNumber": "FR18891052672",
  "labels": [
    "RGE"
  ],
  "website": "https://solaireclimchauffage.fr/",
  "websiteConfidence": "verified_siren",
  "primaryEmail": "standard@solaireclimchauffage.fr",
  "emails": [
    "standard@solaireclimchauffage.fr",
    "webmaster@solaireclimchauffage.fr"
  ],
  "phones": [
    "09 73 76 45 58",
    "04 51 58 07 07"
  ],
  "socials": {
    "facebook": "https://www.facebook.com/solaireclimchauffage",
    "instagram": "https://www.instagram.com/solaire.clim.chauffage/",
    "linkedin": "https://fr.linkedin.com/company/solaire-clim-chauffage",
    "youtube": "https://www.youtube.com/@SolaireClimChauffage"
  },
  "contactsSource": "domain_match",
  "links": {
    "annuaireEntreprises": "https://annuaire-entreprises.data.gouv.fr/entreprise/891052672",
    "pappers": "https://www.pappers.fr/entreprise/891052672"
  }
}
```

### 🌐 How contact enrichment works

1. We guess likely domains from the legal name, trade name and acronym (for example `pelissard.fr` for *ENTREPRISE PELISSARD*) and check they exist.
2. We visit the site's home page, legal notice ("mentions légales") and contact pages.
3. If the company's **SIREN is printed there**, the site is `verified_siren`. If not, but the domain contains the company's name and the site shows the headquarters postal code, it is marked `probable`. Otherwise we return nothing rather than a wrong site.
4. Optionally (`useGoogleSearch`), we also run a Google search for companies whose name doesn't give away their domain.

In our tests on construction SMEs (6–99 employees), about **1 in 3 companies** received a website, most of them SIREN-verified, and most of those had an email and a phone. Many small French companies simply have no website.

### 💰 Pricing

| Event | Price |
|---|---|
| Company | **$4 / 1,000 companies** |
| Website + contacts found (only when found) | **$25 / 1,000 enriched companies** |
| Run start | $0.003 |

### ❓ FAQ

- **Is this data legal to use?** Company data from SIRENE and RNE is public open data (Licence Ouverte). Director names are personal data: use them in line with the GDPR, for example for B2B prospecting with a legitimate interest and an opt-out. Companies that opted out of public dissemination ("non-diffusibles") are not returned.
- **Why is revenue sometimes null?** Many small companies file confidential accounts, so their revenue isn't public.
- **Do department filters use the headquarters' location?** No, they match companies with *any* establishment in the area. `matchingEstablishments` lists those local sites.
- **How fresh is the data?** The official API is updated daily from INSEE and INPI.

*Data source: API Recherche d'entreprises (DINUM), Licence Ouverte 2.0. Not affiliated with INSEE, INPI or Pappers.*

### ⭐ Your feedback

If this Actor saves you time, a short review on Apify Store helps other users find it. Missing a field, a country or a filter? Say it in your review: the most requested features are added first.

### 🔗 More from EuroScrape

- [France Real Estate Sold Prices (DVF): €/m², Sales & Trends](https://apify.com/euroscrape/france-property-prices): every property sale registered by the French State — real prices, €/m², addresses, GPS, market trends per city and alerts on new sales.
- [EU VAT Number Validator (VIES): Bulk Check, Proof & Alerts](https://apify.com/euroscrape/vat-validator): validate VAT numbers in bulk against the EU's official registry, with consultation proof for tax audits and alerts when a customer's number becomes invalid.
- [EU Public Tenders Scraper: TED, BOAMP & Awards](https://apify.com/euroscrape/eu-public-tenders): open tenders and contract awards from all of Europe (TED) and France (BOAMP, DECP), with winners per lot, values in € and daily alerts.
- [Website Tech Stack Detector: 280+ Technologies, Leads & Signals](https://apify.com/euroscrape/website-intelligence): technologies, company identity, contacts and sales signals for any website.
- [Kleinanzeigen Scraper: Deal Finder & Price-Drop Alerts](https://apify.com/euroscrape/kleinanzeigen-scraper): German classifieds with a 0–100 deal score, new-ad & price-drop monitoring and instant alerts.
- [UK Companies House Scraper](https://apify.com/euroscrape/uk-companies): UK companies by SIC code, location and incorporation date, with directors, filing dates, websites, emails and phones.
- [Impressum & Legal Notice Scraper (EU)](https://apify.com/euroscrape/company-identity): Turn any company website into a verified identity: legal name, registry numbers, VAT IDs, directors and contacts, across Europe.
- [EU Second-Hand Marketplaces Scraper: Vinted, OLX & More](https://apify.com/euroscrape/eu-marketplace-deals): one search on the top second-hand marketplace of 18 European countries, prices in €, cheapest country and resale margin.
- [Google Hotels Scraper: Prices from Every Booking Site](https://apify.com/euroscrape/google-hotels-prices): hotel prices for any destination and dates, with the price on every booking site, rate parity, price calendars and alerts.
- [App Store Reviews Scraper + Google Play Reviews](https://apify.com/euroscrape/app-reviews): reviews from both stores in 58 countries, rating by version and country, alerts on new negative reviews.
- [Google Flights Scraper: Cheapest Dates, Prices & Price History](https://apify.com/euroscrape/google-flights-prices): flight prices for any route and dates, cheapest day to fly, typical price range, CO2 and price-drop alerts.
- [Vinted Scraper: 26 Countries, Deals, Alerts & Seller Data](https://apify.com/euroscrape/vinted-scraper): search Vinted across 26 countries, prices with buyer fees, seller ratings, cheapest-country comparison and instant alerts on new listings.

💡 Already have company websites? Use the **Impressum & Legal Notice Scraper** to get their legal identity and contacts directly.

# Actor input Schema

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

Company name, trade name, director name or address words, e.g. "boulangerie", "plomberie", "Dupont". Optional if you use filters below.

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

e.g. 43.22A (plumbing), 56.10A (restaurants), 62.01Z (software). Full list: insee.fr. Leave empty to use sectors or text search.

## `sectors` (type: `array`):

Broad activity sections (NAF sections).

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

Department numbers, e.g. 75, 69, 13, 2A. Matches companies having at least one establishment there.

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

e.g. 75011, 69003.

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

e.g. 84 (Auvergne-Rhône-Alpes), 11 (Île-de-France), 93 (PACA).

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

Employee headcount ranges (INSEE).

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

INSEE size category (based on headcount, revenue and balance sheet).

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

Only companies with published accounts.

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

Only companies with published accounts.

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

Optional.

## `netIncomeMax` (type: `integer`):

Optional.

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

Company creation date (YYYY-MM-DD).

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

Company creation date (YYYY-MM-DD).

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

Official labels and company types.

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

INSEE legal category codes, e.g. 5710 (SAS), 5499 (SARL), 5720 (SASU), 1000 (sole proprietor).

## `onlyActive` (type: `boolean`):

Exclude ceased companies.

## `onlyWithDirectors` (type: `boolean`):

Keep only companies with at least one named natural-person director (useful for outreach).

## `sirens` (type: `array`):

Enrich your own list: one SIREN (9 digits) per line. Other filters are then ignored.

## `maxItems` (type: `integer`):

No 10,000 cap: large searches are split automatically.

## `findContacts` (type: `boolean`):

For each company, find its website and VERIFY it (the SIREN must appear on the site's legal notice), then extract emails, phones and social links. Billed only when a website is found.

## `useGoogleSearch` (type: `boolean`):

Also search Google when the website can't be matched from the company name. Finds a few more websites, but mostly 'probable' (not SIREN-verified) ones.

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

Name this search and schedule it: each run then returns only companies that are NEW in your filters (e.g. just created) or whose key data CHANGED (status, directors, address, activity, headcount). The first run is the baseline.

## `monitorChanges` (type: `boolean`):

If off, the monitor only reports new companies.

## Actor input object example

```json
{
  "query": "plomberie",
  "departments": [
    "38"
  ],
  "onlyActive": true,
  "onlyWithDirectors": false,
  "maxItems": 30,
  "findContacts": false,
  "useGoogleSearch": false,
  "monitorChanges": true
}
```

# Actor output Schema

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

Registry data for each company.

## `contacts` (type: `string`):

Website (SIREN-verified), emails and phones.

## `finances` (type: `string`):

Latest revenue, net income and size.

## `runSummary` (type: `string`):

Counters for this run (items found, output, errors).

# 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 = {
    "query": "plomberie",
    "departments": [
        "38"
    ],
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("euroscrape/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 = {
    "query": "plomberie",
    "departments": ["38"],
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("euroscrape/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 '{
  "query": "plomberie",
  "departments": [
    "38"
  ],
  "maxItems": 30
}' |
apify call euroscrape/france-companies --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,euroscrape/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/1pHkDX4nWluL0CJ4I/builds/5PAGgsFXg2mycUwcR/openapi.json
