datagrit

datagrit › Company data › French Company Finder - Sirene Financials

Company data

French Company Finder - Sirene Financials

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

Run it on Apify StoreUse the APIfrom $5.60 per 1,000 results + $10 per run · no code needed
from $5.60 per 1,000 results + $10 per runpay only for company records you get
JSON · CSV · Excelexport or call via API
Scheduled runsdaily or weekly feeds with Apify schedules
v0.5updated 2026-09-30

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?

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.

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.

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.

Output fields

Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.

FieldTypeDescriptionExample
querystringThe search term or number this result came from; null for filter-only searches.boulangerie
sirenstringNine-digit company identifier.403052111
namestringCompany display name.BOULANGERIES PAUL
legalNamestringRegistered company name.BOULANGERIES PAUL
acronymstringRegistered acronym when there is one.
isActivebooleanTrue while the company is active, false when it has ceased activity.true
creationDatestringDate of creation, YYYY-MM-DD.1995-12-07
closureDatestringDate of cessation, YYYY-MM-DD.
legalFormCodestringINSEE legal form code.5710
legalFormstringLegal form label for the common codes; null when the code is not in the built-in list.Simplified joint-stock company (SAS)
activityCodestringMain activity code, NAF rev. 2.10.71A
sectionCodestringLetter of the activity section.C
companySizestringPME, ETI or GE.ETI
employeeBandCodestringINSEE employee band code.41
employeeBandstringEmployee band label.500-999 employees
employeeBandYearnumberYear the employee band refers to.2023
establishmentsnumberNumber of establishments ever registered.315
establishmentsOpennumberNumber of establishments currently open.125
headOfficeSiretstringFourteen-digit identifier of the head office.40305211102616
addressstringHead office address.344 AVENUE DE LA MARNE 59700 MARCQ-EN-BARŒUL
postalCodestringHead office postal code.59700
citystringHead office city.MARCQ-EN-BARŒUL
departmentCodestringDepartment code of the head office.59
regionCodestringINSEE region code of the head office.32
latitudenumberHead office latitude.50.678029398
longitudenumberHead office longitude.3.1169136021
vatNumberstringIntra-community VAT number.FR32403052111
revenuenumberLatest published revenue in EUR.73611839
revenueYearnumberFinancial year of the latest revenue.2024
netResultnumberLatest net result in EUR.-2197350
netMarginPctnumberNet result divided by revenue.-3
isSocialEconomybooleanPart of the social and solidarity economy.false
isOrganicbooleanRegistered in the organic agency register.false
isEmployerbooleanTrue when the head office is registered as an employer or the company employee band shows at least one employee; false when the head office is registered as a non-employer or the band says the company has no employees; null when the register has neither.true
isAssociationbooleanIs an association.false
matchedEstablishmentSiretstringEstablishment in your location filter (or the SIRET you looked up); empty when no location filter is used. The head office is used when it is in the location; otherwise another establishment there. It can differ from the head office.32868651400105
matchedEstablishmentAddressstringAddress of the matched establishment.17 AV CHARLES DE GAULLE 69370 SAINT-DIDIER-AU-MONT-D OR
matchedEstablishmentPostalCodestringPostal code of the matched establishment.69370
matchedEstablishmentCitystringCity of the matched establishment.SAINT-DIDIER-AU-MONT-D OR
matchedEstablishmentDepartmentstringDepartment of the matched establishment, from its INSEE commune code.69
matchedEstablishmentRegionstringINSEE region code of the matched establishment.84
matchedEstablishmentIsHeadOfficebooleanTrue when the matched establishment is the head office.false
matchedEstablishmentIsActivebooleanWhether the matched establishment is open. Always true while "Only active companies" is on (companies whose establishments in the location are all closed are skipped); can be false when you switch that option off or look up the SIRET of a closed establishment.true
matchedEstablishmentClosureDatestringClosure date of the matched establishment, YYYY-MM-DD; null while it is open.
matchedEstablishmentsListedintegerNumber of establishments of this company in the location found in the register response (the head office plus the matching establishments). The Actor asks the register for up to 100 matching establishments per company, so 100 means 100 or more. Empty when no location filter is used.1
directorCountnumberNumber of directors listed in the register (names only when requested).4
directorsstringNames and roles joined with semicolons; only when directors are requested.
sourceUrlstringPublic company page.https://annuaire-entreprises.data.gouv.fr/entreprise/403052111
updatedAtstringLast update of the record in the register.2026-09-17T04:38:04
foundbooleanFalse only for the single status row emitted when a search has no results.true
scrapedAtstringISO 8601 timestamp of extraction.2026-09-30T08:00:00.000Z

Sample record

