# French Company Leads – SIRENE, SIREN & VAT (No 10k Cap) (`spherical_distinction/french-company-leads`) Actor

Export every French company matching your filters (NAF/APE code, département, headcount, revenue, RGE/Qualiopi/Bio labels) or enrich a SIREN/SIRET list. Official INSEE Sirene + RNE data, VAT number, GPS, financials. No 10,000-result cap. $3 per 1,000 companies.

- **URL**: https://apify.com/spherical\_distinction/french-company-leads.md
- **Developed by:** [Baron Sigma](https://apify.com/spherical_distinction) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 company results

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 Company Leads, SIREN Enrichment & VAT Validation 🇫🇷 (official Sirene / RNE data)

Build **B2B lead lists of French companies** in minutes, **enrich a list of SIREN / SIRET numbers**, or **validate French VAT numbers with the EU VIES service**, straight from the French government's official open data (INSEE Sirene + INPI RNE, via the *API Recherche d'entreprises*). No login, no API key, no fragile HTML scraping — so the Actor keeps working.

### Key differentiators

- ✅ **No 10 000-result cap** – the official API stops at 10 000 results per query; this Actor automatically splits big queries (by department, headcount…) and deduplicates, so you can export *every* restaurant, plumber or software company in France.
- ✅ **VAT lookup & validation (new)** – paste French VAT numbers (or SIREN / SIRET): the Actor derives the SIREN, checks the VAT key, asks the official **EU VIES** service whether the number is valid, and returns the VIES name and address with the full company record. See [VAT lookup mode](#vat-lookup--validation-mode-vies).
- ✅ **One search box for everything** – type a company name, a SIREN, a SIRET or a VAT number, and combine it with NAF / department filters.
- ✅ **VAT number on every row** – the French intra-EU VAT number (n° TVA intracommunautaire) from the registry, or computed from the SIREN.
- ✅ **Labels & certifications filters** – RGE, Qualiopi, Organic (Bio), ESS, Société à mission, Entreprise du Patrimoine Vivant, training organisations, performing-arts licence…
- ✅ **Finances** – latest published revenue (chiffre d'affaires) and net income, with min/max filters.
- ✅ **Human-readable labels** – NAF activity label, legal form label, headcount label, department & region names.
- ✅ **GPS coordinates** for every establishment – ready for maps and territory planning.
- ✅ **GDPR-minded** – directors' birth dates are never exported; you can exclude natural-person directors and sole traders.

### Use cases

- **Sales prospecting / lead generation**: all IT-services SMEs with 10–49 employees in Brittany; all RGE-certified roofers in Occitanie; all Qualiopi training organisations in Île-de-France.
- **CRM enrichment & KYC**: paste your SIREN/SIRET list, get legal name, address, NAF, headcount, VAT, status (active/ceased), directors.
- **Invoicing & supplier onboarding**: check that a customer's or supplier's French VAT number is valid in VIES before you invoice without VAT (intra-EU B2B), and store the check date.
- **Market sizing**: count and map companies by activity and territory.
- **Recruitment & partnerships**: find employers by sector and size near you.

### VAT lookup / validation mode (VIES)

Choose *Mode = VAT lookup / validation (EU VIES)* and paste one number per line. French VAT numbers (`FR27552032534`), SIREN (`552032534`) and SIRET (`55203253400646`) are all accepted; spaces and dots are ignored.

```json
{ "mode": "vat", "vatNumbers": ["FR27552032534", "FR89380129866", "542051180"] }
```

For each number the Actor:

1. derives the SIREN (the last 9 digits of a French VAT number) and checks its checksum;
2. computes the expected VAT key (`key = (12 + 3 × (SIREN mod 97)) mod 97`) and flags a wrong key (`vatKeyValid: false`);
3. asks the official **EU VIES** REST service (European Commission) whether the number is valid, and returns the name and address VIES holds;
4. adds the full company record from Sirene / RNE (legal form, NAF, address, active/ceased status, creation date, directors…).

Example (real output from our test on 27 September 2026, trimmed):

```json
{
  "inputId": "FR27552032534",
  "found": true,
  "siren": "552032534",
  "name": "DANONE",
  "legalFormLabel": "SA à conseil d'administration (s.a.i.)",
  "nafCode": "70.10Z",
  "isActive": true,
  "vatNumber": "FR27552032534",
  "vatNumberExpected": "FR27552032534",
  "vatKeyValid": true,
  "vatValid": true,
  "viesStatus": "valid",
  "viesName": "SA DANONE",
  "viesAddress": "59 RUE LA FAYETTE, 75009 PARIS",
  "vatCheckedAt": "2026-09-27T15:23:50.530Z"
}
```

- `vatValid` is `true` or `false` as answered by VIES, and `null` when VIES could not answer (outage, maintenance or congestion). `viesStatus` says why (`valid`, `invalid`, `unavailable: MS_MAX_CONCURRENT_REQ`, `not checked: wrong VAT key for this SIREN`…).
- VIES often answers "too many concurrent requests" for France at busy times. The Actor retries with exponential backoff, retries the remaining numbers once more after a pause, and stops calling VIES for a while if it looks down. Expect roughly 1 to 15 seconds per number.
- Numbers with a wrong key or an invalid SIREN are **not** sent to VIES, and each number is checked at most once per run (VIES fair-use rules).
- Use the *VAT check* view of the dataset for a compact table.

### Input examples

**Lead list** – software companies (NAF 62.01Z) in Ille-et-Vilaine with 10–99 employees:

```json
{
  "mode": "search",
  "nafCodes": ["62.01Z"],
  "departments": ["35"],
  "headcountRanges": ["11", "12", "21"],
  "maxResults": 500
}
```

**RGE-certified companies** in the construction sector (section F) with a site in Gironde, companies only (no sole traders), one row per local establishment. This is the prefilled example: 100 rows cost $0.30.

```json
{
  "mode": "search",
  "nafSections": ["F"],
  "departments": ["33"],
  "certifications": ["rge"],
  "soleTraders": "exclude",
  "outputLevel": "establishment",
  "maxResults": 100
}
```

> Tip: with location filters, choose *One row per… = Establishment*. In *Company* mode each row shows the head office address, which may be outside the department you filtered on.

**Look up one company** by name, SIREN, SIRET or VAT number (NAF / department filters still apply):

```json
{ "mode": "search", "query": "FR27552032534" }
```

**Enrichment** of a SIREN / SIRET / VAT list:

```json
{ "mode": "enrich", "sirenList": ["552081317", "443061841", "35600000000048", "FR27552032534"] }
```

### Output

One row per company (or per establishment when *One row per… = Establishment*). Example (real output, trimmed):

```json
{
  "siren": "512803552",
  "siret": "51280355200144",
  "vatNumber": "FR77512803552",
  "name": "CRISTAL'ID (CRISTAL'ID)",
  "nafCode": "62.01Z",
  "nafLabel": "Programmation informatique",
  "legalFormLabel": "SAS, société par actions simplifiée",
  "companyCategory": "PME",
  "headcountLabel": "50 à 99 salariés",
  "creationDate": "2009-06-01",
  "isActive": true,
  "address": "50 RUE HORACE 59491 VILLENEUVE D ASCQ",
  "postalCode": "59491",
  "city": "VILLENEUVE D ASCQ",
  "departmentName": "Nord",
  "regionName": "Hauts-de-France",
  "latitude": 50.603951048,
  "longitude": 3.1611884336,
  "financialYear": 2024,
  "revenue": 7838692,
  "netIncome": 595305,
  "certifications": [],
  "directors": [{ "type": "company", "name": "JL INVEST", "siren": "892423484", "role": "Président de SAS" }],
  "annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/512803552"
}
```

Export as **CSV, Excel, JSON** or send to Google Sheets, HubSpot, Make, Zapier via Apify integrations.

#### All output fields

`siren, siret, vatNumber, name, legalName, acronym, nafCode, nafLabel, nafSection, nafCode2025, legalFormCode, legalFormLabel, isSoleTrader, companyCategory, headcountRange, headcountLabel, headcountYear, creationDate, isActive, closingDate, establishmentsCount, openEstablishmentsCount, isHeadOffice, establishmentActive, establishmentCreationDate, establishmentNafCode, establishmentHeadcountRange, isEmployer, tradeName, address, postalCode, city, communeCode, department, departmentName, region, regionName, latitude, longitude, collectiveAgreements, financialYear, revenue, netIncome, certifications, directors, directorsText, matchingSites, annuaireUrl, sourceUpdatedAt, scrapedAt, source` (+ `inputId, found, error` in enrich and VAT lookup modes, and `vatNumberExpected, vatKeyValid, vatValid, viesStatus, viesName, viesAddress, viesRequestDate, vatCheckedAt` in VAT lookup mode).

### How much does it cost?

You pay only for the rows saved to the dataset (pay per event `company-result`, the same price in every mode). There are no platform-usage charges (only a negligible Actor start fee of $0.00005 per run, see the table). Invalid or not-found identifiers in enrich and VAT lookup modes are free, and so are VAT rows where VIES could not answer (`vatValid: null`).

| Rows exported | Apify Free / Starter ($0.003 per company) | Scale ($0.0025) | Business ($0.002) |
|---|---|---|---|
| Actor start fee (once per run) | $0.00005 | $0.00005 | $0.00005 |
| 100 (the prefilled example) | $0.30 | $0.25 | $0.20 |
| 1,000 | $3 | $2.50 | $2 |
| 10,000 | $30 | $25 | $20 |
| 100,000 | $300 | $250 | $200 |

Apify's Free plan includes **$5 of platform usage every month** (see [apify.com/pricing](https://apify.com/pricing)), which covers about **1,600 companies a month** at no cost. The start fee adds $0.05 per 1,000 runs, so it is negligible even for daily schedules. Set *Max results* and the *maximum cost per run* to cap your spend.

#### How does it compare?

Prices below were checked on each vendor's public pricing page on **27 September 2026**. These tools offer things this Actor does not (web interface, contact data, company documents, alerts), so compare what you need.

| Option | Price (27 Sep 2026) | Source |
|---|---|---|
| This Actor | $3 per 1,000 companies (Free/Starter), no subscription | Pricing tab |
| Pappers API | €30/month for 500 credits (monthly subscription) | [pappers.fr/api](https://www.pappers.fr/api) |
| Societeinfo | Starter: €59 excl. VAT/month for 300 credits, or €39/month billed yearly (€468) for 3,600 credits/year; 1 credit per exported company | [societeinfo.com/tarifs](https://www.societeinfo.com/tarifs/) |
| INSEE Sirene stock file | Free, but a raw multi-GB file with no financials, labels or directors | [data.gouv.fr](https://www.data.gouv.fr/) |

### Good to know

- Data freshness: the official API is updated daily from INSEE and INPI.
- *Non-diffusible* companies (which asked INSEE not to publish their data) are **not** available — by law.
- Emails and phone numbers are **not** part of official registry data and are not provided.
- In search and enrich modes the VAT number comes from the registry or the official key formula; it does not prove the company is VAT-registered. Use the VAT lookup mode for a VIES check.
- VIES is the European Commission's service for confirming VAT numbers of business partners in intra-EU trade. Its terms forbid other uses and bulk extraction of its data, and treat repeated checks of the same number on the same day as abuse. Use the VAT mode for that purpose.
- Headcount ranges are INSEE's (usually 1–2 years old).
- `revenue: 0` often means the company filed confidential accounts (revenue not disclosed) rather than zero turnover.
- Rate limits: the Actor stays under the public API limit (7 requests/second).

### Legal & GDPR

Source: *API Recherche d'entreprises* (DINUM), built on INSEE Sirene and INPI RNE data published under the **Licence Ouverte / Etalab 2.0** – free reuse, including commercial, with attribution (the `source` field provides it). Label files from the annuaire-entreprises project (MIT). VAT validity: **VIES** (European Commission, DG TAXUD), a free public service, used as its disclaimer allows (confirming the validity of a VAT number).

Directors' names and sole traders' names are **personal data** under the GDPR even though they are public. You are the data controller of the data you export: use it for a legitimate purpose (e.g. B2B prospecting related to the person's professional role), inform people and honour opt-outs (CNIL rules on B2B prospecting), and do not use it for purposes incompatible with its publication. Use *Directors = Corporate directors only* and *Sole traders = Exclude* for a list without natural persons.

This Actor is not affiliated with INSEE, INPI, DINUM or the European Commission.

### How to export all French companies by NAF code

1. Keep *Mode = Search companies by filters*.
2. Enter one or more NAF / APE codes (e.g. `56.10A` restaurants, `43.22A` plumbing, `62.01Z` software). Use *NAF sections* for a whole sector (e.g. `F` = construction).
3. Optionally add departments, regions, postal codes, headcount ranges, revenue bounds or labels.
4. Set *Max results* to the number of rows you want (or a high number for everything) and keep *Go beyond 10 000 results* enabled.
5. Run, then download the dataset as CSV or Excel, or send it to Google Sheets or your CRM.

In our local test, 10,100 restaurants (NAF 56.10A, above the API's 10,000 cap) were exported in 2 min 32 s.

### How to enrich a SIREN/SIRET list with VAT number and headcount

Choose *Mode = Enrich a list of SIREN / SIRET* and paste one number per line (9-digit SIREN or 14-digit SIRET; spaces are ignored). For each number you get the legal name, VAT number, NAF code and label, headcount range, legal form, address, active/ceased status, latest published revenue and net income, labels and directors. Every row carries your original identifier in `inputId` and a `found` flag. Invalid or unknown numbers return `found: false` and are not charged.

```json
{ "mode": "enrich", "sirenList": ["552081317", "443061841", "35600000000048"] }
```

### Is it legal to use Sirene data for B2B prospecting (GDPR / CNIL)?

The company data is official open data under the Licence Ouverte / Etalab 2.0, and commercial reuse is allowed with attribution. Directors' names and sole traders' names are still personal data under the GDPR. In France, the CNIL allows B2B prospecting of professionals when the message relates to their job, they are informed and they can opt out easily. Companies registered as *non-diffusibles* are never returned. For a list with no natural persons, set *Directors = Corporate directors only* and *Sole traders = Exclude*. This is general information, not legal advice (see *Legal & GDPR* above).

### Use it from Claude, Cursor or any MCP client

Apify exposes public Store Actors as tools through its hosted MCP server at `https://mcp.apify.com` ([docs](https://docs.apify.com/platform/integrations/mcp)). To give your AI assistant just this Actor, add this to your MCP client configuration (for Cursor: `.cursor/mcp.json`):

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=spherical_distinction/french-company-leads"
    }
  }
}
```

On first connection your browser opens so you can sign in to Apify and approve access (OAuth). You can also skip OAuth by adding `"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }` with your token from Console → Settings → API & Integrations. In **Claude Desktop**, add a custom connector with the same URL. With the Apify CLI: `apify mcp install cursor --tools spherical_distinction/french-company-leads` (also `claude-code`, `vscode`, `codex`…).

Then just ask, for example: *"Check these VAT numbers and tell me which companies are ceased"* or *"List RGE-certified roofers in Gironde with 10+ employees"*. Runs are billed to your Apify account at the normal per-row price. The generic `https://mcp.apify.com` URL (no `tools` parameter) also works: the assistant can then search the Store and call this Actor by name.

### Combine with French & EU Public Tenders Monitor

[French & EU Public Tenders Monitor](https://apify.com/spherical_distinction/fr-eu-tenders-monitor) returns public-contract **award notices with the winners' names**. Put a French winner's name in the *Company name, SIREN, SIRET or VAT number* field of this Actor to get its SIREN, VAT number, headcount, revenue and directors. That gives you a qualified list of companies that just won public contracts in your sector. Both Actors can be chained with Apify integrations or webhooks.

### FAQ

**Can I get more than 10 000 companies?** Yes. Keep *Go beyond 10 000 results* enabled (it is on by default).

**Do I need an API key?** No.

**Can I validate VAT numbers in bulk?** Yes, with *Mode = VAT lookup / validation*. VIES checks run one at a time (about 1 per second, slower when VIES is busy), so a list of 1,000 numbers takes roughly 20 minutes to a few hours depending on VIES load.

**What does `vatValid: null` mean?** VIES did not answer (outage or congestion). These rows are not charged; run them again later.

**Are emails and phone numbers included?** No. They are not part of the official registries.

**How fresh is the data?** The official API is updated daily from INSEE and INPI.

**Can I export to Excel or Google Sheets?** Yes. Download the dataset as CSV, Excel or JSON, or use Apify's Google Sheets, HubSpot, Make or Zapier integrations.

***

### 🇫🇷 En français : exporter un fichier d'entreprises par code NAF

Cet Actor génère un fichier d'entreprises françaises à partir des données officielles SIRENE (INSEE) et RNE (INPI), via l'API Recherche d'entreprises de l'État. Vous filtrez par code NAF / APE, département, région, tranche d'effectif, chiffre d'affaires ou label (RGE, Qualiopi, Bio, ESS…), puis vous exportez la liste en CSV ou Excel. Chaque ligne contient le SIREN, le SIRET, le numéro de TVA intracommunautaire, l'adresse, les coordonnées GPS, les derniers comptes publiés et les dirigeants. Le mode « enrichissement » complète en masse une liste de SIREN ou de SIRET que vous avez déjà. Le mode « vérification TVA » contrôle vos numéros de TVA intracommunautaire auprès du service officiel VIES de la Commission européenne (valide / invalide, nom et adresse VIES, date du contrôle) et ajoute la fiche Sirene de chaque entreprise. Il n'y a pas de limite à 10 000 résultats, pas d'abonnement, et vous payez 0,003 $ par entreprise exportée (le plan gratuit Apify inclut 5 $ de crédit par mois).

🇫🇷 **Mots-clés** : fichier entreprises, base de données entreprises France, extraction SIRENE, liste d'entreprises par code NAF / code APE, prospection B2B, génération de leads, fichier de prospection, enrichissement SIREN SIRET, numéro de TVA intracommunautaire, vérification numéro de TVA, contrôle TVA VIES, entreprises RGE, organismes Qualiopi, annuaire des entreprises, alternative Pappers / Société.com / Societeinfo, export Excel CSV entreprises par département, chiffre d'affaires, dirigeants.

# Actor input Schema

## `mode` (type: `string`):

Search: build a list from filters (or look up one company by name, SIREN, SIRET or VAT number). Enrich: look up a list of SIREN / SIRET / VAT numbers. VAT lookup: validate French VAT numbers with the EU VIES service and return the company data.

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

Free text on company name / address / director (e.g. "boulangerie", "plomberie Lyon"), or one identifier: SIREN (9 digits), SIRET (14 digits) or French VAT number (FR + 2-character key + SIREN). Identifiers do an exact lookup (NAF / department filters still apply; ceased companies are returned with isActive = false). Leave empty to use filters only.

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

INSEE NAF rev.2 codes, e.g. 62.01Z (software), 43.22A (plumbing), 56.10A (restaurants). 6201Z format also accepted.

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

Broad activity sections (A–U), e.g. F = construction, I = hotels & restaurants, J = information & communication.

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

French department codes, e.g. 75, 69, 13, 2A, 971. Filters on establishment location.

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

5-digit postal codes (codes postaux).

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

5-character INSEE commune codes (not postal codes), e.g. 35238 for Rennes.

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

INSEE region codes, e.g. 11 Île-de-France, 53 Bretagne, 84 Auvergne-Rhône-Alpes.

## `headcountRanges` (type: `array`):

INSEE headcount codes: NN no employees, 00 = 0, 01 = 1–2, 02 = 3–5, 03 = 6–9, 11 = 10–19, 12 = 20–49, 21 = 50–99, 22 = 100–199, 31 = 200–249, 32 = 250–499, 41 = 500–999, 42 = 1000–1999, 51 = 2000–4999, 52 = 5000–9999, 53 = 10000+.

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

INSEE category: PME (SME), ETI (mid-cap), GE (large enterprise).

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

INSEE legal category codes, e.g. 5710 SAS, 5499 SARL, 5720 SASU, 1000 sole trader, 9220 association.

## `certifications` (type: `array`):

Keep only companies holding ALL selected labels.

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

Minimum turnover (chiffre d'affaires) from the latest published accounts. Only companies that publish accounts match.

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

Maximum turnover.

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

Minimum net result (résultat net).

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

Maximum net result.

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

Keep companies created on or after this date (applied after download — still browses matching companies).

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

Keep companies created on or before this date.

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

Exclude ceased companies (état administratif = C).

## `soleTraders` (type: `string`):

Sole traders' company name is usually a person's name (personal data under GDPR). Choose 'exclude' for a companies-only list.

## `sirenList` (type: `array`):

One SIREN (9 digits), SIRET (14 digits) or French VAT number (FRkk + SIREN) per line. Spaces and dots are ignored.

## `vatNumbers` (type: `array`):

One per line: French VAT number (e.g. FR27552032534), SIREN or SIRET. For each one the Actor derives the SIREN, computes the expected VAT key, checks validity with the EU VIES service (about 1 check per second) and returns the Sirene company data. Each number is checked once per run.

## `outputLevel` (type: `string`):

Company: one row per legal entity (head office address). Establishment: one row per matching site/branch (useful with location filters).

## `directorsMode` (type: `string`):

Directors come from the public RNE register. Birth dates are never exported (GDPR data minimisation).

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

Maximum number of rows to save (search mode). You pay per row.

## `splitLargeQueries` (type: `boolean`):

The official API stops at 10 000 results per query. When enabled, large queries are automatically split (by department, headcount…) to fetch everything.

## `requestsPerSecond` (type: `integer`):

Politeness limit. The API allows 7 req/s per IP; keep ≤ 6.

## Actor input object example

```json
{
  "mode": "search",
  "nafSections": [
    "F"
  ],
  "departments": [
    "33"
  ],
  "certifications": [
    "rge"
  ],
  "activeOnly": true,
  "soleTraders": "exclude",
  "vatNumbers": [
    "FR27552032534",
    "FR89380129866",
    "542051180"
  ],
  "outputLevel": "establishment",
  "directorsMode": "namesAndRoles",
  "maxResults": 100,
  "splitLargeQueries": true,
  "requestsPerSecond": 5
}
```

# Actor output Schema

## `results` (type: `string`):

All results in the Actor run's default dataset (opens on the Overview view).

## `vatChecks` (type: `string`):

Same dataset, opened on the VAT check view (VIES validity, name and address).

# 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 = {
    "nafSections": [
        "F"
    ],
    "departments": [
        "33"
    ],
    "certifications": [
        "rge"
    ],
    "soleTraders": "exclude",
    "vatNumbers": [
        "FR27552032534",
        "FR89380129866",
        "542051180"
    ],
    "outputLevel": "establishment",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("spherical_distinction/french-company-leads").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 = {
    "nafSections": ["F"],
    "departments": ["33"],
    "certifications": ["rge"],
    "soleTraders": "exclude",
    "vatNumbers": [
        "FR27552032534",
        "FR89380129866",
        "542051180",
    ],
    "outputLevel": "establishment",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("spherical_distinction/french-company-leads").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 '{
  "nafSections": [
    "F"
  ],
  "departments": [
    "33"
  ],
  "certifications": [
    "rge"
  ],
  "soleTraders": "exclude",
  "vatNumbers": [
    "FR27552032534",
    "FR89380129866",
    "542051180"
  ],
  "outputLevel": "establishment",
  "maxResults": 100
}' |
apify call spherical_distinction/french-company-leads --silent --output-dataset

```

## MCP server setup

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

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/XLmmWDfZfVsfxe2JW/builds/lgBh86hraKs33khGu/openapi.json
