# French Company Search: SIREN, NAF, Revenue & Employees (`mrslm_data/france-company-registry`) Actor

Search French companies by name, NAF code, location, size or revenue. Get SIREN, head office, employee bands and financial data.

- **URL**: https://apify.com/mrslm_data/france-company-registry.md
- **Developed by:** [MRSLM Data](https://apify.com/mrslm_data) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 companies

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## French Company Search: SIREN, NAF, Revenue & Employees

**Find French companies by name, activity (NAF), department, size or revenue: SIREN, head office, employees, revenue, net income, VAT number and links. $2.00 per 1,000 companies.**

Search France's official company directory by name, NAF code, location, size or revenue and export one row per company. Results include SIREN, head office details, employee bands and, where available, revenue and net income; the price is $2.00 per 1,000 companies.

France's official company directory covers every registered business, with activity codes, headcount bands and, for many companies, revenue and net income from filed accounts. It is the cleanest way to build a French prospect list by sector, region and size.

### Quick start

1. Press **Start**. The form is already filled with this example input, so the first run returns real rows in under a minute:

```json
{
  "searchTerms": [
    "logiciel"
  ],
  "departments": [
    "69"
  ],
  "companyCategories": [
    "PME"
  ],
  "maxResults": 20
}
```

2. Swap in your own values, or call the Actor through the Apify API, Make, Zapier, n8n or the Python/JS clients with the same JSON.
3. Download the results as JSON, CSV or Excel from the **Output** tab, or schedule the run to repeat.

**Full guide: How to Get a List of French Companies by NAF Code, Department and Revenue (SIRENE Data)**

### What the France Company Search does

The Actor searches France's official "Recherche d'entreprises" open-data API (api.gouv.fr, open licence, no key needed). You can search by name or keyword, by NAF code or NAF section, by department, postal code or region, by INSEE size category, by headcount band and by revenue range. Each company comes back as one row with its SIREN, names, status, activity codes, legal form, size, headcount band, founding date, establishment counts, head office address and coordinates, revenue and net income, VAT number, auditors and other officers that are companies, labels and the official directory link.

Sole traders (entrepreneurs individuels), companies that asked INSEE to hide their data and named individual directors are left out, so the output is business data, not personal data.

- Filters combine: sector AND place AND size AND revenue.
- Revenue and net income in euros, with the year of the filed accounts.
- Both the current NAF code and the new NAF 2025 code.

### Who it is for

- **B2B sales and lead generation teams**: build prospect lists of French companies by sector, region and size, with a VAT number for invoicing checks.
- **Market researchers and consultants**: count and size companies in a sector or region.
- **M\&A advisers and investors**: screen French companies by revenue band and profitability.
- **Recruiters**: find the larger employers in a sector and city.

### Real example: software companies in Gironde with €1M+ revenue

Say you sell to software companies and want a list of those active around Bordeaux. In French terms that is NAF code 62.01Z (programmation informatique), department 33 (Gironde), active companies only, with at least €1 million in filed revenue. You want the first 25.

#### Step 1: Enter the input

Open the [France Company Search](https://apify.com/mrslm_data/france-company-registry) in Apify Console, switch the input form to **JSON** and paste this. It is the exact input used for the run in this guide:

```json
{
  "nafCodes": [
    "62.01Z"
  ],
  "departments": [
    "33"
  ],
  "minRevenueEur": 1000000,
  "activeOnly": true,
  "maxResults": 25
}
```

What each setting does:

- `nafCodes`: NAF/APE code 62.01Z, computer programming. Several codes would mean any of them.
- `departments`: department 33, Gironde. This matches companies with any establishment there, not only a head office.
- `minRevenueEur`: keep only companies whose latest filed revenue is at least €1,000,000.
- `activeOnly`: skip closed companies (this is the default).
- `maxResults`: stop after 25 companies.

#### Step 2: Run it

Press **Start**. On 30 October 2026 this input finished with status `SUCCEEDED` in about 4 seconds and saved 25 rows to the run's dataset. The run was charged 25 `company` events plus one start event, so the bill was $0.0501 on the Free/Bronze tier. The run summary shows 25 matched and 25 saved for the search "activite_principale=62.01Z departement=33 ca_min=1000000", with 0 private records skipped.

#### Step 3: Read the output

Here are the first rows of the real dataset, cut to the most useful columns:

| siren | name | companyCategory | employees | revenueEur | financialYear |
|---|---|---|---|---|---|
| 394026934 | EXPERIS FRANCE (EXPERIS) | Large enterprise | 2000-4999 | 231815202 | 2025 |
| 331221150 | LOCAL.FR | Mid-size (ETI) | 250-499 | 51128553 | 2024 |
| 348940255 | CEGEDIM SANTE (SOFILOCA) (ABREVIATION CHS) | Mid-size (ETI) | 500-999 | 64033334 | 2025 |
| 387495799 | VISIATIV SOLUTIONS ENTREPRISE | Large enterprise | 100-199 | 84495737 | 2024 |
| 851035329 | CHAPSVISION | Mid-size (ETI) | 100-199 | 156671000 | 2024 |
| 519319651 | SOPRA HR SOFTWARE | Large enterprise | 500-999 | 212473000 | 2025 |
| 823393764 | CLUB EMPLOYES | SME | 200-249 | 76199037 | 2025 |
| 512803552 | CRISTAL'ID (CRISTAL'ID) | SME | 50-99 | 7838692 | 2024 |
| 439055278 | NIJI (NIJI) | Mid-size (ETI) | 1000-1999 | 83002190 | 2019 |
| 380104877 | BOUYGUES TELECOM BUSINESS SOLUTION | Large enterprise | 200-249 | 32055000 | 2025 |
| 333264810 | OKTEO | SME | 200-249 | 13793568 | 2024 |
| 820334951 | LITTLE WORKER | SME | 100-199 | 21698113 | 2021 |

And one full row as JSON (long text shortened with …):

```json
{
  "siren": "879879260",
  "name": "C-TECHNOLOGY (PEAKSYS)",
  "legalName": "C-TECHNOLOGY",
  "status": "active",
  "nafCode": "62.01Z",
  "naf2025Code": "62.20G",
  "section": "J",
  "legalFormCode": "5710",
  "companyCategory": "Large enterprise",
  "employees": "250-499",
  "employeesYear": "2024",
  "foundedDate": "2019-12-09",
  "establishments": 5,
  "openEstablishments": 4,
  "headOffice": {
    "siret": "87987926000054",
    "address": "120-126 120 QUAI DE BACALAN 33300 BORDEAUX",
    "postalCode": "33300",
    "city": "BORDEAUX",
    "department": "33",
    "region": "75",
    "latitude": 44.861258015,
    "longitude": -0.551440033,
    "nafCode": "62.01Z",
    "employees": "unknown"
  },
  "revenueEur": 96476501,
  "netIncomeEur": -10022,
  "financialYear": "2024",
  "vatNumbers": [
    "FR72879879260"
  ],
  "labels": [],
  "annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/879879260"
}
```

What the 25 real rows show:

- **"In department 33" means any establishment.** Only two of the 25 have their head office in Gironde: Little Worker and C-Technology (Peaksys), both in Bordeaux. The rest, such as Experis France (head office in Nantes, revenue €231.8M) and Sopra HR Software (Annecy, €212.5M), appear because they have an establishment in the department. If you need head offices only, filter `headOffice.department` after the run.
- **Revenue is the latest filed figure, which can be old.** Most rows have 2024 or 2025 accounts, but NIJI's latest filed figure is from 2019, CDC Informatique's and Data Processing System's from 2016 and SFEIR's from 2015. Always keep `financialYear` next to `revenueEur`.
- **Profit is included too.** 12 of the 25 had a net loss in their latest accounts, from ChapsVision (-€38.2M on €156.7M revenue) to F.ASS.T (-€19,329). Sorting by `netIncomeEur` is a quick way to spot healthy targets.
- **Size labels and headcount bands do not always match.** C-Technology (Peaksys) is a "Large enterprise" with 250-499 staff, because INSEE's category also looks at revenue and group structure. Data Processing System has an "unknown" headcount band.
- **The NAF 2025 code can differ.** Experis France is 62.01Z today but 70.20Y in the NAF 2025 column, and several others map to 62.10Y, 62.20G or 62.20H. France is moving its activity codes to NAF 2025, so it is worth keeping both.
- **Labels add context.** Seven companies carry the `qualiopi` training-quality label, and Little Worker has the `rge` label.

### How to find the right NAF code

The NAF code (also called the APE code) is the activity code INSEE gives each company. The four digits and a letter, such as 62.01Z, are the most precise level. Common ones for B2B lists are 62.01Z (computer programming), 62.02A (IT consulting), 70.22Z (business consulting), 41.20A (building houses), 43.21A (electrical installation) and 56.10A (traditional restaurants). If you are not sure, run a keyword search with `searchTerms` first, look at the `nafCode` of the companies you would expect, then switch to `nafCodes`. To cast a wider net, use `sections`: J is information and communication, F is construction.

### Departments, regions and postal codes

`departments` takes the two- or three-character department number (75 Paris, 69 Rhône, 13 Bouches-du-Rhône, 2A Corse-du-Sud). `regions` takes INSEE region codes (11 Île-de-France, 84 Auvergne-Rhône-Alpes, 75 Nouvelle-Aquitaine). `postalCodes` takes five-digit codes. All of them match a company if any of its establishments is in the place, as the run above shows.

### Output fields

Each row in the dataset has these fields. The example column shows a value from the run above.

| Field | What it means | Example from this run |
|---|---|---|
| `siren` | The 9-digit SIREN company number. | 394026934 |
| `name / legalName` | Display name (with acronym or brand in brackets) and the legal name. | EXPERIS FRANCE (EXPERIS) / EXPERIS FRANCE |
| `acronym / tradeNames` | Acronym and trade names, when registered. | ABREVIATION CHS / CLIKEN WEB |
| `status` | active or closed. | active |
| `nafCode / naf2025Code` | Main activity code, and the matching NAF 2025 code. | 62.01Z / 70.20Y |
| `section` | NAF section letter, e.g. J. | J |
| `legalFormCode` | INSEE legal form code, e.g. 5710 for an SAS. | 5710 |
| `companyCategory` | SME, Mid-size (ETI) or Large enterprise. | Large enterprise |
| `employees / employeesYear` | Headcount band and the year it refers to. | 2000-4999 / 2024 |
| `foundedDate / closedDate` | Creation date, and closure date for closed companies. | 1994-02-14 / (empty in this run) |
| `establishments / openEstablishments` | All establishments ever registered, and those still open. | 73 / 22 |
| `headOffice` | Head office SIRET, address, postal code, city, department, region, coordinates, NAF code and headcount. | {"siret": "39402693400536", "address": "15 RUE CHRISTIAN PAU… |
| `revenueEur / netIncomeEur` | Revenue and net income from the latest filed accounts, in euros. | 231815202 / 1257086 |
| `financialYear / financials` | Year of those accounts, and every year available. | 2025 / {"2025": {"ca": 231815202, "resultat_net": 1257086}} |
| `vatNumbers` | The French intra-EU VAT number. | FR14394026934 |
| `corporateOfficers` | Officers that are companies, such as auditors, with their SIREN and role. | {"siren": "572028041", "name": "DELOITTE & ASSOCIES", "role"… |
| `labels / collectiveAgreements` | Labels such as qualiopi or rge, and collective agreement codes. | organisme_formation, qualiopi / 1486, 0054 |
| `updatedAt / annuaireUrl` | Last update in the register, and the official directory page. | 2026-10-30T10:32:53 / https://annuaire-entreprises.data.gouv.fr/entreprise/3940269… |

`headOffice` is a nested object, so CSV and Excel show it as columns such as `headOffice/city` and `headOffice/postalCode`.

### Export French companies to CSV, Excel or Google Sheets

Every run saves its rows to a dataset, and a dataset can be downloaded in any common format. You do not need to write code for this.

**From Apify Console.** Open the run, go to the **Output** tab and click **Export**. Pick CSV, Excel (XLSX), JSON, XML, HTML or RSS. You can tick only the columns you want, for example `siren`, `name`, `companyCategory`, `employees`, `revenueEur`. Nested values such as lists are flattened into columns like `headOffice/city` in CSV and Excel.

**From a URL.** The same export is a plain HTTPS link. Replace `<DATASET_ID>` with the dataset ID shown on the run's Storage tab:

```bash
## CSV with just the columns you need
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&clean=1&fields=siren,name,companyCategory,employees,revenueEur,netIncomeEur,financialYear,headOffice,annuaireUrl" -o france-companies.csv

## Excel
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=xlsx&clean=1" -o france-companies.xlsx
```

**Into Google Sheets.** You have three good options:

1. **One-off:** download the CSV and use **File > Import > Upload** in Google Sheets. Choose "Replace current sheet" to refresh an existing tab.
2. **Automatic, no code:** in Make, Zapier or n8n, use the Apify app's "Watch Actor runs" (or "Run Actor") trigger, then "Get dataset items", then the Google Sheets "Add row" action. Every scheduled run then lands in your sheet. Apify's own [Google Sheets Import & Export](https://apify.com/lukaskrivka/google-sheets) Actor can also append a dataset to a sheet, and you can chain it to this Actor's runs with an integration.
3. **Formula:** `=IMPORTDATA("https://api.apify.com/v2/actor-tasks/<USERNAME>~<TASK_NAME>/runs/last/dataset/items?status=SUCCEEDED&format=csv&token=<YOUR_TOKEN>")` always pulls the latest successful run of a saved task. The token sits in the formula, so anyone who can open the sheet can see it. Only use this in a private sheet.

### Schedule it to run on the 1st of every month at 6:00

The register is updated daily, but revenue and headcount change once a year, so a monthly run is enough to refresh a prospect list and catch companies that have opened, closed or crossed your revenue line. The Actor has no date-window input; to see what changed, compare `siren` and `updatedAt` with last month's file.

1. In the Actor's input form, set up the input from Step 1 and click **Save as new task**. Give it a clear name such as `france-software-gironde-monthly`.
2. Go to **Schedules > Create new**, set the cron expression to `0 6 1 * *` and pick your timezone, so it runs on the 1st of every month at 6:00.
3. Add the task to the schedule and save. Each run gets its own fresh dataset.
4. Optional: on the task's **Integrations** tab, add a webhook, Slack or email notification for "Run succeeded", or connect Make, Zapier or n8n, so the new rows go where you need them.

To fetch the newest results without looking up a run ID, use the task's last-run link: `https://api.apify.com/v2/actor-tasks/<USERNAME>~france-software-gironde-monthly/runs/last/dataset/items?status=SUCCEEDED&format=json`.

### Call it from the API (Python, JavaScript or curl)

You can start the Actor from your own code with the official Apify clients. Put your API token (Console > Settings > API & Integrations) in an environment variable called `APIFY_TOKEN` rather than in the code.

**Python** (`pip install "apify-client>=3"`). Tested with apify-client 3.4:

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
    "nafCodes": [
        "62.01Z"
    ],
    "departments": [
        "33"
    ],
    "minRevenueEur": 1000000,
    "activeOnly": True,
    "maxResults": 25
}

run = client.actor("mrslm_data/france-company-registry").call(run_input=run_input)

## apify-client 3.x returns a Run object, so use run.default_dataset_id
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item["siren"], item["name"])
```

In apify-client 3.x, `call()` returns a typed object. Older examples that use `run["defaultDatasetId"]` were written for 1.x and 2.x and fail in 3.x with `TypeError: 'Run' object is not subscriptable`.

**JavaScript / Node.js** (`npm install apify-client`):

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
    "nafCodes": [
        "62.01Z"
    ],
    "departments": [
        "33"
    ],
    "minRevenueEur": 1000000,
    "activeOnly": true,
    "maxResults": 25
};

const run = await client.actor('mrslm_data/france-company-registry').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);
```

**curl**, one request that runs the Actor and returns the rows as CSV (it waits up to 5 minutes, so keep the input small):

```bash
curl -X POST "https://api.apify.com/v2/acts/mrslm_data~france-company-registry/run-sync-get-dataset-items?format=csv" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"nafCodes": ["62.01Z"], "departments": ["33"], "minRevenueEur": 1000000, "activeOnly": true, "maxResults": 25}' -o france-companies.csv
```

### What it costs

The Actor uses pay-per-event pricing. **Company**: $2.00 per 1,000 on the Free and Bronze tiers, $1.80 on Silver and $1.60 on Gold. Each run also has a start fee of $0.00005 per GB of memory (one event at the default memory). You are not billed separately for compute on normal runs: the event prices are the whole bill.

#### Price per event

Current pay-per-event prices for this Actor on Apify, by Apify subscription plan:

| Event (per 1,000) | Free / Bronze | Silver | Gold / Platinum / Diamond |
|---|---|---|---|
| Company (`company`) | $2.00 | $1.80 | $1.60 |
| Actor start (once per run at the default memory, not per 1,000) | $0.00005 | $0.00005 | $0.00005 |

You are charged only for the events in this table: nothing for compute, and nothing for searches that return no rows beyond the start fee.

| Scenario | Free / Bronze | Silver | Gold |
|---|---|---|---|
| The run in this guide (25 companies) | $0.0501 | $0.045 | $0.0401 |
| A 2,000-company prospect list | $4.00 | $3.60 | $3.20 |
| Monthly refresh of 500 companies (12 runs, 6,000 a year) | $12.00 | $10.80 | $9.60 |

To cap spending, set **Maximum cost per run** in the run options (or `maxTotalChargeUsd` in the API). The Actor stops cleanly at the cap and you are never billed past it.

### Limits

- Only data in France's public open-data register. Companies that asked INSEE to hide their data, sole traders and named individual directors are excluded.
- Revenue and net income are only there for companies whose accounts are filed and public; many small companies have none, and a revenue filter then skips them.
- Location filters match any establishment, not only the head office.
- There is no date-window or "new companies only" input. Use a schedule and compare SIRENs between runs.
- No phone numbers, emails or named contacts.

### FAQ

**How do I search for companies by NAF code and department?**
Enter one or more codes in `nafCodes` and department numbers in `departments`. Use `maxResults` to set how many companies to return.

**Is any personal data included?**
No named individuals. Sole traders, hidden records and individual directors are excluded, and officers are listed only when they are companies, such as auditors.

**How fresh is the data?**
The official directory is updated daily from SIRENE; financials follow annual filings, so `financialYear` can be a few years back for some companies.

**Can I get only companies created recently?**
Not directly; there is no date filter. Run on a schedule and keep the SIRENs you have not seen before, or sort by `foundedDate`.

**Why is a company with a head office in Paris in my Gironde list?**
Location filters match any establishment in the place. Filter on `headOffice.department` if you need head offices only.

**Does it include emails or phone numbers?**
No. The register does not publish them.

**Can I run it on a schedule?**
Yes. Save your input as a task and attach a schedule, as shown above. Each run is independent and returns the French companies available at that moment.

**Does it work with Make, Zapier or n8n?**
Yes. All three have an Apify app. Use "Run Actor" (or run a saved task), then "Get dataset items" to pass the rows to the next step, such as Google Sheets, Airtable, a CRM or Slack.

**Can AI agents use it through MCP?**
Yes. Apify's hosted MCP server can expose this Actor as a tool to any MCP client (Claude Desktop, Cursor, VS Code and others). Add `https://mcp.apify.com/?tools=mrslm_data/france-company-registry` as a remote MCP server and sign in with your Apify account or API token. The agent fills in the same input fields shown above and gets the same rows back, billed at the same per-event prices.

### Is it legal?

This Actor only reads official open-data APIs that the publisher offers to everyone without a login or key. It obeys robots.txt, stays under the published rate limits, and never tries to get past logins, paywalls, captchas or bot checks. Sole traders (entrepreneurs individuels), companies that asked INSEE to hide their data, and named individual directors are excluded. Officers are only listed when they are companies. You are responsible for how you use the data: follow the source's licence and terms and the privacy and marketing laws that apply to you (GDPR, CAN-SPAM, PECR, etc.). This tool is independent and not affiliated with or endorsed by the data publisher.

# Actor input Schema

## `searchTerms` (type: `array`):

Company name, brand or keyword. One per line. Leave empty to search by filters only.

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

NAF/APE codes such as 62.01Z (software publishing). Several = any of them.

## `sections` (type: `array`):

NAF section letters, e.g. J (information and communication), F (construction).

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

Department numbers, e.g. 75, 69, 2A. Matches companies with any establishment there.

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

5-digit postal codes.

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

INSEE region codes, e.g. 11 (Ile-de-France), 84 (Auvergne-Rhone-Alpes).

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

INSEE size category.

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

Headcount bands.

## `minRevenueEur` (type: `integer`):

Only companies with filed revenue at or above this. 0 = no minimum.

## `maxRevenueEur` (type: `integer`):

0 = no maximum.

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

Skip closed companies.

## `maxResultsPerSearch` (type: `integer`):

Cap per search term (or per source). 0 = no cap.

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

Safety cap on saved companies across the whole run. 0 = no cap. Your max cost per run is always respected.

## Actor input object example

```json
{
  "searchTerms": [
    "logiciel"
  ],
  "departments": [
    "69"
  ],
  "companyCategories": [
    "PME"
  ],
  "minRevenueEur": 0,
  "maxRevenueEur": 0,
  "activeOnly": true,
  "maxResultsPerSearch": 0,
  "maxResults": 20
}
```

# Actor output Schema

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

All companies as a dataset (JSON, CSV, Excel and more via the API or Console).

## `summary` (type: `string`):

Matches and saved rows per search, failures and the stop reason.

# 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 = {
    "searchTerms": [
        "logiciel"
    ],
    "departments": [
        "69"
    ],
    "companyCategories": [
        "PME"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrslm_data/france-company-registry").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 = {
    "searchTerms": ["logiciel"],
    "departments": ["69"],
    "companyCategories": ["PME"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("mrslm_data/france-company-registry").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 '{
  "searchTerms": [
    "logiciel"
  ],
  "departments": [
    "69"
  ],
  "companyCategories": [
    "PME"
  ],
  "maxResults": 20
}' |
apify call mrslm_data/france-company-registry --silent --output-dataset

```

## MCP server setup

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

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/6EIrBbpwpKevULUmA/builds/13LQEh6KqLWSrxvuf/openapi.json
