# France Company Data — SIREN, Directors & Financials (`foxlabs/france-company-data`) Actor

Look up French companies by name or SIREN, or browse by industry (NAF) & department. Returns directors, financials (revenue, net result), workforce, address, legal form & status from official open data (INSEE/INPI) — no API key. KYC, due diligence, lead lists.

- **URL**: https://apify.com/foxlabs/france-company-data.md
- **Developed by:** [Berkan Kaplan](https://apify.com/foxlabs) (community)
- **Categories:** Business, Lead generation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

<p align="center"><a href="https://apify.com/foxlabs/france-company-data"><img src="https://data.foxlabs.com.tr/img/france-company-data-banner.svg" alt="France Company Data — SIREN, Directors &amp; Financials" width="100%" /></a></p>

## France Company Data — SIREN, Directors & Financials

**Turn France's official company register into structured, ready-to-use intelligence.** Look up any French company — or a whole sector — and get one clean JSON record with identity, directors, annual financials, workforce, activity and registered address, straight from the French government's open data. **No API key, no login, no fragile HTML scraping** — so it doesn't break when a website changes.

Built on the official **Recherche d'entreprises API** (`recherche-entreprises.api.gouv.fr`), which merges **INSEE Sirene** firmographics, **INPI RNE** directors and **published annual accounts** into one source, released under **Licence Ouverte / Etalab 2.0** — free to reuse **and resell**, with attribution.

- 🇫🇷 **Whole official register** — any French company by name, SIREN/SIRET, or a no-name sector browse (NAF + department + size)
- 👤 **Directors & auditors** — every officer with role, birth year and nationality; auditors (commissaires aux comptes) too. **~95% of companies & sole traders** carry at least one officer; **~75% across a mixed browse**, which also returns associations & public bodies (they register none) — measured 2026-07-28, n=2,095
- 💶 **Real financials** — revenue & net result per filed year, the latest given raw, compact (`€311M`) and exact (`311,448,000`). Present for **~58% of commercial companies** (SAS/SARL/SA, n=1,362); French micro-firms may keep their accounts confidential
- ⚡ **Official open data, no key** — Licence Ouverte / Etalab 2.0: commercial reuse **and resale** allowed; direct connection, no proxies to manage

### Quick start (API)

Build a list of active small/medium **software companies (NAF `62.01Z`) in Paris (dept `75`)** in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/foxlabs~france-company-data/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "nafCode": "62.01Z", "department": "75", "companyCategory": "PME", "maxResults": 100 }'
```

Prefer no code? Open the **Input** tab, type a company name (or set a browse filter), and click **Start** — then download the results.

### What you get

One clean, flat record per company:

| Field | Type | Description |
|---|---|---|
| `siren` | string | 9-digit SIREN — the unique company identifier |
| `name` / `legalName` | string | Full name (nom complet) / registered legal name (raison sociale) |
| `acronym` | string | Acronym (sigle), where registered |
| `status` | string | `Active` or `Ceased` (état administratif) |
| `legalFormCode` | string | INSEE legal-form code (nature juridique), e.g. `5710` = SAS |
| `legalFormLabel` | string | Official INSEE label for that code, e.g. *SAS, société par actions simplifiée* — the French original, verbatim (not a translation), so it can be checked word-for-word against the register |
| `companyCategory` | string | INSEE size class — `PME`, `ETI` or `GE` |
| `nafCode` | string | NAF/APE activity code, e.g. `62.01Z` |
| `industrySection` | string | Readable NACE section, e.g. *Information & communication* |
| `employeeRange` | string | Readable workforce band, e.g. *1,000–1,999 employees* (not a raw code) |
| `dateCreated` | string | Company creation date (`YYYY-MM-DD`) |
| `establishmentsCount` | number | Number of establishments (établissements) |
| `address` | string | Full head-office (siège) address |
| `street` / `postalCode` | string | Address parts |
| `city` | string | Commune. Paris/Lyon/Marseille arrondissement suffixes are normalised away (`PARIS 04`, `MARSEILLE 15EME`, `LYON 1ER` → `PARIS`, `MARSEILLE`, `LYON`) so grouping by city doesn't split into phantom buckets — the arrondissement stays in `postalCode` and in the verbatim `address` |
| `department` / `region` | string | Department number (e.g. `92`) / INSEE region code (e.g. `11`) |
| `latitude` / `longitude` | number | Head-office geocoordinates |
| `directors` | array | Officers **and** auditors — see shape below |
| `directorsCount` | number | Count of officers/auditors |
| `latestRevenue` | number | Latest filed revenue (chiffre d'affaires), EUR |
| `latestRevenueCurrency` | string | `EUR` when revenue is present |
| `latestRevenueFormatted` | string | Compact revenue, e.g. `€311M` |
| `latestRevenueExact` | string | Exact revenue with separators, e.g. `311,448,000` |
| `latestNetResult` | number | Latest filed net result (résultat net), EUR — can be negative |
| `latestFinancialYear` | string | Year of the latest filed accounts, e.g. `2024` |
| `financials` | array | Per year: `{ year, revenue, netResult }` |
| `isNonprofit` / `isESS` / `isMissionCompany` | bool / null | Association / social-&-solidarity-economy / société-à-mission flags |
| `vatNumber` | string | Intra-EU VAT (TVA), e.g. `FR14794598813` |
| `source` / `sourceUrl` | string | Attribution string / link to the official annuaire-entreprises page |
| `scrapedAt` | string | ISO timestamp of the run |

Each entry in `directors` is either a **person** — `{ type: "person", name, role, birthYear, nationality }` — or a **legal-person / auditor** — `{ type: "organisation", name, siren, role }`. Missing values are `null`, never a guess.

### Sample output

A real record pulled live from the source API (`scrapedAt` shown illustratively):

```json
{
  "siren": "794598813",
  "name": "DOCTOLIB",
  "legalName": "DOCTOLIB",
  "acronym": null,
  "status": "Active",
  "legalFormCode": "5710",
  "legalFormLabel": "SAS, société par actions simplifiée",
  "companyCategory": "ETI",
  "nafCode": "62.01Z",
  "industrySection": "Information & communication",
  "employeeRange": "1,000–1,999 employees",
  "dateCreated": "2013-07-15",
  "establishmentsCount": 9,
  "address": "54 QUAI CHARLES PASQUA, 92300, LEVALLOIS-PERRET",
  "street": "54 QUAI CHARLES PASQUA",
  "postalCode": "92300",
  "city": "LEVALLOIS-PERRET",
  "department": "92",
  "region": "11",
  "latitude": 48.900771302,
  "longitude": 2.2849148026,
  "directors": [
    { "type": "person", "name": "STANISLAS NIOX-CHATEAU", "role": "Président de SAS", "birthYear": "1987", "nationality": null },
    { "type": "organisation", "name": "GRANT THORNTON", "siren": "632013843", "role": "Commissaire aux comptes titulaire" },
    { "type": "organisation", "name": "KPMG S.A", "siren": "775726417", "role": "Commissaire aux comptes titulaire" }
  ],
  "directorsCount": 3,
  "latestRevenue": 311448000,
  "latestRevenueCurrency": "EUR",
  "latestRevenueFormatted": "€311M",
  "latestRevenueExact": "311,448,000",
  "latestNetResult": -127499000,
  "latestFinancialYear": "2024",
  "financials": [
    { "year": "2024", "revenue": 311448000, "netResult": -127499000 }
  ],
  "isNonprofit": null,
  "isESS": null,
  "isMissionCompany": null,
  "vatNumber": "FR14794598813",
  "source": "INSEE Sirene + INPI RNE via recherche-entreprises.api.gouv.fr — Licence Ouverte / Etalab 2.0",
  "sourceUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/794598813",
  "scrapedAt": "2026-07-05T09:12:44.130Z"
}
```

### Input & filters

Three ways to search — mix and match:

- **By SIREN / SIRET** (`sirenNumbers`) — exact company lookup, 9- or 14-digit. The most precise input.
- **By name** (`companyNames`) — full-text search, e.g. `Doctolib`, `BlaBlaCar`.
- **Browse & filter** — no name needed: by **NAF code** (`nafCode`, e.g. `62.01Z`), **department** (`department`, e.g. `75` = Paris — companies **headquartered** there, siège-based) and/or **size** (`companyCategory` — `PME` / `ETI` / `GE`). Ideal for building targeted local sector lists.
- **Include ceased companies** (`includeInactive`) — off by default (active only); enable to widen to ceased (cessée) entities.
- **Max results** (`maxResults`) — 1–10,000 (the source API's hard window per query).

### Example inputs (copy & paste)

```jsonc
// 1) Exact lookup by SIREN and/or SIRET — full profiles
{ "sirenNumbers": ["794598813", "79459881300077"] }

