# France Companies Scraper - SIRENE, SIRET, NAF & Directors (`scrapewise/france-companies-scraper`) Actor

French companies from the official SIRENE registry, no API key: search by name, NAF, department, postal code, size, revenue, director or map. Pappers search links read filter by filter, free count, BODACC insolvency and VAT checks. SIREN, SIRET, address, revenue, directors. US$ 2 per 1,000.

- **URL**: https://apify.com/scrapewise/france-companies-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 company delivereds

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

## France Companies Scraper: SIRENE registry, SIREN/SIRET, NAF codes and directors

Scrape **French companies from the official SIRENE / RNE registry** (the data behind annuaire-entreprises.data.gouv.fr)
**without an API key or an account**. Search by name or activity ("boulangerie", "cabinet comptable",
"plombier"), by **NAF / APE code**, **department, postal code, commune or region**, **company size, headcount,
legal form, revenue** and official labels (RGE, Qualiopi, ESS, organic, associations...), or paste a list of
**SIREN / SIRET numbers**. Get one clean row per company with **SIREN, head-office SIRET, legal and trade names,
NAF code and sector, legal form, headcount range, creation date, status, full head-office address and GPS,
VAT number, last revenue and net income, number of establishments and the list of directors** (name and role).

Switch to **one row per establishment (SIRET)** to list every shop, branch or site in a department or postal code.
Searches above the registry's 10,000-result limit are **split by department automatically**, so a whole sector of
France is one run.

Built for B2B prospecting and lead lists, sales territory planning, market sizing by sector and region, KYB and
supplier checks, CRM enrichment from a SIREN list, and new-business monitoring (companies created after a date).

**US$ 2.00 per 1,000 companies. No start fee, no monthly fee. Error rows, duplicates and rows outside your
filters are free.**

### At a glance

- **Price per 1,000 companies, Free plan:** US$ 2.00
- **API key or account needed:** No
- **NAF, department, postal code, size, legal form, revenue filters:** Yes, all registry filters
- **More than 10,000 results per search:** Yes (auto split by department)
- **One row per establishment (SIRET) mode:** Yes
- **Resumes after a platform restart without charging twice:** Yes

### What it fixes

- **A pasted search link never exports more than it shows.** A pappers.fr search link is read filter by filter (status, departments, NAF, legal form, headcount, revenue, creation dates, director; departments and postal codes count for the head office, as on Pappers). If the link has a filter this Actor cannot apply, the link is not run and you get a free `UNSUPPORTED_FILTER` row, instead of a wider search that burns your budget.
- **Free count before you pay.** `mode: "count"` (or `countOnly`) tells you how many companies a search matches, for free, so you can size a list before buying it.
- **Map search.** `lat`, `lon` and `radiusKm` (up to 50 km) list the companies around a point.
- **Insolvency and VAT checks, free sources.** `checkBodacc` adds the BODACC official gazette signal (number of notices, last notice, insolvency proceedings); `validateVat` checks the VAT number on the EU VIES service. Same price.
- **No API key, no account.** It reads the French government's open registry API; Pappers or Societe.com links are only read for their filters or SIREN.

### Switching from another French companies actor? Your existing input works

Paste the input you already use. These names and values are read as they are:

| You may already send | Read as |
|---|---|
| `query`, `queries`, `keywords` | `searchTerms` |
| `sirens`, `siren`, `siret` (and `mode: "siren"`) | `sirenNumbers` |
| `searchUrls` (pappers.fr search or company links), Societe.com company links | `startUrls` |
| `departement`, `code_postal`, `code_commune`, `region`, `activite_principale`, `section_activite_principale`, `categorie_entreprise`, `tranche_effectif_salarie`, `nature_juridique`, `ca_min`, `ca_max`, `est_rge`, `est_bio`, `est_qualiopi`, `est_ess`, `est_association`... | the same registry filters |
| `nom_personne`, `prenoms_personne`, `type_personne` | companies of a director by name |
| `naf`, `section`, `codePostal`, `departement`, `region`, `natureJuridique`, `categorieEntreprise`, `estAssociation` (`any` = no filter), `extraParams` | the matching filters |
| `etat_administratif` (`A`/`C`), `etatAdministratif` (`any`/`A`/`C`), `activeOnly` | `status` |
| `categorieEntreprise: "TPE"` | headcount under 10 |
| `mode`: `search`, `geo` (`lat`, `lon`, `radiusKm`), `siren`, `count` | search, map search, SIREN list, free count |
| `maxResultsPerQuery` (0 = no limit) | `maxResultsPerSearch` |
| `maxResults` | cap for the whole run (per search when you also send `searchUrls`, `precision` or `bases`); 0 = no limit |
| `includeOfficers: false`, `requireFinancials`, `checkBodacc`, `validateVat` | no directors in the rows, only companies with published accounts, BODACC and VAT checks |

