French Company Leads - Sirene API, SIREN/SIRET Data avatar

French Company Leads - Sirene API, SIREN/SIRET Data

Pricing

$4.00 / 1,000 companies

Go to Apify Store
French Company Leads - Sirene API, SIREN/SIRET Data

French Company Leads - Sirene API, SIREN/SIRET Data

Find French companies (entreprises) from the official Sirene-based Recherche d'entreprises API. Filter by NAF code, department, headcount and creation date, get only new companies on a schedule, with SIREN/SIRET, officers and Slack alerts, $0.004/company.

Pricing

$4.00 / 1,000 companies

Rating

0.0

(0)

Developer

Luke Hunter

Luke Hunter

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

For sales teams, agencies, recruiters, accountants and data teams who prospect French businesses. Search French company data (entreprises) by activity (NAF/APE code), department, region, postal code, headcount, size and legal form, find newly registered companies, and get one clean row per company with SIREN, SIRET, head-office address and coordinates, officers (dirigeants), published financials and a link to the public company page. Run it on a schedule to get only new companies, and send each one to Slack, Discord or Telegram.

$0.004 per delivered company — 1,000 companies = $4

It reads the official, free and open Recherche d'entreprises API from the French government (the Sirene API register of companies, run by the DINUM and INSEE). No scraping, no login, no proxy, no API key. Only companies that pass your filters are delivered, and only delivered companies are charged.

What you get

One row per company, flattened and ready for a spreadsheet, CRM or enrichment step: SIREN, SIRET of the head office (siège), name, acronym, legal form code, main activity (NAF/APE code and section), size category (PME, ETI, GE), headcount band as code and readable text, creation date, administrative status, the head-office address, postal code, commune, département, region, latitude and longitude, number of establishments (total and open), officers as the register publishes them, financial figures where published, and the annuaireEntreprisesUrl page on annuaire-entreprises.data.gouv.fr.

You wantSet
New restaurants in Paris this monthactivitePrincipale: ["56.10A"], departement: "75", createdWithinDays: 30
IT companies with 10-49 staff in LyonactivitePrincipale: ["62.01Z", "62.02A"], departement: "69", trancheEffectif: ["11", "12"]
One postal codecodePostal: "75011"
A whole regionregion: "84" (Auvergne-Rhône-Alpes)
Mid-size and large companiescategorieEntreprise: ["ETI", "GE"]
SAS companies onlynatureJuridique: "5710"
Companies created since a datecreatedAfter: "2026-09-01"
Only what is new since yesterdayonlyNewSinceLastRun: true on a daily Schedule
Search by name or keywordq: "boulangerie"

Quick start

{
"activitePrincipale": ["56.10A"],
"departement": "75",
"maxItems": 20
}

At least one filter is required (the API needs a query). Companies are active by default (etatAdministratif: "A").

Recipes

New restaurants in Paris this month

{
"activitePrincipale": ["56.10A"],
"departement": "75",
"createdWithinDays": 30,
"maxItems": 200
}

Newest registrations come first. Chain the result to Company Contact Scraper to find each new restaurant's website email.

IT companies with 10-49 staff in Lyon

{
"activitePrincipale": ["62.01Z", "62.02A"],
"departement": "69",
"trancheEffectif": ["11", "12"],
"maxItems": 500
}

Headcount bands can also be written as ranges: ["10-19", "20-49"]. Note that many companies declare no headcount band, so they are not returned when you filter on it.

Daily new company alerts to Slack

{
"activitePrincipale": ["56.10A", "56.30Z"],
"region": "11",
"createdWithinDays": 14,
"onlyNewSinceLastRun": true,
"maxItems": 100,
"slackWebhookUrl": "https://hooks.slack.com/services/<T>/<B>/<token>"
}

Save it as a Task, add a daily Schedule, and each morning Slack gets only the companies registered since the last run. The first run is the baseline and sends what matches now.

SIREN/SIRET lookup by name

{
"q": "Le Petit Zéphyr",
"departement": "75",
"maxItems": 5
}

Alerts: Discord, Telegram, Slack, Teams, Google Chat, phone push or any app

Add one or more destinations in the Notifications (optional) section and each run sends the companies it delivered. It is a monitor that notifies you: it only reads a public register, and never contacts a company, a person or any third party.

