# 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:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 company matcheds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 (compute) is billed to your run at Apify cost, so there is no subscription and no minimum.

| Event | Price | When |
|---|---|---|
| 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.

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 |

### 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.

**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.*

# 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.

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

Optional. Only used when fetching company websites for emails. Enable a proxy (Residential recommended) if some sites block datacenter IPs. Registry lookups never use a proxy.

## 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,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "French Company Email Finder 🇫🇷 (SIREN, dirigeants, contacts)",
        "description": "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.",
        "version": "0.1",
        "x-build-id": "5RUO46kpB8Fcc0eZf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/tagadanar~french-company-contacts/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-tagadanar-french-company-contacts",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/tagadanar~french-company-contacts/runs": {
            "post": {
                "operationId": "runs-sync-tagadanar-french-company-contacts",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/tagadanar~french-company-contacts/run-sync": {
            "post": {
                "operationId": "run-sync-tagadanar-french-company-contacts",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "companies"
                ],
                "properties": {
                    "companies": {
                        "title": "Companies to enrich",
                        "type": "array",
                        "description": "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": {
                        "title": "Find emails from the company website",
                        "type": "boolean",
                        "description": "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.",
                        "default": true
                    },
                    "maxResultsPerQuery": {
                        "title": "Max matches per company",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "integer",
                        "description": "How many matching companies to return per entry. Keep 1 when enriching a known company; raise it for exploratory name searches.",
                        "default": 1
                    },
                    "onlyActiveCompanies": {
                        "title": "Only active companies",
                        "type": "boolean",
                        "description": "Exclude administratively ceased companies from name-search results.",
                        "default": false
                    },
                    "pushNotFoundRecords": {
                        "title": "Output a record for entries with no match",
                        "type": "boolean",
                        "description": "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.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy for website fetches",
                        "type": "object",
                        "description": "Optional. Only used when fetching company websites for emails. Enable a proxy (Residential recommended) if some sites block datacenter IPs. Registry lookups never use a proxy.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
