# Infogreffe Scraper — French Company Registry (`solidcode/infogreffe-scraper`) Actor

\[💰 $5.0 / 1K] Extract official French company records from Infogreffe (RCS). Returns SIREN, SIRET, RCS, address, legal form, share capital, NAF/APE code, founding date, directors, establishments, and filed-report metadata. Search by name, URL, or bulk-enrich a list of SIRENs.

- **URL**: https://apify.com/solidcode/infogreffe-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

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

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

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

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

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

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

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

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Infogreffe Scraper

Pull official French company records straight from Infogreffe — the Registre du Commerce et des Sociétés. Every row carries the legally-binding identity card (name, SIREN, SIRET headquarters, RCS, registered address, legal form, share capital, NAF/APE code, founding date) plus optional nested arrays for directors, establishments, and filed-report metadata. Built for French B2B sales teams, KYC/AML compliance officers, M&A due-diligence analysts, and CRM data-ops who need clean registry truth without wrestling Infogreffe's search UI one company at a time.

### Why This Scraper?

- **Three search modes — free-text, Infogreffe URLs, and bulk SIREN/SIRET enrichment.** Search by company name, brand, or director; paste Infogreffe URLs; or feed a CSV column of SIRENs/SIRETs straight from your CRM. 14-digit SIRETs are auto-normalized to their 9-digit SIREN, spaces and dots tolerated.
- **Coverage of every French company in the Registre du Commerce et des Sociétés — all 101 metropolitan and overseas departments,** including Guadeloupe (971), Martinique (972), Guyane (973), La Réunion (974), and Mayotte (976).
- **11-form legal-form multi-select filter** — SAS, SARL, SA, SASU, EURL, SCI, EI, SNC, SCS, SCA, and Association loi 1901. Combine multiple forms in one run.
- **Six precision filters, all combinable** — department, 5-digit postal code, NAF/APE activity code, legal form, status (active / struck-off / both), and a founding-date range with ISO-8601 dates.
- **Up to 28 enrichment fields per company** — identity card, RCS string with greffe name, share capital with ISO-4217 currency, employee headcount bracket, automatically-derived French region (Île-de-France, Auvergne-Rhône-Alpes, etc.), and a `scrapedAt` UTC timestamp on every row.
- **Director list with role, birth year, and nationality** — captures gérants, présidents, directeurs généraux, administrateurs, and personne-morale officers in one nested array.
- **Up to 50 establishments per company by default (configurable to 10,000),** with each sub-SIRET tagged `siege` vs `secondaire`, an `active` flag, and a `establishmentsTruncated` boolean so power users can spot when LVMH-scale groups overflow.
- **Insolvency / procédures collectives flag** — every row carries `inProcedure`, the procedure `type`, and the `openedDate` so you can screen counterparties for sauvegarde, redressement, or liquidation in one shot.
- **One row per company, never row fan-out** — directors, establishments, and financial reports are nested arrays on the parent row. Drops cleanly into a CSV or spreadsheet column.

### Use Cases

**B2B Sales & Lead Generation**
- Build SIRET-level prospect lists for a target French department or postal code
- Vertical targeting by NAF/APE activity code (47.11D for grocery retail, 62.01Z for software publishing, 69.10Z for legal activities)
- Surface newly-formed companies with the `foundedAfter` filter for fresh-incorporation outreach

**KYC / AML Compliance**
- Verify French counterparties against the legally-binding registry record
- Match a director name to a SIREN before onboarding a customer
- Detect struck-off (radiée) companies and flag them in your KYC pipeline

**M&A & Due Diligence**
- Track the metadata trail of filed financial reports across 10+ years
- Capture share-capital changes, legal-form conversions, and establishment counts
- Screen acquisition targets for active procédures collectives before signing

**Market & Sector Research**
- NAF-code rollups by department to size French sub-sectors
- Legal-form distribution (SAS vs SARL vs SCI) across regions
- Map establishment density of national groups (Carrefour, BNP Paribas, SNCF)

**CRM Enrichment**
- Bulk-enrich a SIREN column from your CRM with full identity-card data
- Append directors and registered address to existing prospect records
- Replace stale company-name strings with the legally-current denomination

### Getting Started

#### Free-text search

The simplest way to start — one company name:

```json
{
    "searchQuery": "Carrefour",
    "maxResults": 25
}
````

#### Bulk SIREN enrichment

Paste a list of identifiers from your CRM. 14-digit SIRETs are accepted — the leading 9-digit SIREN is extracted automatically:

```json
{
    "searchMode": "sirenList",
    "sirens": [
        "652014051",
        "552 100 554",
        "39847272500024"
    ],
    "outputDetail": "full"
}
```

#### Filtered sector search

Find active SAS/SARL software publishers in Paris (department 75) founded since 2024:

```json
{
    "searchMode": "search",
    "searchQuery": "logiciel",
    "department": "75",
    "nafCode": "62.01Z",
    "legalForm": ["SAS", "SARL"],
    "status": "active",
    "foundedAfter": "2024-01-01",
    "outputDetail": "full",
    "maxResults": 200
}
```

#### Infogreffe URL list

Paste any Infogreffe company URL — the SIREN is auto-extracted from the URL:

```json
{
    "searchMode": "urls",
    "startUrls": [
        "https://www.infogreffe.fr/entreprise/carrefour-sa-652014051"
    ],
    "outputDetail": "full"
}
```

### Input Reference

#### Search & inputs

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchMode` | select | `Free-text search (company name, brand, director)` | Pick one of three modes: free-text, Infogreffe URLs, or SIREN/SIRET list. |
| `searchQuery` | string | `Carrefour` | Company name, brand, director name, or address fragment. Used when Search Mode is free-text. |
| `startUrls` | URL\[] | `[]` | Paste Infogreffe URLs — search-result pages or company detail pages. Used when Search Mode is `Infogreffe URLs`. |
| `sirens` | string\[] | `[]` | 9-digit SIRENs or 14-digit SIRETs, one per line. Spaces and dots are tolerated. Used when Search Mode is `SIREN/SIRET list`. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `department` | select | (none) | French department code, e.g. `75 - Paris`, `92 - Hauts-de-Seine`. 101 departments covered including DOM-TOM (Guadeloupe, Martinique, Guyane, La Réunion, Mayotte). |
| `postalCode` | string | (none) | 5-digit postal code, more precise than department. Examples: `75001`, `69002`, `13001`. |
| `nafCode` | string | (none) | INSEE activity code in NAF rev. 2 format (e.g. `62.01Z`, `47.11D`, `69.10Z`). |
| `legalForm` | multi-select | `[]` | One or more of 11 forms: SAS, SARL, SA, SASU, EURL, SCI, EI, SNC, SCS, SCA, Association loi 1901. |
| `status` | select | `Active only (en activité)` | Active only, struck-off only (radiée), or both. |
| `foundedAfter` | date | (none) | Only companies registered on or after this date (YYYY-MM-DD). |
| `foundedBefore` | date | (none) | Only companies registered on or before this date (YYYY-MM-DD). |

#### Output options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `outputDetail` | select | `Full — identity + directors + establishments + reports` | Basic returns the identity card only; Full adds nested directors / establishments / financial-reports arrays on the same row. |
| `maxEstablishmentsPerCompany` | integer | `50` | Cap on the establishments array per row. Set to `0` for unlimited (an internal cap of 10,000 still applies). Truncated rows include `establishmentsTruncated: true`. |
| `maxResults` | integer | `200` | Cap on total company rows. Set to `0` for no cap (internal upper limit of 100,000 applies). |

### Output

One row per company. Nested arrays for directors, establishments, and financial reports — no row fan-out. Example with `outputDetail: "full"`:

```json
{
    "name": "CARREFOUR",
    "tradeName": "CARREFOUR",
    "siren": "652014051",
    "siret": "65201405100013",
    "rcs": "652 014 051 RCS Nanterre",
    "legalForm": "SA",
    "legalFormCode": "5599",
    "address": "93 avenue de Paris, 91300 Massy",
    "addressStreet": "93 avenue de Paris",
    "addressPostalCode": "91300",
    "addressCity": "Massy",
    "addressDepartment": "91",
    "addressRegion": "Île-de-France",
    "nafCode": "70.10Z",
    "nafLabel": "Activités des sièges sociaux",
    "shareCapital": 2069480930,
    "shareCapitalCurrency": "EUR",
    "foundedDate": "1959-08-11",
    "closedDate": null,
    "status": "active",
    "employeeBracket": "Plus de 10 000 salariés",
    "insolvency": { "inProcedure": false, "type": null, "openedDate": null },
    "directors": [
        { "name": "Alexandre BOMPARD", "role": "Président-Directeur Général", "birthYear": 1972, "nationality": "Française", "addressCity": "Paris" }
    ],
    "establishments": [
        { "siret": "65201405100013", "address": "93 avenue de Paris, 91300 Massy", "active": true, "kind": "siege" }
    ],
    "establishmentsTruncated": false,
    "financialReports": [
        { "exerciseEndDate": "2023-12-31", "type": "comptes annuels", "filedDate": "2024-04-30", "documentUrl": null }
    ],
    "infogreffeUrl": "https://www.infogreffe.fr/entreprise/carrefour/652014051/...",
    "scrapedAt": "2026-05-08T14:30:00Z"
}
```