// 2) Name search — find companies by name
{ "companyNames": ["Doctolib", "BlaBlaCar"], "maxResults": 50 }

// 3) Browse a sector — active software SMEs in Paris
{ "nafCode": "62.01Z", "department": "75", "companyCategory": "PME", "maxResults": 1000 }

// 4) Whole sector nationwide — every company under a NAF code
{ "nafCode": "62.01Z", "maxResults": 5000 }

// 5) Large enterprises (GE) in a department (Rhône / Lyon)
{ "department": "69", "companyCategory": "GE", "maxResults": 500 }

// 6) Include ceased companies in a sector (history / M&A screening)
{ "nafCode": "62.02A", "department": "75", "includeInactive": true, "maxResults": 2000 }

// 7) Mid-market firms (ETI) in a sector nationwide (wholesale trade)
{ "nafCode": "46.90Z", "companyCategory": "ETI", "maxResults": 3000 }
```

### Use cases

- **KYC / KYB onboarding.** Pass a counterparty's `sirenNumbers` → verified legal identity, status, legal form, VAT, size class, and the full **directors & auditors** list — the firmographic core of a compliance file, in one call.
- **Supplier & counterparty due diligence.** Before you sign, read a company's directors, its **financial trajectory** (revenue + net result per filed year) and whether it's still active.
- **Market sizing & sector mapping.** Browse a NAF code across a department → count the players, see the size distribution (`companyCategory`) and rank leaders by revenue.
- **ICP / account targeting lists.** Build a firmographic list by industry + region + size to feed your CRM, then enrich contacts with your own tooling. *(This dataset is firmographic — it doesn't include company contact emails or phones.)*
- **Credit & risk screening.** Rank a portfolio by latest revenue and net result, and flag ceased entities before extending terms.
- **CRM enrichment & M\&A screening.** Feed existing SIRENs or names → append NAF, size band, address, geocoordinates, directors and financials; missing fields return `null`, never a guess. Filter a sector by size to spot targets and see who controls each company.

### Performance & throughput

Each search pages the official API at 25 records per page with a short, polite delay between pages — so a single SIREN or name returns in seconds, and larger browses scale with the result count. There are no external API keys, proxies or rate limits to manage. The source API caps **any single query at 10,000 records** — use the NAF, department and size filters to slice large sectors into sub-10k pulls. Direct connection is used by default (the open-data API rejects the shared datacenter proxy pool).

### Integrations

**JavaScript** (`apify-client`):

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('foxlabs/france-company-data').call({
  nafCode: '62.01Z', department: '75', companyCategory: 'PME', maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**Python** (`apify-client`):

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("foxlabs/france-company-data").call(run_input={
    "nafCode": "62.01Z", "department": "75", "companyCategory": "PME", "maxResults": 500,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item.get("latestRevenueFormatted"))
```