ChannelFill inWhat you get
DiscorddiscordWebhookUrlOne card per company, 10 per message
TelegramtelegramBotToken + telegramChatIdUp to 10 companies per message, one line each
SlackslackWebhookUrlBlock Kit message, up to 10 companies per message
Mattermost, Rocket.ChatslackCompatibleWebhookUrlA Markdown list
Microsoft TeamsteamsWebhookUrlAdaptive Card from a Teams Workflows webhook
Google ChatgoogleChatWebhookUrlCard in a space
ntfy (phone push, no account)ntfyTopic (optional ntfyServer, ntfyToken)A push per company, up to 10, then one "...and N more"
Pushover (phone push)pushoverUserKey + pushoverAppTokenA push per company, up to 10, then one "...and N more"
Zapier, Make, n8n, PipedreamwebhookUrlOne JSON POST per 100 delivered rows with the full dataset rows

Each message reads like New company: LE PETIT ZEPHYR — 75011 PARIS 11E ARRONDISSEMENT, with activity, headcount, creation date, address, SIREN and a link to the public company page. Officers' names are never put in notifications. Nothing is sent when a run delivers nothing, a failing channel never fails the run, and notifications are free: you pay only for delivered companies. Webhook URLs and tokens are stored as secret inputs.

maxNotifications (default 25, max 100) caps how many companies go to chat and phone channels per run; the rest are still in the dataset. Use onlyNewSinceLastRun for alerts, otherwise a scheduled run repeats the same companies.

Input

FieldDefaultWhat it does
q""Free text on company name, officer name or address.
activitePrincipale[]NAF/APE codes, format NN.NNL, e.g. 56.10A. A malformed code stops the run with an error; 5610a is normalised to 56.10A.
departement""Département code (75, 69, 2A, 971); commas for several, e.g. 75,92,93,94.
region""INSEE region code (11, 84, 93, 76 ...).
codePostal""5-digit postal code; commas for several.
trancheEffectif[]Headcount band codes (11 = 10-19, 12 = 20-49 ...) or ranges ("10-19").
categorieEntreprise[]PME, ETI, GE.
etatAdministratifAA active, C ceased, all both.
natureJuridique""4-digit legal category, e.g. 5710 (SAS), 5499 (SARL), 1000 (sole trader).
createdWithinDaysnoneOnly companies registered in the last N days (1 to 3650).
createdAfternoneOnly companies registered on or after YYYY-MM-DD. Overrides createdWithinDays.
maxItems50Hard cap on delivered companies, 1 to 5000.
onlyNewSinceLastRunfalseDeliver and charge only companies not delivered before for this same set of filters.
stateStoreNamefrance-company-leads-seen-companiesNamed store holding the alert memory.
notification fieldsnonediscordWebhookUrl, telegramBotToken, telegramChatId, slackWebhookUrl, slackCompatibleWebhookUrl, teamsWebhookUrl, googleChatWebhookUrl, ntfyTopic, ntfyServer, ntfyToken, pushoverUserKey, pushoverAppToken, webhookUrl, maxNotifications.

Wrong values fail early with a message that says what to fix, for example "activitePrincipale" entry "restaurants" is not valid. Use a NAF/APE code such as 56.10A.

How "new companies" works

The API has no creation-date filter, so createdWithinDays and createdAfter are applied by the Actor on each company's dateCreation after the pages are downloaded. To return the newest companies first, the Actor reads every page of your query (up to the API's limit below) before it delivers. That is quick with a narrow query (one department and one NAF code is a few pages) and slower with a broad one. Combine the date filter with a department, postal code or NAF code.

How "only new" works

With onlyNewSinceLastRun, the Actor remembers each delivered company by its SIREN in a named key-value store, per set of filters (changing a NAF code starts a fresh baseline; changing maxItems does not, and a rolling createdWithinDays stays one watch). Only companies actually delivered are remembered, so anything held back by maxItems or your spending limit turns up on the next run.

Example output

