# France Company Enricher — SIREN, KYB & B2B Lead Enrichment (`songful_laborer/fr-company-enricher`) Actor

Enrich French companies by SIREN or name. Official government data for KYB compliance, CRM cleaning, and B2B prospecting

- **URL**: https://apify.com/songful\_laborer/fr-company-enricher.md
- **Developed by:** [Alexandre Watrin](https://apify.com/songful_laborer) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 french company informations

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/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 Company Enricher

Enrich any French company with official data from the French government's open registry — in a single API call.

Perfect for **KYB compliance**, **B2B lead enrichment**, **CRM cleaning**, and **due diligence** workflows.

***

### What does this Actor do?

Give it a **SIREN number** (9 digits) or a **company name**, and it returns a clean, normalized profile with:

- Legal identity (SIREN, legal name, trade name)
- Registered head office address
- NAF/APE activity code and label
- Administrative status (active / ceased)
- Creation date
- Company officers (dirigeants), including name and role

Data comes directly from the **official French government API** `recherche-entreprises.api.gouv.fr`, so it is always up to date and legally safe to use.

***

### Why use this Actor?

- ✅ **Official data source** — no scraping, no legal risk, no ToS violations
- ✅ **Clean, normalized output** — no need to parse the raw government response
- ✅ **Batch processing** — enrich hundreds or thousands of companies in one run
- ✅ **Pay only for results** — you are charged per successfully enriched company
- ✅ **Fast and reliable** — asynchronous requests with automatic error handling

***

### Use cases

| Use case | Example |
| :--- | :--- |
| **KYB / compliance** | Verify a supplier exists and is legally active before signing a contract |
| **B2B lead enrichment** | Add legal name, address, and officers to your CRM records |
| **Due diligence** | Check the administrative status and creation date of a target company |
| **Data cleaning** | Normalize messy company names into official SIREN records |
| **Market research** | Build a dataset of companies by name or SIREN |

***

### Input

| Field | Type | Description |
| :--- | :--- | :--- |
| `sirens` | array of strings | **Required.** A list of SIREN numbers (9 digits) or company names to enrich. |
| `includeDirigeants` | boolean | Optional. Include company officers in the output. Default: `true`. |

#### Example input

```json
{
  "sirens": ["552100554", "542051180", "Renault"],
  "includeDirigeants": true
}
```

***

### Output

For each company found, the Actor pushes one record to the dataset.

#### Example output

```json
{
  "siren": "552100554",
  "nom_complet": "RENAULT",
  "nom_raison_sociale": "RENAULT",
  "adresse": "13-15 QUAI LE GALLO 92100 BOULOGNE-BILLANCOURT",
  "code_naf": "29.10Z",
  "libelle_naf": "Construction de véhicules automobiles",
  "etat_administratif": "A",
  "date_creation": "1945-01-01",
  "dirigeants": [
    {
      "nom": "DE MEO",
      "prenoms": "Luca",
      "qualite": "Directeur Général"
    }
  ]
}
```

#### Output fields

| Field | Description |
| :--- | :--- |
| `siren` | The company's unique 9-digit identifier |
| `nom_complet` | Full commercial name |
| `nom_raison_sociale` | Legal registered name |
| `adresse` | Head office address |
| `code_naf` | French activity classification code |
| `libelle_naf` | Human-readable activity label |
| `etat_administratif` | `A` = active, `C` = ceased |
| `date_creation` | Company creation date |
| `dirigeants` | List of officers (if `includeDirigeants` is enabled) |

If a company cannot be found, it is skipped and a warning is logged. The Actor does not fail.

***

### Pricing

This Actor uses **Pay-Per-Event** pricing:

| Event | Price | Description |
| :--- | :--- | :--- |
| `company_enriched` | **$3.00 / 1,000 companies** | Charged once per successfully enriched company |
| `actor_start` | $0.00005 | Standard Apify startup fee |

You only pay for results. If a company is not found, you are not charged for it.

***

### How to use it

1. Go to the **Input** tab.
2. Paste your list of SIREN numbers or company names.
3. (Optional) Toggle `includeDirigeants` on or off.
4. Click **Start**.
5. Download your results from the **Dataset** tab in JSON, CSV, or Excel format.

***

### Data source & legal notice

All data is retrieved from the **official French government open data API**:

> https://recherche-entreprises.api.gouv.fr

This API is published by the French government under an open license (**Licence Ouverte / Open Licence 2.0**). The data is public, official, and free to reuse, including for commercial purposes.

This Actor does **not** scrape any website and does **not** violate any Terms of Service. It is a clean, compliant wrapper around a public API.

***

### Limitations

- Data covers companies registered in **France only** (including DOM-TOM).
- Companies in **Alsace-Moselle** may have specific local registry rules that affect some fields.
- The Actor returns the **first matching result** for a name-based query. For exact matching, always prefer SIREN numbers.
- Rate limiting is handled automatically, but very large batches may take several minutes to complete.

***

### Support

Found a bug or have a feature request? Please open an issue in the **Issues** tab of this Actor, or contact me directly through the Apify platform.

If you find this Actor useful, a ⭐ review helps a lot!

***

### Changelog

#### v1.0.0 — Initial release

- Enrich companies by SIREN or name
- Return identity, address, NAF code, status, and creation date
- Optional company officers
- Pay-Per-Event monetization

# Actor input Schema

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

Fournissez une liste de numéros SIREN (9 chiffres) ou de noms d'entreprises à enrichir.

## `includeDirigeants` (type: `boolean`):

Ajouter les informations sur les dirigeants (nom, qualité).

## Actor input object example

```json
{
  "sirens": [
    "552100554"
  ],
  "includeDirigeants": true
}
```

# Actor output Schema

## `results` (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 = {
    "sirens": [
        "552100554"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("songful_laborer/fr-company-enricher").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 = { "sirens": ["552100554"] }

# Run the Actor and wait for it to finish
run = client.actor("songful_laborer/fr-company-enricher").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 '{
  "sirens": [
    "552100554"
  ]
}' |
apify call songful_laborer/fr-company-enricher --silent --output-dataset

```

## MCP server setup

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

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/5hyEgnaCsaEcCNwm0/builds/pBm7Lk3wiJqtiG7jE/openapi.json
