# French Company Email Finder 🇫🇷 (SIREN, dirigeants, contacts) (`tagadanar/french-company-contacts`) Actor

Find dirigeant emails for French companies: give a SIREN, SIRET or name, get official registry firmographics, the named directors and a scored best-effort email for each. One call instead of Pappers plus Dropcontact. Pay per result, no subscription.

- **URL**: https://apify.com/tagadanar/french-company-contacts.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** Lead generation, AI, Automation
- **Stats:** 9 total users, 5 monthly users, 73.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 company matcheds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## French Company Email Finder: SIREN & Dirigeants to Scored Emails

Find a usable email for the people who actually run a French company. Give it a SIREN, a SIRET or a company name plus the company website and you get a best-effort email for each named director, with an honest confidence level, on top of the full official registry record. Paste a raw list of SIREN numbers or names and it works through all of them in one run.

Most French company scrapers stop at the registry: legal form, NAF code, address. Most email finders know nothing about the French register. This one does both. It reads the official SIRENE and RNE/INPI data, then works out the firm's email pattern from what the site actually publishes and applies it to the directors' real names.

### What you get per company

| Field | Description |
| --- | --- |
| `name`, `legalName`, `siren`, `headquartersSiret` | Identity from the official register |
| `vatNumber` | Intra-community VAT (TVA), computed from the SIREN |
| `legalFormLabel`, `nafCode` | Legal form and main activity code |
| `status`, `creationDate` | Active or ceased, and since when |
| `employeesRange`, `companyCategory` | Workforce bracket and PME/ETI/GE class |
| `address`, `postalCode`, `city`, `department`, `region` | Head-office location |
| `officers[]` | Directors on file: name, first/last name, role, birth year |
| `emails[]`, `primaryEmail` | Addresses published on the company site |
| `emailPattern` | The firm's address shape once we can confirm it (e.g. `{first}.{last}`) |
| `mailDomain`, `domainHasMx` | The domain staff mail uses, and whether it can receive mail |
| `contacts[]` | Per director: name, role, best-effort `email`, and `emailConfidence` |

#### How confident is each email

Every guessed address carries an `emailConfidence` so you know what you are looking at:

- `published`: the address literally appears on the company website.
- `pattern`: the firm's own address shape was confirmed from a published address, then applied to this director.
- `pattern_guess`: the domain accepts mail, but the pattern is the common French default rather than a confirmed one.
- `none`: no domain or no mail server, so no address was produced.

We never label an address "verified". Mailbox-level verification is not reliable from cloud infrastructure (outbound SMTP is blocked and catch-all domains accept everything), so we do not pretend otherwise. What you get is a scored best effort you can feed into your own validation step.

### Who uses it

- **Sales and lead-gen teams** building a French prospect list: a SIREN or company name in, a named decision-maker and a scored email out.
- **Recruiters and agencies** who need the director's name and a way to reach them, not just a switchboard number.
- **CRM enrichment**: pass a column of SIREN numbers or domains and fill in firmographics plus contacts in one run.

### Input examples

Enrich known companies and find emails from their sites:

```json
{
  "companies": [
    { "query": "Decathlon", "website": "decathlon.fr" },
    { "query": "Michelin", "website": "michelin.com" },
    { "query": "552032534", "website": "danone.com" }
  ],
  "discoverEmails": true
}
```

Registry data only, no website (firmographics and directors, no email):

```json
{
  "companies": ["Decathlon", "306138900", "OVHcloud"],
  "discoverEmails": false
}
```

Pass only a website and let the brand be the search term:

```json
{
  "companies": [{ "website": "leboncoin.fr" }]
}
```

### Pricing

You pay per useful result. Platform usage is included in the price, so there is no subscription and no usage line on your bill.

| Event | Price | When |
|---|---|---|
| Actor start | $0.001 per run | Flat, once per run |
| Company matched | $0.002 per company ($2 per 1,000) | The query resolved to a company in the register |
| Email found | $0.004 per company ($4 per 1,000) | At least one published or confirmed-pattern email was delivered |

Misses are free: a query that matches nothing costs nothing, and a company where we only produced an unconfirmed `pattern_guess` is not billed as an email. The tiny start fee only covers a run that returns nothing at all.