#### Identity

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Legal denomination (raison sociale) |
| `tradeName` | string | Trade name / sigle / enseigne when different from `name` |
| `siren` | string | 9-digit company identifier |
| `siret` | string | 14-digit headquarters identifier (SIREN + NIC) |
| `rcs` | string | Formatted RCS string with greffe name (e.g. `652 014 051 RCS Nanterre`) |
| `legalForm` | string | Short form code: SAS, SARL, SA, SASU, EURL, SCI, EI, SNC, SCS, SCA, association |
| `legalFormCode` | string | INSEE legal-form numeric code |
| `infogreffeUrl` | string | Canonical Infogreffe company URL |
| `scrapedAt` | string | ISO-8601 UTC timestamp of extraction |

#### Address

| Field | Type | Description |
|-------|------|-------------|
| `address` | string | Full registered address, single line |
| `addressStreet` | string | Street line of the registered address |
| `addressPostalCode` | string | 5-digit French postal code |
| `addressCity` | string | City (bureau distributeur) |
| `addressDepartment` | string | 2- or 3-character department code derived from postal |
| `addressRegion` | string | French region derived from department (Île-de-France, Auvergne-Rhône-Alpes, etc.) |

#### Capital, activity, status

| Field | Type | Description |
|-------|------|-------------|
| `nafCode` | string | NAF/APE activity code (5 digits + 1 letter) |
| `nafLabel` | string | Human-readable activity label |
| `shareCapital` | number | Share capital amount |
| `shareCapitalCurrency` | string | ISO-4217 currency code (typically EUR) |
| `foundedDate` | string | Date d'immatriculation (YYYY-MM-DD) |
| `closedDate` | string | Date de radiation when struck off, otherwise null |
| `status` | string | `active` or `radiée` |
| `employeeBracket` | string | INSEE workforce headcount bracket label |
| `insolvency` | object | `{ inProcedure, type, openedDate }` for procédures collectives |

#### Directors (nested array, full mode)

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Officer's full name (or denomination for personne-morale officers) |
| `role` | string | Qualité — Président, Directeur Général, Gérant, Administrateur, etc. |
| `birthYear` | number | Year of birth (personne physique only) |
| `nationality` | string | Nationality label (personne physique only) |
| `addressCity` | string | City of registered domicile |

#### Establishments (nested array, full mode)

| Field | Type | Description |
|-------|------|-------------|
| `siret` | string | 14-digit establishment identifier |
| `address` | string | Registered address of the establishment |
| `active` | boolean | `true` for ouvert, `false` for fermé |
| `kind` | string | `siege` for the headquarters, `secondaire` for secondary establishments |

The parent row also carries `establishmentsTruncated: true` when the registry has more establishments than `maxEstablishmentsPerCompany` allowed in.

#### Financial reports (nested array, full mode)

| Field | Type | Description |
|-------|------|-------------|
| `exerciseEndDate` | string | Date de clôture of the filed exercice |
| `type` | string | `comptes annuels` or `comptes consolidés` |
| `filedDate` | string | Date the report was filed at the greffe |
| `documentUrl` | string | Reserved — actual report PDFs are paywalled by Infogreffe |

### Tips for Best Results