Also works with **Make / n8n / Zapier** (Apify app → run this Actor, map the input), scheduled runs, webhooks, and the **Apify MCP server** so AI agents can call it as a tool.

### Data quality

Coverage is read live from the official register on every run — nothing is cached or fabricated, and missing values are `null`.

**How these numbers were measured.** 2,095 records pulled on **2026-07-28** from five live browse slices — dept **69** Lyon (500 rows), dept **13** Marseille (295), dept **75** Paris (500), NAF **62.01Z** nationwide (500), and dept **13** + NAF **56.10A** (300) — plus a separately-reported 20-company known-brand SIREN lookup. A percentage is the share of returned rows carrying a non-empty value.

| Field group | Measured coverage |
|---|---|
| Core identity (SIREN, name, status, legal form, NAF/APE, workforce band, creation date, address) | **100%** — the base Sirene register fields |
| City / postcode / geocoordinates | **99.0%** / **99.0%** / **98.0%** |
| Directors / auditors | **74.8%** of all returned rows — and that splits hard by entity type: **94.7%** for companies & sole traders (legal-form codes 1000–6901, n=1,654) vs **0.5%** for associations, unions & public bodies (codes 7xxx–9xxx, n=441), which register no officers at all |
| Financials (revenue + net result) | **37.9%** of all returned rows; **57.9%** of commercial companies (SAS/SARL/SA, n=1,362); **0%** for sole traders, associations and public bodies, which file no annual accounts |
| Financials by size, companies only | PME **47.6%** · ETI **90.8%** · GE **97.2%** |
| Financial freshness | **61.1%** of the rows that do have accounts show **2024 or 2025** as the latest filed year; 79.1% show 2022 or later (n=794) |
| VAT number | **61.2%** |