How that compares, per 1,000 companies with an email delivered:

| Route | Cost | Needs a subscription? |
|---|---|---|
| This actor | **$6** (match + email) | No |
| Typical Apify email finders | $8 to $100, registry data not included | No |
| Pappers + Dropcontact | roughly €25 to €50 in credits, two tools to wire together | Yes, both |
| Hunter.io / Kaspr / Lusha | $34 to $49 per month per seat before you find anything | Yes |

### Trouver l'email d'un dirigeant à partir d'un SIREN : 6 méthodes comparées (2026)

*This section is in French because the question is asked in French. The actor itself works the same in any language.*

La question revient sur les forums growth depuis 2017, toujours sans réponse canonique : vous avez un SIREN, un SIRET ou un nom de société, il vous faut le nom du dirigeant et une adresse qui ne soit pas `contact@`. Voici ce que donnent réellement les six voies possibles, avec le prix par ligne.

**1. L'annuaire officiel gratuit (annuaire-entreprises.data.gouv.fr).** Gratuit, propre, et suffisant pour le nom du dirigeant : la fiche agrège SIRENE et le RNE. Aucun email par contre, et certains changements de dirigeants récents tardent à remonter. Très bien pour vérifier dix boîtes à la main, inutilisable pour enrichir un fichier de prospection.

**2. Le merge INPI/RNE fait maison.** Les données du Registre National des Entreprises se téléchargent librement chez l'INPI. Croisées avec SIRENE, elles couvrent dirigeants et firmographie sur tout le stock français. Comptez un à deux jours de dev pour le pipeline, plus la maintenance quand les formats bougent. Coût par ligne : zéro, si votre temps ne compte pas. Et toujours pas d'email à la fin.

**3. Pappers.** La référence pour la fiche légale, avec une API propre facturée aux crédits. Les retours de forum lui donnent la meilleure qualité de rapprochement SIREN vers domaine du marché. Mais l'email nominatif du dirigeant n'y figure presque jamais : vous repartez avec un nom, pas un contact. En pratique on finit par copier-coller fiche par fiche, ou par empiler un deuxième outil derrière.

**4. Societeinfo.** L'option "Contact Direct" promet exactement ce qu'on cherche, sur abonnement. Les retours en forum sont mitigés dès que le persona sort des fonctions exposées : bons résultats sur les DAF de grosses structures, beaucoup de lignes vides sur les gérants de TPE et les fonctions discrètes. À tester sur votre fichier avant d'engager un abonnement annuel.

**5. Dropcontact, Hunter et les enrichisseurs génériques.** Ils partent d'un nom et d'un domaine et devinent l'adresse. Ça marche bien sur les boîtes digitalisées dont les salariés sont sur LinkedIn, beaucoup moins sur le tissu TPE/PME français. Le prix de marché souvent cité en forum tourne autour de 0,20 € la ligne enrichie, avec un abonnement mensuel dans la plupart des cas. Et il faut déjà avoir le nom du dirigeant, donc un outil de plus en amont.

**6. Cet actor.** Il fait les deux étapes d'un coup : SIREN ou nom en entrée, registre officiel + dirigeants nommés + email scoré en sortie, facturé à la ligne utile. 0,2 centime la fiche enrichie, 0,6 centime quand un email exploitable est livré, sans abonnement. La limite, dite franchement : si la société ne publie rien en ligne, vous aurez le dirigeant mais pas d'adresse confirmée, et ces cas ne sont pas facturés comme email.

Aucune méthode ne sort un email nominatif fiable pour 100 % des sociétés françaises, quoi qu'en disent les pages de vente. Le bon choix dépend du volume : à dix boîtes, l'annuaire gratuit suffit ; à dix mille, il vous faut un pipeline, que vous le construisiez (méthode 2) ou que vous le louiez à la ligne (méthode 6).

### FAQ

**Do I have to provide a website?** No, but emails need one. Without a website you still get the full registry record (firmographics and named directors). With a website you also get published emails and per-director guesses.

**Where does the company data come from?** The official aggregated register at recherche-entreprises.api.gouv.fr, which combines SIRENE (INSEE) and the RNE/INPI. No key, no scraping of a paywalled source.