- **Pair `sirenList` mode with your CRM export's SIREN column** — paste 1,000s of identifiers in one run and get back fully enriched rows overnight. Spaces, dots, and 14-digit SIRETs are all tolerated.
- **Use NAF/APE codes for sharp vertical targeting** — `47.11D` finds hypermarkets specifically, `62.01Z` isolates software publishers, `69.10Z` returns law firms. The full INSEE NAF rev. 2 codebook works.
- **Combine `foundedAfter` with the `legalForm` filter** to surface newly-incorporated SAS/SARL targets — `foundedAfter: "2024-01-01"` returns companies registered in the current calendar year.
- **Switch to `outputDetail: "basic"` for raw lead lists** — skips the directors/establishments/reports calls, runs faster, costs less. Flip to `full` when you need the nested arrays.
- **Use `postalCode` over `department` when you can** — postal code is strictly narrower (75001 = Paris 1er) and gets you cleaner geo-cohorts than the broader department code.
- **Set `status: "struck-off"` to spot recently-radiée companies** for compliance screening or to clean stale prospects out of your CRM.
- **Watch `establishmentsTruncated: true` on enterprise groups** — Carrefour, LVMH, BNP Paribas, and SNCF can have 1,000+ SIRETs. Bump `maxEstablishmentsPerCompany` only when you actually need every site, since runtime scales with the array size.

### Pricing

**Pay-per-result: $5.00 per 1,000 results**

| Results | Cost |
|---:|---:|
| 100 | $0.50 |
| 1,000 | $5.00 |
| 10,000 | $50.00 |
| 100,000 | $500.00 |

A "result" is one company row in the output dataset. No compute charges — you only pay per result returned.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor extracts data from Infogreffe, the official portal of the French commercial registry. Registry filings (identity card, directors, establishments, filed-report metadata) are public information by French law. The actual financial-report PDFs (comptes annuels, comptes consolidés) are sold per document by Infogreffe and are out of scope for this actor — only the metadata about filings is captured.

Users are responsible for complying with applicable laws, the GDPR (especially when processing director personal data), and Infogreffe's Terms of Service. Do not use extracted data for spam, harassment, or any illegal purpose.

# Actor input Schema

## `searchMode` (type: `string`):

How you want to provide input. Free-text search is best for one-off lookups; URL list lets you paste Infogreffe pages directly; SIREN list is the killer mode for bulk-enriching a CRM column of identifiers.

## `searchQuery` (type: `string`):

Company name, brand, director name, or address fragment. Used when Search Mode is 'Free-text search'. Defaults to 'Carrefour' for an out-of-the-box demo run.

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