{
  "query": "boulangerie",
  "siren": "403052111",
  "name": "BOULANGERIES PAUL",
  "legalName": "BOULANGERIES PAUL",
  "acronym": null,
  "isActive": true,
  "creationDate": "1995-12-07",
  "closureDate": null,
  "legalFormCode": "5710",
  "legalForm": "Simplified joint-stock company (SAS)",
  "activityCode": "10.71A",
  "sectionCode": "C",
  "companySize": "ETI",
  "employeeBandCode": "41",
  "employeeBand": "500-999 employees",
  "employeeBandYear": 2023,
  "establishments": 315,
  "establishmentsOpen": 125,
  "headOfficeSiret": "40305211102616",
  "address": "344 AVENUE DE LA MARNE 59700 MARCQ-EN-BARŒUL",
  "postalCode": "59700",
  "city": "MARCQ-EN-BARŒUL",
  "departmentCode": "59",
  "regionCode": "32",
  "latitude": 50.678029398,
  "longitude": 3.1169136021,
  "vatNumber": "FR32403052111",
  "revenue": 73611839,
  "revenueYear": 2024,
  "netResult": -2197350,
  "netMarginPct": -3,
  "isSocialEconomy": false,
  "isOrganic": false,
  "isEmployer": true,
  "isAssociation": false,
  "matchedEstablishmentSiret": "32868651400105",
  "matchedEstablishmentAddress": "17 AV CHARLES DE GAULLE 69370 SAINT-DIDIER-AU-MONT-D OR",
  "matchedEstablishmentPostalCode": "69370",
  "matchedEstablishmentCity": "SAINT-DIDIER-AU-MONT-D OR",
  "matchedEstablishmentDepartment": "69",
  "matchedEstablishmentRegion": "84",
  "matchedEstablishmentIsHeadOffice": false,
  "matchedEstablishmentIsActive": true,
  "matchedEstablishmentClosureDate": null,
  "matchedEstablishmentsListed": 1,
  "directorCount": 4,
  "directors": null,
  "sourceUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/403052111",
  "updatedAt": "2026-09-17T04:38:04",
  "found": true,
  "scrapedAt": "2026-09-30T08:00:00.000Z"
}

Input

FieldNameTypeWhat it does
queriesSearch termsarrayCompany 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.
sirensSIREN or SIRET numbersarrayLook 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.
departmentsDepartmentsarrayFrench 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.
regionsRegionsarrayINSEE 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.
postalCodesPostal codesarrayPostal 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.
headOfficeOnlyHead office onlybooleanKeep 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.
activityCodesActivity codes (NAF)arrayMain activity codes in the NAF classification, for example 62.01Z for computer programming or 10.71C for bakeries.
companySizesCompany size categoriesarrayOfficial size category: PME (small and medium), ETI (mid-sized) or GE (large).
employeeBandsEmployee bandsarrayINSEE employee band codes, for example 11 for 10-19 employees, 12 for 20-49, 21 for 50-99, 22 for 100-199.
legalFormsLegal formsarrayINSEE legal form codes, for example 5710 for SAS, 5499 for SARL or 5599 for SA.
minRevenueMinimum revenue (EUR)integerOnly companies whose latest published revenue is at least this amount. Only companies that file their accounts publicly have revenue data.
maxRevenueMaximum revenue (EUR)integerOnly companies whose latest published revenue is at most this amount.
minNetResultMinimum net result (EUR)integerOnly companies whose latest net result is at least this amount. Use 1 to keep only profitable companies.
maxNetResultMaximum net result (EUR)integerOnly companies whose latest net result is at most this amount. Use 0 to find loss-making companies.
onlyActiveOnly active companiesbooleanSkip 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.
employersOnlyEmployers onlybooleanKeep 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.
socialEconomyOnlySocial and solidarity economy onlybooleanKeep only companies flagged as part of the social and solidarity economy (the isSocialEconomy field).
includeDirectorsInclude company directorsbooleanAdds 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.
maxItemsMaximum resultsintegerStop after this many companies in total. The register search returns at most 10,000 results per search.
proxyConfigurationProxy configurationobjectOptional proxy. Leave disabled: the Sirene search API is public and needs none.

Call it from your code

Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.

curl -X POST "https://api.apify.com/v2/acts/datagrit~french-company-finder/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["logiciel"],"departments":["69"],"minRevenue":1000000,"maxItems":25}'
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/french-company-finder').call({
  "queries": [
    "logiciel"
  ],
  "departments": [
    "69"
  ],
  "minRevenue": 1000000,
  "maxItems": 25
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Install with npm i apify-client.

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/french-company-finder").call(run_input={
  "queries": [
    "logiciel"
  ],
  "departments": [
    "69"
  ],
  "minRevenue": 1000000,
  "maxItems": 25
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)

Install with pip install apify-client.

Frequently asked questions

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.

Try French Company Finder - Sirene Financials on Apify

Related Actors

Jobs & salaries

Career Site Jobs Aggregator - ATS Salary Data

Open jobs from Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Recruitee and Personio in one schema with normalized salaries.

from $2.80 / 1,000 results