**Why are some emails only a "pattern\_guess"?** When a company publishes no personal address we cannot confirm its exact pattern, so we apply the most common French shape (`prénom.nom@`) and flag it as a guess. Treat those as leads to validate, not as confirmed addresses.

**Are the guessed emails deliverable?** We check that the domain has a mail server (MX record). We do not check individual mailboxes. Run the output through your own verification if you need certainty.

**Is this GDPR-friendly?** It uses open-register data about companies and their directors in a professional capacity, and site-published business addresses. It does not use breach data, social profiles, or personal addresses of private individuals. For the campaigns you run with the output you are the data controller, and French B2B prospecting rules are workable but real: email dirigeants about topics tied to their role, identify yourself, and honor unsubscribes. The actor sources cleanly; compliant outreach is your part.

**Can I look up in bulk?** Yes. Pass hundreds of entries. You are charged per company matched, and again only when at least one usable email is delivered.

### Part of the French data suite

- [French Company KYC](https://apify.com/tagadanar/french-company-kyc): SIRENE, officers and BODACC insolvency flags for due diligence.
- [Europages Scraper](https://apify.com/tagadanar/europages-scraper): pan-European B2B suppliers with phone and email.

***

### Something missing?

If you need an extra field, another source, or a different output, open an issue on this Actor and describe it. I read every request and small additions usually ship within days. More French company and tender Actors are on [my profile](https://apify.com/tagadanar).

*Email finder France, French company email finder, SIREN to email, dirigeant email finder, French B2B leads, SIRENE enrichment, company email finder France, prénom.nom email pattern, RNE INPI enrichment, Pappers alternative, Dropcontact alternative, trouver l'email d'un dirigeant, email dirigeant SIREN, coordonnées du dirigeant, enrichir un fichier SIRET, fichier de prospection dirigeants.*

# Actor input Schema

## `companies` (type: `array`):

One entry per company. Use a plain string for a name / 9-digit SIREN / 14-digit SIRET (registry data only), or an object with a <code>website</code> to also find emails, e.g. <code>{"query": "OVHcloud", "website": "ovhcloud.com"}</code>. If you pass only a website, the brand is used as the search term. Bulk lists are fine.

## `discoverEmails` (type: `boolean`):

When on, entries that include a <code>website</code> are enriched with published emails scraped from the site, the firm's detected email pattern, an MX check, and a best-effort email per named director. Entries without a website return registry data only.

## `maxResultsPerQuery` (type: `integer`):

How many matching companies to return per entry. Keep 1 when enriching a known company; raise it for exploratory name searches.

## `onlyActiveCompanies` (type: `boolean`):

Exclude administratively ceased companies from name-search results.

## `pushNotFoundRecords` (type: `boolean`):

When on, entries with no registry match produce a record with <code>found: false</code> so bulk pipelines can track misses. Not-found records are never charged.

## Actor input object example

```json
{
  "companies": [
    {
      "query": "Decathlon",
      "website": "decathlon.fr"
    },
    {
      "query": "Michelin",
      "website": "michelin.com"
    },
    "552032534"
  ],
  "discoverEmails": true,
  "maxResultsPerQuery": 1,
  "onlyActiveCompanies": false,
  "pushNotFoundRecords": true
}
```

# Actor output Schema

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

One item per input query in the default dataset, with firmographics, officers and scored emails.

# 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 = {
    "companies": [
        {
            "query": "Decathlon",
            "website": "decathlon.fr"
        },
        {
            "query": "Michelin",
            "website": "michelin.com"
        },
        "552032534"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/french-company-contacts").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 = { "companies": [
        {
            "query": "Decathlon",
            "website": "decathlon.fr",
        },
        {
            "query": "Michelin",
            "website": "michelin.com",
        },
        "552032534",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/french-company-contacts").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companies": [
    {
      "query": "Decathlon",
      "website": "decathlon.fr"
    },
    {
      "query": "Michelin",
      "website": "michelin.com"
    },
    "552032534"
  ]
}' |
apify call tagadanar/french-company-contacts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=tagadanar/french-company-contacts",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bTHvyBqrio8HlslPp/builds/4TGSpmyx76gCMVKuL/openapi.json
