# French Company Finder - Sirene Financials (`datagrit/french-company-finder`) Actor

French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.

- **URL**: https://apify.com/datagrit/french-company-finder.md
- **Developed by:** [datagrit](https://apify.com/datagrit) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

### What does French Company Finder do?

French Company Finder searches the official Sirene register of French companies and returns each company as a clean record: identity, legal form, activity code, size, employer flag, head office address with coordinates, and the latest published financials. Beyond a plain lookup you can screen companies by profitability: filter on net result (profitable or loss-making) as well as revenue, and every record comes with the net margin already calculated. Location filters are checked on every record, so a company is returned only when it has an open establishment in the place you asked for. Export the data as JSON, CSV or Excel, call it through the Apify API, or plug it into n8n, Make and AI agents through MCP.

### Who is it for?

- **Sales and business development teams** building lists of French prospects by activity, region, size and financial strength.
- **Compliance, KYB and procurement teams** verifying a counterparty by SIREN or SIRET, including companies that have ceased activity.
- **Investors and analysts** screening for profitable or loss-making companies in a sector.
- **Data teams** enriching customer or supplier lists with size, activity and address data.

### How to use it

1. Add search terms such as an activity or a name, paste SIREN or SIRET numbers, or use filters alone (for example a department and a size category, with no search term).
2. Narrow the search with filters: department, region, postal code, NAF activity code, size category, employee band, legal form, revenue and net result ranges, employers only, social and solidarity economy only.
3. Choose whether to include the directors listed in the register. This is off by default because it contains personal data.
4. Set the maximum number of results and run the Actor.

Fields you leave out stay neutral: a SIREN lookup called through the API returns only that company, and a filter-only call searches with the filters alone. Only an input with no search term, no number and no filter at all runs a small example search (boulangerie in department 75, not charged per result), and the status message says so.

### Example output

| siren | name | city | companySize | revenue | netResult | netMarginPct | matchedEstablishmentCity |
|---|---|---|---|---|---|---|---|
| 380059113 | SERVICES LOGICIELS D'INTEGRATION BOURSIERE - SLIB (SLIB) | PARIS | GE | 25256877 | 897017 | 3.6 | LYON |

```json
{
  "query": "logiciel",
  "siren": "380059113",
  "name": "SERVICES LOGICIELS D'INTEGRATION BOURSIERE - SLIB (SLIB)",
  "isActive": true,
  "legalForm": "Public limited company (SA, board of directors)",
  "activityCode": "62.02A",
  "companySize": "GE",
  "employeeBand": "100-199 employees",
  "city": "PARIS",
  "departmentCode": "75",
  "revenue": 25256877,
  "revenueYear": 2025,
  "netResult": 897017,
  "netMarginPct": 3.6,
  "isEmployer": true,
  "vatNumber": "FR66380059113",
  "matchedEstablishmentSiret": "38005911300114",
  "matchedEstablishmentCity": "LYON",
  "matchedEstablishmentDepartment": "69",
  "matchedEstablishmentIsHeadOffice": false,
  "matchedEstablishmentIsActive": true,
  "matchedEstablishmentsListed": 4,
  "sourceUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/380059113",
  "found": true
}
```

### What data do you get?

Each record contains the SIREN, names and acronym, active or closed status with creation and closure dates, legal form with a label for the common codes, NAF activity code and section, size category, employee band with its label, the number of establishments (total and open), the head office SIRET, address, postal code, city, department, region and coordinates, the VAT number, and the latest published financials: revenue, its year, net result and net margin. Flags show social economy, organic, employer and association status. The employer flag is true when the head office is registered as an employer or the company employee band shows at least one employee. Directors, with their roles, are available on request.

Revenue and net result exist only for companies that publish their accounts, and the register exposes the latest published year only.

### How do location filters work?

The Sirene register matches a location against every establishment of a company, including establishments closed decades ago. In a sample of 450 companies returned by the register for eight departments on 2026-09-30, 128 had only closed establishments in the requested department. The Actor therefore checks every record itself: with **Only active companies** on (the default), a company is returned only when it has an open establishment in the location, and the status message counts the companies it skipped. The head office is checked first, because the register does not always list it among the matching establishments.

Each record carries the establishment that matched (SIRET, address, postal code, city, department, region, open or closed, closure date) next to the head office address, and the number of establishments of the company in the location. The Actor asks the register for up to 100 matching establishments per company, so a count of 100 means 100 or more. Switch off **Only active companies** to also get closed companies and companies whose only establishment in the location is closed. Switch on **Head office only** when you want companies whose head office itself is in the location. Without a location filter the matched establishment fields stay empty.

### How much does it cost?

You pay per company returned. Pricing depends on your Apify plan: a small fee when a run starts, then a price per result that is lower on paid plans. The Apify free plan includes monthly credit you can use to try it. You can set a maximum spend on the run: the Actor stops when the limit is reached. Status rows for searches without results and companies skipped by the filters are never charged. It reads a public government API over plain HTTP, so runs are fast and light on platform resources.

### Input

- **Search terms, SIREN or SIRET numbers** – what to search for. Leave search terms empty to search with filters only.
- **Departments, Regions, Postal codes** – location filters; any open establishment of the company in the location counts, or only the head office when **Head office only** is on.
- **Activity codes, Company size categories, Employee bands, Legal forms** – sector and size filters, applied to the company.
- **Minimum and maximum revenue, Minimum and maximum net result** – financial filters in euros.
- **Only active companies, Employers only, Social and solidarity economy only** – switches, each checked on every record.
- **Include company directors** – opt-in, adds names and roles.
- **Maximum results** – total limit for the run. The register search returns at most 10,000 results per search.

### Is it legal to scrape this data?

The Actor reads only open data that the French state publishes through its public company search API. It does not log in or bypass any access control. Company data is open data; directors' names are personal data, so they are off by default and you are responsible for using them in line with data protection law. This description is not legal advice.

### FAQ

**How do I find one specific company?** Paste its SIREN or SIRET number. Number lookups ignore the filters and also return closed companies and closed establishments. A SIRET lookup returns exactly that establishment.

**What if a number does not exist?** The run lists the numbers that are not in the public register in its status message and adds a free status row for each. If the input contains only numbers and none of them exists, the run fails with that list, so a scheduled run cannot turn green on a wrong input. Companies that opted out of public listing are not in the register.

**Why is revenue empty for some companies?** Many companies do not publish their accounts, and the register only holds what is filed publicly. The status message says how many returned companies have revenue.

**How fresh is the data?** Every run reads the live register.

**Can I schedule it?** Yes, use Apify schedules or call the Actor from your own workflow.

**Something looks wrong.** Open an issue with the input you used; changes at the source are fixed quickly.

### Related Actors

Other public-data Actors from the same publisher are listed on the Store profile.

# Changelog

This Actor's version history is a separate document: https://apify.com/datagrit/french-company-finder/changelog.md

# Actor input Schema

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

Company names, activities or keywords, for example boulangerie or logiciel. Each term is searched separately. Leave empty when you search by filters or by SIREN/SIRET number only. If the input has no search term, no number and no filter at all, the Actor runs a small free example search (boulangerie in department 75) and says so in the status message.

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

Look up specific companies by 9-digit SIREN or 14-digit SIRET. These lookups ignore the filters below and also return closed companies; a SIRET returns exactly that establishment. Numbers that are not in the public register get a free status row and are listed in the status message; when the input has only numbers and none exists, the run fails.

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

French department codes, for example 75 for Paris, 69 for Rhône or 2A for Corse-du-Sud. A company is returned when it has an establishment in one of these departments; with "Only active companies" on (default) that establishment must be open. The establishment is returned in the matchedEstablishment fields. Switch on "Head office only" to require the head office itself.

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

INSEE region codes, for example 11 for Île-de-France or 84 for Auvergne-Rhône-Alpes. Same rule as departments: an establishment in the region, open when "Only active companies" is on, or the head office when "Head office only" is on.

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

Postal codes, for example 75011. Same rule as departments: an establishment with this postal code, open when "Only active companies" is on, or the head office when "Head office only" is on.

## `headOfficeOnly` (type: `boolean`):

Keep only companies whose head office is in the requested departments, regions or postal codes. Off by default: any establishment of the company in the location counts.

## `activityCodes` (type: `array`):

Main activity codes in the NAF classification, for example 62.01Z for computer programming or 10.71C for bakeries.

## `companySizes` (type: `array`):

Official size category: PME (small and medium), ETI (mid-sized) or GE (large).

## `employeeBands` (type: `array`):

INSEE employee band codes, for example 11 for 10-19 employees, 12 for 20-49, 21 for 50-99, 22 for 100-199.

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

INSEE legal form codes, for example 5710 for SAS, 5499 for SARL or 5599 for SA.

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

Only companies whose latest published revenue is at least this amount. Only companies that file their accounts publicly have revenue data.

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

Only companies whose latest published revenue is at most this amount.

## `minNetResult` (type: `integer`):

Only companies whose latest net result is at least this amount. Use 1 to keep only profitable companies.

## `maxNetResult` (type: `integer`):

Only companies whose latest net result is at most this amount. Use 0 to find loss-making companies.

## `onlyActive` (type: `boolean`):

Skip companies that have ceased activity. With a location filter it also skips companies whose establishments in the location are all closed, and the status message counts them.

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

Keep only companies flagged as employers: the head office is registered as an employer or the company employee band shows at least one employee (the isEmployer field). Checked by the Actor on every record.

## `socialEconomyOnly` (type: `boolean`):

Keep only companies flagged as part of the social and solidarity economy (the isSocialEconomy field).

## `includeDirectors` (type: `boolean`):

Adds the names and roles of the directors listed in the register. Off by default because it contains personal data; when you switch it on you are responsible for using it in line with data protection law.

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

Stop after this many companies in total. The register search returns at most 10,000 results per search.

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

Optional proxy. Leave disabled: the Sirene search API is public and needs none.

## Actor input object example

```json
{
  "queries": [
    "boulangerie"
  ],
  "sirens": [],
  "departments": [
    "75"
  ],
  "regions": [],
  "postalCodes": [],
  "headOfficeOnly": false,
  "activityCodes": [],
  "companySizes": [],
  "employeeBands": [],
  "legalForms": [],
  "onlyActive": true,
  "employersOnly": false,
  "socialEconomyOnly": false,
  "includeDirectors": false,
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All extracted records as a dataset.

# 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 = {
    "queries": [
        "boulangerie"
    ],
    "departments": [
        "75"
    ],
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datagrit/french-company-finder").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 = {
    "queries": ["boulangerie"],
    "departments": ["75"],
    "maxItems": 25,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("datagrit/french-company-finder").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 '{
  "queries": [
    "boulangerie"
  ],
  "departments": [
    "75"
  ],
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call datagrit/french-company-finder --silent --output-dataset

```

## MCP server setup

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

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/ArgnHXGLu1dOJ4T7O/builds/BqOSx0kfwBRWJQdBa/openapi.json