{
"siren": "900000001",
"siret": "90000000100011",
"nomComplet": "LE PETIT ZEPHYR (ZEPHYR)",
"sigle": "ZEPHYR",
"natureJuridique": "5710",
"activitePrincipale": "56.10A",
"activitePrincipaleLabel": null,
"sectionActivite": "I",
"sectionActiviteLabel": "Hébergement et restauration",
"categorieEntreprise": "PME",
"trancheEffectif": "11",
"trancheEffectifLabel": "10 to 19 employees",
"trancheEffectifAnnee": 2024,
"dateCreation": "2026-09-22",
"dateFermeture": null,
"etatAdministratif": "A",
"statutDiffusion": "O",
"adresse": "12 RUE DES LILAS 75011 PARIS",
"complementAdresse": "BAT B",
"codePostal": "75011",
"commune": "75111",
"libelleCommune": "PARIS 11E ARRONDISSEMENT",
"departement": "75",
"region": "11",
"latitude": 48.8597,
"longitude": 2.3801,
"nombreEtablissements": 2,
"nombreEtablissementsOuverts": 1,
"dirigeants": [
{ "type": "personne physique", "nom": "DUPONT-EXEMPLE", "prenoms": "Camille Marie", "qualite": "Président" },
{ "type": "personne morale", "siren": "900000099", "denomination": "HOLDING EXEMPLE SAS", "qualite": "Directeur général" }
],
"finances": [
{ "year": 2024, "chiffreAffaires": 410000, "resultatNet": 12500 },
{ "year": 2023, "chiffreAffaires": 380000, "resultatNet": -4000 }
],
"chiffreAffaires": 410000,
"resultatNet": 12500,
"exerciceFinancier": 2024,
"annuaireEntreprisesUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/900000001",
"scrapedAt": "2026-10-10T12:00:00.000Z"
}

This sample is illustrative (an invented company and invented people), shaped like the API's response. Anything the register does not publish is null (or an empty list), never guessed. activitePrincipaleLabel is filled only when the API provides a label; the NAF section name is added from the official nomenclature. Officers: legal entities are kept with their SIREN and name; for natural persons only name, first names and role are output, with no birth date and no nationality.

Use with AI agents (MCP)

This Actor works as a tool for Claude, ChatGPT, Cursor and other MCP clients through Apify's MCP server. Every input is optional except that at least one filter must be set, so a call can be as small as a NAF code and a département.

Claude Desktop (claude_desktop_config.json), with your own token from Apify Console > Settings > API & Integrations:

{
"mcpServers": {
"apify-french-company-leads": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://mcp.apify.com?tools=lukehunter/france-company-leads",
"--header", "Authorization: Bearer ${APIFY_TOKEN}"
],
"env": { "APIFY_TOKEN": "<YOUR_APIFY_TOKEN>" }
}
}
}

Clients that support OAuth (Claude.ai, VS Code) can connect with just the URL https://mcp.apify.com?tools=lukehunter/france-company-leads and sign in to Apify. Never paste a real token into a shared file or chat.

Example. You ask: "Which software companies were registered in Lyon in the last 60 days, and who runs them?" The agent calls the tool lukehunter--france-company-leads with:

{
"activitePrincipale": ["62.01Z", "62.02A"],
"departement": "69",
"createdWithinDays": 60,
"maxItems": 25
}

It is charged $0.004 per delivered company, capped by maxItems. Each input property description is short and carries an example, so agents fill it in correctly.

Pricing

Pay-per-event: $0.004 per delivered company. A company is charged only after it is accepted into the dataset, and only if it passed your filters (and, in alert mode, was not delivered before).

Companies deliveredCost
20$0.08
50 (default cap)$0.20
1,000$4.00
5,000 (maximum)$20.00

maxItems (hard maximum 5,000) and your Apify per-run spending limit both stop delivery before the cap is passed. Reading the API, filtering and sending notifications cost nothing extra. Price changes follow Apify's notice rules; the Pricing tab always shows the rate you are charged.

Limitations

  • Official open data, Licence Ouverte 2.0. The data comes from the public API Recherche d'entreprises (Sirene register and related public registers) and is re-used under the Licence Ouverte / Open Licence 2.0 published by Etalab. If you republish the data, attribute the source: "Source: API Recherche d'entreprises, DINUM / INSEE, Licence Ouverte 2.0."
  • Not affiliated with the French government. This is an independent Actor reading a public API. For legal or contractual purposes confirm a company on the official sources (the annuaireEntreprisesUrl page, INSEE, the commercial court registers).
  • 10,000 results per query. The API exposes only the first 10,000 results of any query (400 pages of 25). If your filters match more, the run says so in its status message; narrow them (department, postal code, NAF code, headcount, or a shorter date window) and run again. With a creation-date filter and a broad query, the newest companies may sit beyond that window until you narrow it.
  • Creation date is filtered after download. The API has no such filter, so the Actor applies it to dateCreation; companies with no creation date are excluded while it is set.
  • Partial diffusion is respected. Some entrepreneurs (mostly sole traders) have asked the register to hide personal details. Those values come back masked and are output as null; the Actor never tries to unmask them, and records the API flags as non-diffusible are not output.
  • Headcount and finances are often missing. Many companies declare no headcount band and most small companies publish no accounts; those fields are null or empty.
  • Head office only. Address and coordinates are those of the siège. Other establishments are counted (nombreEtablissements) but not listed.
  • Personal data. Officer names are public register data. Use them in line with the GDPR and French rules on prospecting (CNIL); for marketing to individuals you need a lawful basis. Sole-trader company names can be a person's name.
  • Rate limits. The API allows about 7 requests per second; this Actor sends about 2 to 3, one at a time, and retries 429 and 5xx responses with backoff. If the API stays unavailable the run fails with a clear message and nothing is charged. A run stops reading after 10 minutes and says so.