When this form's status is left at its default (active), the status sent under another name wins.

### What you can do with it

- **Build a lead list for a sector and region.** `nafCodes: ["62.01Z"]`, `departments: ["75", "92"]`,
  `companyCategories: ["PME"]` gives software companies with establishments in Paris and Hauts-de-Seine.
- **Size a market.** `nafCodes: ["56.10A"]`, `maxResultsPerSearch: 200000` reads every active restaurant in France,
  department by department, one row per company.
- **List every location.** `resultType: "establishments"` with `postalCodes: ["75011"]` returns each shop or branch
  (SIRET) located in that postal code, with its own address, trade name and headcount.
- **Enrich a SIREN list.** Paste SIREN or SIRET numbers in `sirenNumbers` and get the full registry row for each.
- **Find new businesses.** `createdAfter: "2026-01-01"` keeps only companies created this year.
- **Target certified companies.** `rgeOnly`, `qualiopiOnly`, `essOnly`, `bioOnly`, `associationsOnly`,
  `missionCompaniesOnly` and more use the registry's own labels.
- **Feed a CRM or a spreadsheet.** Export CSV, Excel or JSON, or call it through the Apify API and schedule it.

### Input

| Field | What it does |
|---|---|
| `searchTerms` | Names, activities or words (boulangerie, plombier, Danone). Leave empty to search by filters only. |
| `sirenNumbers` | 9-digit SIREN or 14-digit SIRET numbers. |
| `startUrls` | annuaire-entreprises.data.gouv.fr links: `/entreprise/...-<siren>`, `/etablissement/<siret>`, `/rechercher?terme=...`. |
| `resultType` | `companies` (one row per SIREN, default) or `establishments` (one row per matching SIRET). |
| `maxResultsPerSearch` | Companies per term, link or filter search. Default 100, no upper limit. |
| `maxItems` | Hard cap on charged rows for the whole run. |
| `nafCodes` | NAF / APE codes (56.10A, 62.01Z, 10.71C). |
| `activitySections` | NAF section letters A to U. |
| `departments`, `postalCodes`, `communeCodes`, `regions` | Location of the establishments (INSEE codes). |
| `companyCategories` | PME, ETI, GE. |
| `employeeRanges` | INSEE headcount ranges (11 = 10-19, 12 = 20-49, 21 = 50-99...). |
| `legalForms` | INSEE legal category codes (5710 SAS, 5499 SARL, 6540 SCI, 9220 association; 2 digits also work). |
| `status` | `active` (default), `closed` or `any`. |
| `minRevenue`, `maxRevenue` | Last published revenue in euros. |
| `rgeOnly`, `qualiopiOnly`, `essOnly`, `bioOnly`, `associationsOnly`... | Registry labels. |
| `sortBySize` | Largest companies first. |
| `excludeSoleProprietors` | Skip entreprises individuelles (default on). |
| `soleProprietorsOnly` | Only entreprises individuelles (freelancers, craftsmen). |
| `employersOnly`, `createdAfter`, `createdBefore`, `excludeKeywords` | Local filters, free. |
| `mode` | `search` (default), `count` (free count, no rows), `geo` (map search with `lat`, `lon`, `radiusKm`) or `siren`. |
| `lat`, `lon`, `radiusKm` | Map search: companies with an establishment within the radius (up to 50 km). |
| `checkBodacc` | Add BODACC gazette data: `bodaccEventCount`, `lastBodaccEventDate`, `lastBodaccEventType`, `hasInsolvencyProceeding`, `lastInsolvencyEventDate`, `lastInsolvencyEvent`, `bodaccUrl`. Same price. |
| `validateVat` | Check `vatNumber` on the EU VIES service: `vatValid`, `vatCheckStatus`, `vatCheckedAt`. Same price. |
| `includeOfficers` | `false` leaves `directors` empty. |
| `requireFinancials` | Only companies with published revenue. |