**Coverage swings with what you browse — plan for it.** Across the five slices, directors ran from **17.6%** (a Marseille location-only browse that happened to return 64% associations) to **97.7%** (a Marseille restaurant-sector browse), and financials from **4.4%** to **48.4%**. A **sector browse** (`nafCode`) returns registered businesses and scores high; a **location-only browse** also surfaces associations, unions and public bodies, which have no officers and file no accounts, so the averages drop. If you want trading companies only, browse with a `nafCode` (or filter on `legalFormCode` starting `5`). For reference, a 20-company known-brand SIREN lookup scored **100% directors / 95% financials** — the practical ceiling for exact lookups of large, well-known firms.

When financials are present, revenue **and** net result are both filled (794 of 794 measured rows). French micro/small firms may keep their accounts confidential, which is why small-company coverage is lower.

### Pricing

**Pay per result** — you are billed only for the company records returned. No subscription, no seat fees; a name that matches nothing, or a filtered browse that returns fewer rows, costs less. There's an Apify **free tier** to evaluate the full feature set before you scale, and no proxy or third-party costs to add.

### FAQ

**Do I need an API key or an account with INSEE/INPI?** No — no key, no login. The Actor calls the official open-data API for you.

**Can I use this data commercially / resell it?** Yes — the source is **Licence Ouverte / Etalab 2.0**, which permits commercial reuse and redistribution *with attribution*. Each record carries the attribution string in `source`. (See the prospecting note under Notes & limits.)

**How do I look up one specific company?** Put its 9-digit SIREN or 14-digit SIRET in `sirenNumbers`, or its name in `companyNames`.

**Can I build a list without knowing any names?** Yes — set a **browse filter**: `nafCode` and/or `department` and/or `companyCategory`.

**Does it include contact emails or phone numbers?** No. This is a **firmographic** dataset (identity, directors, financials, address) — the open register doesn't expose company contact emails/phones. Use it to build and qualify target lists, then enrich contacts with your own tools.

**Are beneficial owners (bénéficiaires effectifs) included?** No — public access to the beneficial-owner register was legally restricted in France in 2024, so no open source can provide them.

**How fresh are the financials?** They're read live from the official API on each run. Measured on 2026-07-28 over 794 rows that have accounts: **61%** had 2024 or 2025 as their latest filed year and 79% had 2022 or later — filing lag varies a lot by company, and some publish only sporadically.

**What export formats are available?** JSON, CSV, Excel, or via the Apify API / integrations.