Use it from your code, Make, Zapier or n8n

Built for automated pipelines: small runs, stable field names, one row per item, and you pay only for rows actually delivered.

One API call that runs the Actor and returns the data (replace $APIFY_TOKEN with your token from Apify Console → Settings → Integrations):

curl -s -X POST "https://api.apify.com/v2/acts/lukehunter~france-company-leads/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"activitePrincipale": ["56.10A"], "departement": "75", "maxItems": 20}'

JavaScript (npm i apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('lukehunter~france-company-leads').call({
"activitePrincipale": [
"56.10A"
],
"departement": "75",
"maxItems": 20
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python (pip install apify-client):

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('lukehunter~france-company-leads').call(run_input={"activitePrincipale": ["56.10A"], "departement": "75", "maxItems": 20})
items = client.dataset(run['defaultDatasetId']).list_items().items

Schedules, webhooks and no-code tools: save your input as a Task, add a Schedule (e.g. hourly or daily), and attach a webhook or one of the Integrations tab's connectors (Make, Zapier, n8n, Google Sheets, Slack) to push each run's results into your own system.

Only new items each run: set "onlyNewSinceLastRun": true on a scheduled Task and every run after the first delivers, and charges for, only items it hasn't delivered before for that same input. That makes it a ready-made change feed.

Feedback: an honest rating on the Store page, good or bad, helps others decide if this Actor fits their needs. Missing a field or found a problem? Open an issue on the Actor page.

FAQ

Is this the official Sirene API? It reads the official Recherche d'entreprises API, which is built on the Sirene register of INSEE and the national company registers. It is free and keyless; this Actor adds filtering, creation-date search, new-since-last-run, alerts and flat rows.

What is the difference between SIREN and SIRET? SIREN (9 digits) identifies the company; SIRET (14 digits) identifies one establishment. The row's siret is the head office's.

What is a NAF/APE code? The French activity classification. 56.10A is traditional restaurants, 62.01Z software programming, 47.11B convenience stores, 69.20Z accounting. Enter codes in NN.NNL form.

Why is a company I know missing? Check that it is active (etatAdministratif), that its head office is in your département or postal code, whether a headcount band or creation date filter excluded it, and whether it is non-diffusible.

Can I get new French companies in Slack every morning? Yes: set createdWithinDays, onlyNewSinceLastRun, add a Slack destination and a daily Schedule. See the recipes above.

Does it contact companies or people? No. It only reads the register and reports.

Other data tools from the same developer, built to the same standard: official or public sources, hard cost caps, and honest documentation of limits.

  • Website Contact Scraper: emails, phone numbers and social profile links from any list of company domains, with the page each came from and a changed-contacts-only mode for scheduled runs.
  • Impressum Scraper: legal entity data from the imprint of any company website in Germany, Austria and Switzerland: legal name and form, managing directors, HRB/HRA or FN register, VAT id and address, with a changed-data-only mode for scheduled runs.
  • Website Tech Stack Detector: the technologies a website runs (CMS, ecommerce platform, analytics, ad pixels, chat, payments, CDN, frameworks) from its home page, with the evidence for each match and a changed-technologies-only mode for scheduled runs.
  • Google Maps Email Extractor & Lead Enricher: emails, phones, social links, named people and the tech stack of every business in your Google Maps Scraper results, one enriched row per business, with filters such as only Shopify stores with an email.
  • Federal Register Rule Effective-Date Radar: final federal rules about to take effect, with citations, dockets and urgency.
  • UK Tenders Monitor: new UK public-sector tenders from Contracts Finder and Find a Tender, filtered by CPV code, value, region and buyer, with Slack, Discord and Telegram alerts.
  • Chicago Contract Recompete & Extension Radar: expiring City of Chicago contracts with extension history, for recompete prospecting.
  • Bank Branch Closings & Merger Radar (FDIC): new US bank branch closings, openings and mergers from the FDIC.