Example: bakeries with 10 to 49 employees in the Rhône department.

```json
{
  "nafCodes": ["10.71C"],
  "departments": ["69"],
  "employeeRanges": ["11", "12"],
  "maxResultsPerSearch": 500
}
```

An empty input runs a small example (20 companies for "boulangerie"), so the Actor never fails on a blank form.

### Output

One real row from a local test run on 2026-09-29 (filters above; director names replaced by "..."):

```json
{
  "type": "company",
  "siren": "899507552",
  "siret": "89950755200235",
  "name": "AB COPAINS",
  "legalName": "AB COPAINS",
  "acronym": null,
  "tradeNames": [],
  "status": "Active",
  "nafCode": "10.71C",
  "nafCode2025": "10.71H",
  "activitySection": "C",
  "activitySectionLabel": "Manufacturing",
  "legalFormCode": "5710",
  "legalForm": "SAS",
  "isSoleProprietor": false,
  "companyCategory": "PME",
  "employeeRangeCode": "12",
  "employeeRange": "20-49",
  "employeeRangeYear": 2023,
  "creationDate": "2021-05-17",
  "closingDate": null,
  "establishmentsCount": 46,
  "openEstablishmentsCount": 44,
  "address": "229 RUE DE SOLFERINO 59000 LILLE",
  "postalCode": "59000",
  "city": "LILLE",
  "communeCode": "59350",
  "department": "59",
  "region": "32",
  "country": "France",
  "latitude": 50.6272071488439,
  "longitude": 3.06306601045026,
  "vatNumber": "FR31899507552",
  "revenue": 13405375.0,
  "netIncome": 157961.0,
  "financialYear": 2025,
  "directors": [
    {"type": "person", "lastName": "...", "firstNames": "...", "role": "Président de SAS"},
    {"type": "person", "lastName": "...", "firstNames": "...", "role": "Directeur Général"},
    {"type": "company", "name": "EON ADVISORY", "siren": "980535934", "role": "Commissaire aux comptes titulaire"}
  ],
  "collectiveAgreements": ["0843", "1501"],
  "isAssociation": false,
  "associationId": null,
  "isEss": true,
  "isRge": false,
  "isBio": true,
  "isQualiopi": false,
  "isTrainingOrganization": false,
  "isMissionCompany": false,
  "isHealthSocial": false,
  "isLivingHeritage": false,
  "isPublicAdministration": false,
  "lastUpdated": "2026-09-29T11:16:50",
  "annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/899507552",
  "searchTerm": null,
  "position": 1,
  "source": "filters",
  "scrapedAt": "2026-09-30T02:57:35Z",
  "errorCode": null,
  "error": null
}
```

- Location filters (`departments`, `postalCodes`, `communeCodes`, `regions`) match **establishments**, as in the
  registry itself: a company with a shop in Lyon matches department 69 even if its head office (the address in a
  company row) is in Lille. Use `resultType: "establishments"` to get the address of each matching location.
- `revenue` and `netIncome` exist only for companies that publish their accounts.
- In establishments mode each row also carries `isHeadOffice`, `isEmployer` and the company's legal form, size and
  VAT number.

The run also saves `SEARCH_SUMMARY` in its key-value store: for each search, the query sent to the registry, how many
companies match, how many pages and department slices were read and how many rows were delivered (free).

#### Error rows (never charged)

| errorCode | When |
|---|---|
| `NO_RESULTS` | No company matches the search and filters. |
| `NOT_FOUND` | The SIREN/SIRET or link points to a company that is not in the public registry. |
| `INVALID_URL` | The link is not an annuaire-entreprises.data.gouv.fr, pappers.fr or societe.com company or search link. |
| `UNSUPPORTED_FILTER` | A pasted search link has a filter this Actor cannot apply; the link is not run. |
| `BLOCKED` | The registry API refused every attempt for that search. |
| `INVALID_INPUT` | A field has a value the Actor cannot use (the message says which). |
| `UNEXPECTED` | Anything else; the rest of the run continues. |

A `count` row (`type: "count"`, `matchesInRegistry`) is free. `bodaccStatus` and `vatCheckStatus` say `UNAVAILABLE` when the gazette or VIES did not answer; the company row is delivered anyway.

