# SIRET Company Scraper (`redomic/siret-company-scraper`) Actor

Search French companies by name, SIREN or SIRET. Get official SIRENE data (status, NAF, address, directors) as flat rows, with monitor mode for changes. Pay per result.

- **URL**: https://apify.com/redomic/siret-company-scraper.md
- **Developed by:** [Redomic](https://apify.com/redomic) (community)
- **Categories:** Lead generation, Jobs
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 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.
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

## SIRET Scraper: French Company Data from the SIRENE Register

Look up French companies by name, SIREN or SIRET and get the official register data as a spreadsheet: SIREN and SIRET numbers, activity code (NAF/APE), legal form, size category, employee range, creation date, active or closed status, head-office address with coordinates, number of establishments, directors' names and roles, and official financials with VAT number when published. The data comes from the French government's public company register (SIRENE), so it's the same record your bank or accountant checks.

### Who uses it

- **B2B sales teams** building lists of French companies by activity, department and size. Example: every active bakery in Paris.
- **Compliance and finance teams** checking that a supplier or customer exists and is still active (KYB).
- **CRM and data teams** filling in SIREN, activity code and size for a list of company names.

### What you get

Active bakeries (`boulangerie`) with an establishment in Paris, on 15 November 2026:

| Company | SIREN | Activity (NAF) | Head office | Created | Category | Establishments open |
|---|---|---|---|---|---|---|
| Boulangeries Paul | 403052111 | 10.71A | Marcq-en-Barœul (59700) | 1995 | ETI | 124 |
| Boulangerie Lorette (Lorette Bac) | 878050921 | 10.71C | Paris 13 (75013) | 2019 | PME | 5 |
| Boulangerie du Nil | 812809234 | 10.71C | Paris (75002) | 2015 | PME | 5 |
| Boulangerie Chambelland | 797515350 | 10.71C | Paris (75011) | 2013 | PME | 3 |
| Boulangerie Mozart | 808518864 | 10.71C | Paris (75015) | 2014 | PME | 2 |

The department filter keeps companies with at least one establishment there, which is why Paul shows up with its head office near Lille.

Each row also carries the head-office SIRET, full address and coordinates, legal form code, employee range and the year it refers to, the total number of establishments, whether the head office employs staff, the last update date, the directors' names and roles, and when available the latest revenue, net income, financial year and VAT number.

### Three modes

| Mode | What you get |
|---|---|
| `search` (default) | Companies matching a name, brand or keyword, with filters |
| `detail` | The record for each SIREN or SIRET you give it |
| `monitor` | Only companies that are new or changed (status, address, activity, size) since the last run |

### Price

$4 per 1,000 companies. There's no start fee. In monitor mode you pay only for new and changed companies. The five bakeries above cost $0.02.

### How to run it

IT services companies around Lyon (Rhône, department 69) with "informatique" in their name, still active:

```json
{
  "query": "informatique",
  "department": "69",
  "activityCode": "62.01Z",
  "legalStatus": "A",
  "maxItems": 500
}
```

Target companies in a specific postal code or commune (INSEE code), for example bakeries in Paris 13th (postal code `75013`, commune `75113`):

```json
{
  "query": "boulangerie",
  "postalCode": "75013",
  "commune": "75113",
  "legalStatus": "A",
  "maxItems": 100
}
```

The search matches company names, brands and addresses, so start from a word the companies you want would use.

Check a list of suppliers:

```json
{
  "mode": "detail",
  "sirenOrSiret": ["403052111", "87805092100013"]
}
```

For monitoring, save the list as a task with `"mode": "monitor"` and schedule it weekly. You'll hear about a company that closes, moves or changes activity.

### Input

| Field | Default | What it does |
|---|---|---|
| `query` | `boulangerie` | A company name, brand, address word, or a SIREN (9 digits) or SIRET (14 digits). |
| `queries` | none | Several searches or numbers in one run. |
| `sirenOrSiret` | none | A list of SIREN or SIRET numbers to fetch directly. |
| `mode` | `search` | `search`, `detail` or `monitor`. |
| `department` | all | A department code, for example `75`, `13` or `2A`. |
| `postalCode` | all | A postal code, for example `75013` or `13008`. |
| `commune` | all | An INSEE commune code, for example `75113` for Paris 13th. |
| `region` | all | A region code, for example `11` for Île-de-France. |
| `activityCode` | all | A NAF code, for example `10.71C` for bakeries. |
| `legalStatus` | all | `A` (active) or `C` (closed). |
| `employeeRange` | all | An INSEE size code, for example `11` (10 to 19 employees) or `12` (20 to 49). |
| `companyCategory` | all | `PME`, `ETI` or `GE`. |
| `maxItems` | `50` | The most companies per search. |

### Output fields

`siren`, `siret`, `companyName`, `commercialName`, `status`, `creationDate`, `activityCode`, `activityCodeNaf25`, `activitySection`, `legalFormCode`, `companyCategory`, `employeeRange`, `employeeYear`, `headOfficeAddress`, `headOfficePostalCode`, `headOfficeCity`, `headOfficeDepartment`, `headOfficeRegion`, `headOfficeCountry`, `headOfficeStatus`, `headOfficeIsEmployer`, `latitude`, `longitude`, `revenue`, `netIncome`, `financialYear`, `vatNumber`, `totalEstablishments`, `openEstablishments`, `directorCount`, `directorNames`, `lastUpdate`, `url`.

### FAQ

**Where does the data come from?**
From SIRENE, the French national company register run by INSEE, through the government's public company search. It's free public data; you pay for the clean, filtered export.

**What's the difference between SIREN and SIRET?**
SIREN (9 digits) identifies the company. SIRET (14 digits) identifies one establishment of that company: the SIREN plus 5 digits.

**What do PME, ETI and GE mean?**
INSEE's size categories: PME is a small or medium business, ETI a mid-sized company, GE a large company.

**Do I get phone numbers or emails?**
No. The register doesn't hold them, and we don't add them.

**Something looks wrong in my results.**
Open an issue on the Issues tab with your input and we'll look at it.

### En français

Recherchez des entreprises françaises par nom, SIREN ou SIRET et obtenez les données officielles du répertoire SIRENE dans un tableur : SIREN, SIRET, code NAF, forme juridique, catégorie, tranche d'effectif, date de création, statut, adresse du siège, nombre d'établissements et dirigeants.

### Use it from AI agents (MCP) and Python

**AI agents.** Add this Actor as a tool in Claude, Cursor, VS Code or any MCP client through the Apify MCP server. The agent reads the input schema, so a plain request is enough.

```json
{
  "mcpServers": {
    "siret-company-scraper": {
      "url": "https://mcp.apify.com?tools=redomic/siret-company-scraper",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}
```

**Python.** `pip install apify-client`, then:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("redomic/siret-company-scraper").call(run_input={"query": "boulangerie", "maxItems": 5, "mode": "search"})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### More from us

- [Allabolag Scraper - Swedish Company Data](https://apify.com/redomic/allabolag-company-scraper): Scrape allabolag.se for Swedish company financials, industry, status and board role titles by search, org number or URL
- [Ashby Jobs Scraper with Salaries](https://apify.com/redomic/ashby-jobs-monitor): Ashby jobs scraper for any startup careers board (OpenAI, Ramp, Notion and thousands more), with salary ranges as numbers: min, max, currency, period, plus equity and bonus flags
- [ATS Jobs Search: Greenhouse, Lever & Ashby Jobs API](https://apify.com/redomic/ats-jobs-search): Search 300,000+ open jobs from 11,000+ companies on Greenhouse, Lever and Ashby in one run
- [Blocket Scraper: Car Monitor](https://apify.com/redomic/blocket-se-scraper): Blocket scraper: each run returns up to 2,500 Blocket Bil and Torget listings as flat rows with price, make, model, year, mileage, VIN, inspections and seller
- [Closed Jobs Tracker: Filled Roles & Time-to-Fill](https://apify.com/redomic/closed-jobs-tracker): Search closed jobs from 11,000+ companies with closedOn, daysOpen and time-to-fill signals
- [Google Jobs Scraper - Job Postings API](https://apify.com/redomic/google-jobs): Google Jobs and job postings scraper: get job title, company, location, posted date, salary, full description and every apply link for any search
- [Google Trends API: Trending Now & Interest Over Time](https://apify.com/redomic/google-trends): Trending-now searches and new-trends alerts/monitoring per country with the news behind them, plus interest over time, interest by region, and related and rising queries for any keyword
- [GovDeals Scraper](https://apify.com/redomic/govdeals-scraper): Search and monitor GovDeals government surplus auctions
- [Greenhouse Jobs Monitor & Scraper](https://apify.com/redomic/greenhouse-jobs-monitor): Monitor Greenhouse jobs from any company careers board (Airbnb, Stripe, Discord and thousands more)
- [Job Postings Dataset: 320k+ Open Jobs, Updated Daily](https://apify.com/redomic/job-postings-dataset): 320,000+ open jobs from 10,000+ company career sites (Greenhouse, Lever, Ashby), updated daily with first-seen and closed dates
- [Lever Jobs Scraper with Salaries](https://apify.com/redomic/lever-jobs-monitor): Lever jobs scraper for any company's careers page (Palantir, Spotify, Zoox, Shield AI and thousands more): flat rows with title, team, location, workplace, commitment, apply link, salary as numbers and the full description merged
- [Marktplaats.nl Scraper](https://apify.com/redomic/marktplaats-nl): Scrape Marktplaats.nl listings into clean rows: title, price in EUR, condition, seller, location, images
- [Otodom Scraper: Poland Property Listings & Price Monitor](https://apify.com/redomic/otodom-scraper): Scrape Otodom.pl property listings in Poland
- [Otomoto.pl Scraper](https://apify.com/redomic/otomoto-scraper): Scrape Otomoto.pl Polish car listings: one run returns used-car rows with price, make, model, year, mileage, fuel, gearbox, seller and URL
- [Personio Jobs Scraper](https://apify.com/redomic/personio-jobs): Scrape open jobs from Personio company career pages (jobs.personio.de/.com XML feeds)
- [Salary Data API: Pay Ranges by Job Title & Level](https://apify.com/redomic/salary-data): Get salary benchmarks (p10-p90, annualised, with n) and pay ranges from 150,000+ employer-posted jobs across 11,000+ companies, updated daily
- [SUUMO Scraper - Japan Property Listings](https://apify.com/redomic/suumo-scraper): Scrape SUUMO Japan property listings from search URLs for rentals and sales
- [Talabat Scraper — Menus, Prices & Delivery Fees](https://apify.com/redomic/talabat-scraper): Talabat menus, prices and delivery fees as flat rows in 8 MENA markets
- [Workday Jobs Scraper](https://apify.com/redomic/workday-jobs): Search and monitor public Workday (myworkdayjobs.com) job postings

# Changelog

This Actor's version history is a separate document: https://apify.com/redomic/siret-company-scraper/changelog.md

# Actor input Schema

## `query` (type: `string`):

Company name, brand, address keyword, or a SIREN (9 digits) / SIRET (14 digits) to look up. You can also use 'queries' for multiple terms.

## `queries` (type: `array`):

Multiple search terms, SIREN or SIRET numbers to process in one run. Each gets its own status row.

## `sirenOrSiret` (type: `array`):

Bulk list of SIREN (9 digits) or SIRET (14 digits) identifiers to fetch directly.

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

search/detail = return matching companies now. monitor = compare current results to the previous run for the same input and report new, changed and removed companies (state stored in a named key-value store). In monitor mode only changes are billed.

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

Maximum company rows to return per query. The API caps pagination at 10,000 results per search; narrow filters to cover larger segments.

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

Optional department code to filter results (e.g. 75, 13, 2A).

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

Optional postal code to filter results (e.g. 75013, 13008).

## `commune` (type: `string`):

Optional INSEE commune code to filter results (e.g. 75113 for Paris 13e, 13055 for Marseille).

## `region` (type: `string`):

Optional region code to filter results (e.g. 11 for Île-de-France).

## `activityCode` (type: `string`):

Optional NAF activity code filter (e.g. 10.71C for boulangerie-pâtisserie).

## `legalStatus` (type: `string`):

Filter by administrative status: A = active, C = ceased/closed.

## `employeeRange` (type: `string`):

Optional employee range code as used by SIRENE (e.g. 00, 01, 02, 03, 11, 12, 21...).

## `companyCategory` (type: `string`):

Optional company size category: PME, ETI, GE.

## Actor input object example

```json
{
  "query": "boulangerie",
  "queries": [],
  "sirenOrSiret": [],
  "mode": "search",
  "maxItems": 50,
  "department": "",
  "postalCode": "",
  "commune": "",
  "region": "",
  "activityCode": "",
  "legalStatus": "",
  "employeeRange": "",
  "companyCategory": ""
}
```

# Actor output Schema

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

No description

## `overview` (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 = {
    "query": "boulangerie",
    "queries": [],
    "mode": "search",
    "maxItems": 50,
    "department": "",
    "postalCode": "",
    "commune": "",
    "region": "",
    "activityCode": "",
    "legalStatus": "",
    "employeeRange": "",
    "companyCategory": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("redomic/siret-company-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 = {
    "query": "boulangerie",
    "queries": [],
    "mode": "search",
    "maxItems": 50,
    "department": "",
    "postalCode": "",
    "commune": "",
    "region": "",
    "activityCode": "",
    "legalStatus": "",
    "employeeRange": "",
    "companyCategory": "",
}

# Run the Actor and wait for it to finish
run = client.actor("redomic/siret-company-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 '{
  "query": "boulangerie",
  "queries": [],
  "mode": "search",
  "maxItems": 50,
  "department": "",
  "postalCode": "",
  "commune": "",
  "region": "",
  "activityCode": "",
  "legalStatus": "",
  "employeeRange": "",
  "companyCategory": ""
}' |
apify call redomic/siret-company-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,redomic/siret-company-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/Q4Id95UJJN9m9Wr9D/builds/jVX5e6w4j5FI4OYt1/openapi.json