**How many companies can I get in one run?** Up to **10,000 per query** (the source API's hard window). Narrow with NAF/department/size to page through larger sectors.

**Why is a company missing directors or financials?** Because that entity type doesn't file them. **Associations, unions and public bodies** register no officers in the INPI RNE (measured: 0.5% of 441 such rows had any) and file no annual accounts; **sole traders** have no officer list either; and micro/small companies may keep their accounts confidential. Companies & sole traders carry directors ~95% of the time. Missing values are `null`, never fabricated.

**Why does my location browse return lots of associations?** A department browse with no `nafCode` searches the department *name*, so entities whose name contains it — "…des Bouches-du-Rhône" federations, committees, associations — rank high. Add a `nafCode` (or keep only rows whose `legalFormCode` starts with `5`) to get trading companies.

### Troubleshooting

- **0 results** → filters are too narrow or a code is malformed. Check the NAF format (`62.01Z`) and department (`75`), and if you're looking for a closed company, enable **Include ceased companies**.
- **"Provide companyNames, sirenNumbers, or a browse filter"** → the run had no input. Add at least one name, number, or browse filter.
- **A big sector stops at 10,000 rows** → that's the source API's hard window, not a bug. Add a `department` or `companyCategory` filter to split the sector into sub-10k slices.
- **Enabling a proxy causes HTTP 503 / empty runs** → leave **Proxy** off (the default). The open-data API accepts direct connections but rejects the shared datacenter proxy pool.

### Notes, limits & legal (honest)

- **Source & licence.** INSEE Sirene + INPI RNE via `recherche-entreprises.api.gouv.fr`, released under **Licence Ouverte / Etalab 2.0** (commercial reuse & redistribution permitted, attribution required). Records carry the attribution string in `source`.
- **Director personal data.** Director/auditor names are public registry information. Under French/EU rules, reuse for **unsolicited commercial prospecting is restricted** — use this data for KYC, due diligence, research and B2B intelligence, and honour opt-outs. You are the data controller for your use.
- **Beneficial owners not included.** Public access to the bénéficiaires effectifs register was legally restricted in France in 2024.
- **Department = head office (siège).** The department filter returns companies **headquartered** in that department (registered office / siège), not merely those with a branch there — the collector pages the source API and keeps only siège matches. A department browse **without** a `nafCode` matches on the department *name*, so it skews toward entities carrying that name (associations, federations, public bodies) and its reach is bounded by how many records mention it — a Bouches-du-Rhône (13) location-only browse exhausted at 295 companies. Pair the department with a NAF sector for depth and for a trading-company mix.
- **City labels are normalised.** INSEE returns the same commune as `PARIS`, `PARIS 04`, `MARSEILLE 15EME` or `LYON 1ER` depending on the record (33 of 2,115 measured rows carried a suffix). We normalise `city` to the **bare commune name** — the form ~97% of records already use — so grouping by city doesn't split into phantom buckets. Nothing is lost: the arrondissement stays in `postalCode` and in the verbatim `address`. This is the only field we rewrite; everything else is passed through as the register returns it.
- **`legalFormLabel` is a lookup, not a translation.** The API returns only the 4-digit code; we attach the official INSEE *catégories juridiques* (niveau III) label for it — 260 codes, the same nomenclature the government's own annuaire-entreprises front-end uses for this API. All 2,115 measured rows resolved to a label; any code outside the list yields `null` and the raw code is always kept in `legalFormCode`.
- **10,000 records per query** is the source API's hard limit — full-database export via the INSEE Sirene bulk file is planned.
- **Firmographic, not contact.** No company emails or phone numbers are included.
- **Not affiliated** with INSEE, INPI or the French government; this Actor redistributes their public open data.

### Support

Questions, a field you'd like added, or a custom build? Open the **Issues** tab on this Actor, or email **info@foxlabs.com.tr**. We reply fast.

*If this Actor saves you time, a ⭐ review really helps.*

### Changelog

#### 0.2.1 — 2026-07-28 — Coverage percentages recalibrated to measured values

- **Percentages recalibrated to measured values.** The previous figures were too optimistic. Re-measured over 2,095 rows from five live browse slices (Lyon, Marseille, Paris, NAF 62.01Z nationwide, Marseille restaurants) on 2026-07-28: **directors 92% → 74.8%** overall (94.7% for companies & sole traders), **financials 68–74% → 37.9%** overall (57.9% for commercial companies), **freshness 80% → 61.1%** of rows that have accounts. Every figure in the README now carries its sample size and method, and the per-slice variance (directors 17.6%–97.7%) is documented instead of averaged away. No data or code behaviour changed with this entry — only the claims, which now match what the Actor actually returns.
- **New field `legalFormLabel`.** `legalFormCode` was a bare 4-digit code (`5710`) with no label. Records now also carry the official INSEE *catégories juridiques* label (`SAS, société par actions simplifiée`) — 260 codes, the nomenclature the government's own annuaire-entreprises site uses. All 2,115 measured rows resolved; unknown codes stay `null`.
- **Consistent city labels.** INSEE returns the same commune as `PARIS`, `PARIS 04`, `MARSEILLE 15EME` or `LYON 1ER` depending on the record, which quietly split "group by city" into phantom buckets. `city` is now normalised to the bare commune name; the arrondissement remains in `postalCode` and `address`.

#### 2026-07 — Faster bulk paging

- Pages are now fetched in **rate-capped concurrent batches** instead of one at a time — large browse/name runs finish several times faster, while staying safely within the source API's request limits. Same records, same completeness, less waiting.

#### 2026-07 — Siège-based department browse

- The **department** filter now returns companies **headquartered** (siège) in the department, not just those with a branch there — the collector pages the source API and keeps siège matches until the result cap fills. Fixes the old behaviour where e.g. "Corse-du-Sud (2A)" surfaced Paris-headquartered giants that merely had a Corsica branch.

#### 0.2 — 2026-07-05

- Reworked docs: API quick-start, full field table, real sample output, JS/Python/Make/MCP integration snippets, use cases, data-quality summary, FAQ & troubleshooting.

#### 0.1

- Initial release. Three search modes (SIREN, name, browse), directors + annual financials, readable workforce/industry labels, formatted money, active-default. Official Recherche d'entreprises API, no key.
- Direct connection by default: the source API rejects shared datacenter proxies (HTTP 503), so no proxy is used unless you explicitly enable one.

***

Part of the **[foXLabs data platform](https://data.foxlabs.com.tr/)** — public-data company, procurement, financial & AI-search intelligence scrapers. Browse the full suite and free how-to guides at **[data.foxlabs.com.tr](https://data.foxlabs.com.tr/)**.

# Actor input Schema

## `companyNames` (type: `array`):

Search French companies by name (full-text). E.g. "Doctolib", "BlaBlaCar".

## `sirenNumbers` (type: `array`):

Exact lookup by 9-digit SIREN or 14-digit SIRET. The most precise input.

## `nafCode` (type: `string`):

Browse by NAF/APE activity code, e.g. "62.01Z" = Computer programming. Works without a name — combine with Department to browse a sector within a region. Leave empty to browse all activities. Full list: INSEE NAF rév. 2.

## `department` (type: `string`):

French department (registered office / siège). Returns companies HEADQUARTERED in this department — not just those with a branch here. Combine with NAF to browse a local sector.

## `companyCategory` (type: `string`):

INSEE size class filter. PME = small & medium, ETI = mid-market, GE = large enterprise.

## `includeInactive` (type: `boolean`):

By default only active companies are returned. Enable to also include ceased (cessée) entities.

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

Hard cap on records (1–10000). The source API returns at most 10,000 per query — narrow with filters for larger sectors.

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

Leave OFF (default). The official open-data API accepts direct connections but rejects the shared datacenter proxy pool (HTTP 503) — only enable a proxy if you have a specific reason.

## Actor input object example

```json
{
  "companyNames": [
    "Doctolib",
    "BlaBlaCar"
  ],
  "sirenNumbers": [],
  "department": "",
  "companyCategory": "any",
  "includeInactive": false,
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "companyNames": [
        "Doctolib",
        "BlaBlaCar"
    ],
    "sirenNumbers": [],
    "department": "",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/france-company-data").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 = {
    "companyNames": [
        "Doctolib",
        "BlaBlaCar",
    ],
    "sirenNumbers": [],
    "department": "",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/france-company-data").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 '{
  "companyNames": [
    "Doctolib",
    "BlaBlaCar"
  ],
  "sirenNumbers": [],
  "department": "",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call foxlabs/france-company-data --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/dimmGTRunyl54tdIY/builds/Je8uh7uOXadhMF02w/openapi.json