### Pricing

Pay per event, no start fee:

| Event | Price per 1,000 (Free plan) | Charged for |
|---|---|---|
| Company delivered | **US$ 2.00** | each unique company (or establishment, in establishments mode) |

Examples: 1,000 companies cost US$ 2.00. A list of 300 accounting firms costs US$ 0.60. Error rows, duplicates and
filtered-out rows are free, and `maxItems` is a hard stop.

### How it works and limits

- It reads the official public API of the French government's company directory (recherche-entreprises.api.gouv.fr,
  fed by INSEE SIRENE and the INPI RNE). No key, no login.
- The registry returns at most **10,000 companies per query**. When a search matches more and you ask for more, the
  Actor reads it again **department by department** (101 slices) and removes duplicates, so national lists work.
- Speed in our tests: 300 companies in 16 s, 3,000 companies in 53 s. Local filters (`createdAfter`, `employersOnly`,
  `excludeKeywords`) are applied after reading, so a very narrow local filter reads more pages.
- **Personal data is kept to what a business list needs.** Directors come with name, first names and role only: the
  Actor never returns their birth date, birth year or nationality. **Entreprises individuelles** (sole proprietors,
  legal form 1000) are skipped by default; when you include them, their street address and GPS coordinates are
  removed (only city, postal code, department and region remain) because that address is usually a home. The registry
  has no phone numbers or emails and the Actor does not add any from other sources. Companies that asked INSEE not to
  be listed are hidden by the registry itself.

### FAQ

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

**Is this the same data as Pappers or Societe.com?** It is the same official source (SIRENE and RNE) that those sites
use, read directly from the government API, at a fraction of the price. It does not include filed financial
statements or legal notices beyond the last revenue and net income.

**How fresh is it?** The registry API is updated daily; each row has `lastUpdated`.

**Can I get every company in a NAF code for all of France?** Yes: set the NAF code, leave the location empty and raise
`maxResultsPerSearch`; searches above 10,000 are split by department.

**What if the run is restarted by the platform?** Rows already in the dataset are not charged again: the Actor reads its
own dataset when it starts and skips what was delivered.

### Changelog

- **0.1 (2026-10-08):** input of other French companies actors works as is; pappers.fr search links read filter by
  filter (unknown filters refused, never ignored); pappers.fr and societe.com company links; free count mode; map
  search; director name search; BODACC and VAT checks; `includeOfficers` and `requireFinancials`.
- **0.1 (2026-09-29):** first version: search terms, SIREN/SIRET lists and annuaire links, all registry filters,
  companies or establishments mode, split by department above 10,000, resume after restart.

Independent tool, not affiliated with INSEE, INPI, DINUM or the French government.

# Actor input Schema

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

Leave empty for a normal search. 'count' returns one free row per search with the number of matching companies. 'geo' lists the companies around lat/lon within radiusKm.

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

Company names, activities or words to search for, one per line (for example: boulangerie, plombier, cabinet comptable, Danone). The registry searches company names, trade names, addresses and directors. Leave empty to search by filters only.

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

9-digit SIREN or 14-digit SIRET numbers, one per line (for example 552032534). Each returns that company (or that establishment in establishments mode).

## `startUrls` (type: `array`):

Links from annuaire-entreprises.data.gouv.fr (/entreprise/danone-552032534, /etablissement/55203253400646, /rechercher?terme=boulangerie\&cp_dep=75), pappers.fr (a company page, or a search page whose filters are read one by one: status, departments, NAF, legal form, headcount, revenue, creation dates, director) or societe.com company pages. A search link with a filter this Actor cannot apply is refused with a free UNSUPPORTED_FILTER row, never run wider than you asked.

## `lat` (type: `number`):

Map search: latitude of the center, for example 48.8566 (Paris).

## `lon` (type: `number`):

Map search: longitude of the center, for example 2.3522 (Paris).

## `radiusKm` (type: `number`):

Map search: radius around the point, up to 50 km. Empty = 5 km.

## `resultType` (type: `string`):

Companies: one row per legal unit (SIREN) with its head office. Establishments: one row per matching establishment (SIRET), useful to get every shop or branch in a department or postal code.

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

How many companies to take from each search term, link or filter-only search. Empty = 100. The registry returns up to 10,000 per query; above that the Actor splits the search by department automatically.