Paste one or more Infogreffe URLs — search result pages or company detail pages (e.g. https://www.infogreffe.fr/entreprise/carrefour-sa-652014051). Used when Search Mode is 'Infogreffe URLs'.

## `sirens` (type: `array`):

Paste 9-digit SIRENs (company identifier) or 14-digit SIRETs (establishment identifier), one per line. Spaces and dots are tolerated. Used when Search Mode is 'SIREN/SIRET list'. Ideal for bulk-enriching CRM data.

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

French department code, e.g. '75' for Paris, '92' for Hauts-de-Seine, '13' for Bouches-du-Rhône. Restricts the search to companies registered in this department. Leave empty to search all departments. Ignored in SIREN list mode.

## `postalCode` (type: `string`):

5-digit French postal code (more precise than department). Examples: '75001' (Paris 1er), '69002' (Lyon 2e), '13001' (Marseille 1er).

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

INSEE activity code in NAF rev. 2 format (5 digits + 1 letter, e.g. '62.01Z' for software publishing, '47.11D' for grocery retail, '69.10Z' for legal activities). Restricts results to companies whose principal activity matches this code.

## `legalForm` (type: `array`):

Restrict to specific French legal forms. Leave empty to include all. SAS and SARL are by far the most common.

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

Whether to include active companies, struck-off (radiée) companies, or both. 'Active only' is what most users want.

## `foundedAfter` (type: `string`):

Only include companies whose date d'immatriculation is on or after this date (YYYY-MM-DD). Useful for finding recently incorporated companies.

## `foundedBefore` (type: `string`):

Only include companies whose date d'immatriculation is on or before this date (YYYY-MM-DD).

## `outputDetail` (type: `string`):

'Basic' returns only the identity card (name, SIREN, RCS, address, legal form, capital, NAF, status) — fastest and cheapest. 'Full' adds directors, establishments, and filed-report metadata as nested arrays on the same row.

## `maxEstablishmentsPerCompany` (type: `integer`):

Cap on the number of establishments (sub-SIRETs) embedded in each company row when Output Detail is 'Full'. Most companies have 1-3 establishments, but large groups (LVMH, Carrefour, BNP Paribas, SNCF) can have hundreds or thousands. Default 50 keeps runs fast and cost predictable. Set to 0 for unlimited (an internal hard cap of 10,000 still applies). Truncated rows include an 'establishmentsTruncated: true' flag.

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

Hard cap on total company rows across all sources. Default 200. Set to 0 for no cap (an internal upper limit of 100,000 still applies to prevent runaway pagination on broken responses). The actor stops requesting new pages once this number is reached but keeps the full final page even if it slightly overshoots.

## Actor input object example

```json
{
  "searchMode": "search",
  "searchQuery": "Carrefour",
  "startUrls": [],
  "sirens": [],
  "legalForm": [],
  "status": "active",
  "outputDetail": "full",
  "maxEstablishmentsPerCompany": 50,
  "maxResults": 5
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of scraped companies with the most useful columns at a glance.

## `details` (type: `string`):

Full per-company detail rows including directors, establishments, and filed reports.

# 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 = {
    "searchMode": "search",
    "searchQuery": "Carrefour",
    "startUrls": [],
    "sirens": [],
    "legalForm": [],
    "status": "active",
    "outputDetail": "full",
    "maxEstablishmentsPerCompany": 50,
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/infogreffe-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 = {
    "searchMode": "search",
    "searchQuery": "Carrefour",
    "startUrls": [],
    "sirens": [],
    "legalForm": [],
    "status": "active",
    "outputDetail": "full",
    "maxEstablishmentsPerCompany": 50,
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/infogreffe-scraper").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 '{
  "searchMode": "search",
  "searchQuery": "Carrefour",
  "startUrls": [],
  "sirens": [],
  "legalForm": [],
  "status": "active",
  "outputDetail": "full",
  "maxEstablishmentsPerCompany": 50,
  "maxResults": 5
}' |
apify call solidcode/infogreffe-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Infogreffe Scraper — French Company Registry",
        "description": "[💰 $5.0 / 1K] Extract official French company records from Infogreffe (RCS). Returns SIREN, SIRET, RCS, address, legal form, share capital, NAF/APE code, founding date, directors, establishments, and filed-report metadata. Search by name, URL, or bulk-enrich a list of SIRENs.",
        "version": "1.0",
        "x-build-id": "rN1aU6WcfYbBaXncb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~infogreffe-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-infogreffe-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~infogreffe-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-infogreffe-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~infogreffe-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-infogreffe-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchMode": {
                        "title": "Search Mode",
                        "enum": [
                            "search",
                            "urls",
                            "sirenList"
                        ],
                        "type": "string",
                        "description": "How you want to provide input. Free-text search is best for one-off lookups; URL list lets you paste Infogreffe pages directly; SIREN list is the killer mode for bulk-enriching a CRM column of identifiers.",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Company name, brand, director name, or address fragment. Used when Search Mode is 'Free-text search'. Defaults to 'Carrefour' for an out-of-the-box demo run.",
                        "default": "Carrefour"
                    },
                    "startUrls": {
                        "title": "Infogreffe URLs",
                        "type": "array",
                        "description": "Paste one or more Infogreffe URLs — search result pages or company detail pages (e.g. https://www.infogreffe.fr/entreprise/carrefour-sa-652014051). Used when Search Mode is 'Infogreffe URLs'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sirens": {
                        "title": "SIREN / SIRET List",
                        "type": "array",
                        "description": "Paste 9-digit SIRENs (company identifier) or 14-digit SIRETs (establishment identifier), one per line. Spaces and dots are tolerated. Used when Search Mode is 'SIREN/SIRET list'. Ideal for bulk-enriching CRM data.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "department": {
                        "title": "Department",
                        "enum": [
                            "01",
                            "02",
                            "03",
                            "04",
                            "05",
                            "06",
                            "07",
                            "08",
                            "09",
                            "10",
                            "11",
                            "12",
                            "13",
                            "14",
                            "15",
                            "16",
                            "17",
                            "18",
                            "19",
                            "21",
                            "22",
                            "23",
                            "24",
                            "25",
                            "26",
                            "27",
                            "28",
                            "29",
                            "2A",
                            "2B",
                            "30",
                            "31",
                            "32",
                            "33",
                            "34",
                            "35",
                            "36",
                            "37",
                            "38",
                            "39",
                            "40",
                            "41",
                            "42",
                            "43",
                            "44",
                            "45",
                            "46",
                            "47",
                            "48",
                            "49",
                            "50",
                            "51",
                            "52",
                            "53",
                            "54",
                            "55",
                            "56",
                            "57",
                            "58",
                            "59",
                            "60",
                            "61",
                            "62",
                            "63",
                            "64",
                            "65",
                            "66",
                            "67",
                            "68",
                            "69",
                            "70",
                            "71",
                            "72",
                            "73",
                            "74",
                            "75",
                            "76",
                            "77",
                            "78",
                            "79",
                            "80",
                            "81",
                            "82",
                            "83",
                            "84",
                            "85",
                            "86",
                            "87",
                            "88",
                            "89",
                            "90",
                            "91",
                            "92",
                            "93",
                            "94",
                            "95",
                            "971",
                            "972",
                            "973",
                            "974",
                            "976"
                        ],
                        "type": "string",
                        "description": "French department code, e.g. '75' for Paris, '92' for Hauts-de-Seine, '13' for Bouches-du-Rhône. Restricts the search to companies registered in this department. Leave empty to search all departments. Ignored in SIREN list mode."
                    },
                    "postalCode": {
                        "title": "Postal Code",
                        "type": "string",
                        "description": "5-digit French postal code (more precise than department). Examples: '75001' (Paris 1er), '69002' (Lyon 2e), '13001' (Marseille 1er)."
                    },
                    "nafCode": {
                        "title": "NAF / APE Activity Code",
                        "type": "string",
                        "description": "INSEE activity code in NAF rev. 2 format (5 digits + 1 letter, e.g. '62.01Z' for software publishing, '47.11D' for grocery retail, '69.10Z' for legal activities). Restricts results to companies whose principal activity matches this code."
                    },
                    "legalForm": {
                        "title": "Legal Form",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Restrict to specific French legal forms. Leave empty to include all. SAS and SARL are by far the most common.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "SAS",
                                "SARL",
                                "SA",
                                "SASU",
                                "EURL",
                                "SCI",
                                "EI",
                                "SNC",
                                "SCS",
                                "SCA",
                                "association"
                            ],
                            "enumTitles": [
                                "SAS — Société par Actions Simplifiée",
                                "SARL — Société à Responsabilité Limitée",
                                "SA — Société Anonyme",
                                "SASU — SAS Unipersonnelle",
                                "EURL — Entreprise Unipersonnelle à Responsabilité Limitée",
                                "SCI — Société Civile Immobilière",
                                "EI — Entreprise Individuelle",
                                "SNC — Société en Nom Collectif",
                                "SCS — Société en Commandite Simple",
                                "SCA — Société en Commandite par Actions",
                                "Association loi 1901"
                            ]
                        },
                        "default": []
                    },
                    "status": {
                        "title": "Company Status",
                        "enum": [
                            "active",
                            "struck-off",
                            "both"
                        ],
                        "type": "string",
                        "description": "Whether to include active companies, struck-off (radiée) companies, or both. 'Active only' is what most users want.",
                        "default": "active"
                    },
                    "foundedAfter": {
                        "title": "Founded After",
                        "type": "string",
                        "description": "Only include companies whose date d'immatriculation is on or after this date (YYYY-MM-DD). Useful for finding recently incorporated companies."
                    },
                    "foundedBefore": {
                        "title": "Founded Before",
                        "type": "string",
                        "description": "Only include companies whose date d'immatriculation is on or before this date (YYYY-MM-DD)."
                    },
                    "outputDetail": {
                        "title": "Output Detail Level",
                        "enum": [
                            "basic",
                            "full"
                        ],
                        "type": "string",
                        "description": "'Basic' returns only the identity card (name, SIREN, RCS, address, legal form, capital, NAF, status) — fastest and cheapest. 'Full' adds directors, establishments, and filed-report metadata as nested arrays on the same row.",
                        "default": "full"
                    },
                    "maxEstablishmentsPerCompany": {
                        "title": "Max Establishments Per Company",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap on the number of establishments (sub-SIRETs) embedded in each company row when Output Detail is 'Full'. Most companies have 1-3 establishments, but large groups (LVMH, Carrefour, BNP Paribas, SNCF) can have hundreds or thousands. Default 50 keeps runs fast and cost predictable. Set to 0 for unlimited (an internal hard cap of 10,000 still applies). Truncated rows include an 'establishmentsTruncated: true' flag.",
                        "default": 50
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on total company rows across all sources. Default 200. Set to 0 for no cap (an internal upper limit of 100,000 still applies to prevent runaway pagination on broken responses). The actor stops requesting new pages once this number is reached but keeps the full final page even if it slightly overshoots.",
                        "default": 200
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