## `maxItems` (type: `integer`):

Hard cap on charged rows for the whole run, across all searches. Empty or 0 = no cap besides the per-search limit.

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

INSEE activity codes, one per line (for example 56.10A restaurants, 62.01Z software development, 10.71C bakeries). Dots are optional.

## `activitySections` (type: `array`):

NAF section letters A to U (for example F construction, I accommodation and food, J information and communication).

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

French department codes, one per line (75 Paris, 69 Rhône, 13 Bouches-du-Rhône, 2A, 971...). Filters on establishments located there.

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

5-digit postal codes, one per line (for example 75011, 69003).

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

5-character INSEE commune codes (not postal codes), one per line (for example 75056 Paris, 69123 Lyon).

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

2-digit INSEE region codes (11 Île-de-France, 84 Auvergne-Rhône-Alpes, 93 Provence-Alpes-Côte d'Azur...).

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

INSEE company category. Empty = any.

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

Headcount range of the company (INSEE). Empty = any.

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

INSEE legal category codes, one per line (5710 SAS, 5720 SASU, 5499 SARL, 5498 EURL, 5599 SA, 6540 SCI, 9220 association). 2-digit codes also work (57 = all SAS).

## `status` (type: `string`):

Administrative status of the company in the registry.

## `minRevenue` (type: `integer`):

Only companies whose last published revenue is at least this (only companies that publish accounts have it).

## `maxRevenue` (type: `integer`):

Only companies whose last published revenue is at most this.

## `associationsOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `essOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `rgeOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `bioOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `qualiopiOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `trainingOrganizationsOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `missionCompaniesOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `healthSocialOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `livingHeritageOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `insertionOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `publicAdministrationsOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `localAuthoritiesOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `showLicenseOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `responsiblePurchasingOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `foodInspectionOnly` (type: `boolean`):

Registry filter: keep only these organizations.

## `sortBySize` (type: `boolean`):

Sort by company size (number of establishments) instead of relevance.

## `excludeSoleProprietors` (type: `boolean`):

Skip entreprises individuelles (legal form 1000): their name is a person's name and their address is often a home. On by default for clean B2B lists. Skipped rows are not charged.

## `soleProprietorsOnly` (type: `boolean`):

Only entreprises individuelles (for example freelancers or craftsmen). Their street address and coordinates are never returned, only city, postal code and department.

## `employersOnly` (type: `boolean`):

Skip companies with no employees (headcount range NN or 0), or establishments not marked as employer.

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

Only companies created on or after this date (2024-01-01, 2024-06 or 2024). Useful for new-business leads.

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

Only companies created on or before this date.

## `excludeKeywords` (type: `array`):

Words, one per line. Companies whose name or trade name contains any of them are skipped and not charged.

## `splitByDepartment` (type: `boolean`):

When a search matches more than 10,000 companies, read it department by department to go past the registry's 10,000 limit. On by default.

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

Apify proxy is the default. Change it only to use your own proxies.

## `includeOfficers` (type: `boolean`):

Directors (name, first names, role; never birth date or nationality). Turn off for lighter rows.

## `requireFinancials` (type: `boolean`):

Keep only companies with a published revenue figure (revenue, net income, year). Skipped rows are free.

## `checkBodacc` (type: `boolean`):

For each company, add the BODACC official gazette signal: number of notices, last notice date and type, whether there is an insolvency proceeding (procédure collective) and its last judgment. Free open data, same price; slower runs (two extra lookups per company).

## `validateVat` (type: `boolean`):

For each company, check its intra-community VAT number on the European Commission's VIES service: vatValid true or false. Same price; slower runs.

## Actor input object example

```json
{
  "searchTerms": [
    "boulangerie"
  ],
  "resultType": "companies",
  "status": "active",
  "excludeSoleProprietors": true,
  "splitByDepartment": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "includeOfficers": true
}
```

# Actor output Schema

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

No description

## `resultsCsv` (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 = {
    "searchTerms": [
        "boulangerie"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/france-companies-scraper").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": ["boulangerie"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/france-companies-scraper").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": [
    "boulangerie"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/france-companies-scraper --silent --output-dataset

```

## MCP server setup

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

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/3Thtk24fEuO1PsEer/builds/gvu1zFueXsPmsRgME/openapi.json
