France Company & SIRET Search avatar

France Company & SIRET Search

Pricing

from $7.20 / 1,000 company records

Go to Apify Store
France Company & SIRET Search

France Company & SIRET Search

Look up French companies by SIREN, SIRET or VAT number, or search by name with department, NAF and status filters. Official Sirene data with legal form, NAF, head office, establishments and clear not-found status.

Pricing

from $7.20 / 1,000 company records

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Share

France Company & SIRET Search looks up French companies in the official Sirene directory. Add SIREN, SIRET or French VAT numbers, or search by company name with department, postal code, NAF code and status filters. You get one clean row per company, with legal form, NAF activity, size, dates, head office and a clear status: active, ceased or not found.

It is made for KYB checks, CRM cleaning and B2B lead lists. No login and no API key are needed. A typical run of three SIREN numbers finishes in a few seconds and costs about $0.024.

France Company & SIRET Search: SIREN, SIRET or VAT in, official company record and establishments out, with active, ceased or not found status

Contents

What it does

The Actor reads the public Recherche d'entreprises API of the French administration. This API serves INSEE Sirene and INPI RNE data. The Actor has two modes:

  • Identifier lookup. Each SIREN, SIRET or VAT number is an exact match. A SIRET also returns that establishment. A wrong or unknown number returns a not_found row, so no input is lost.
  • Name search. A full-text search on company names, brands and addresses, with filters. Results are ranked by the source. Check siren and name before you use a search result as a verified match.

Optionally, the Actor adds one row per establishment (SIRET): address, status, head-office flag, NAF code and trade names.

Good fit

  • Check that a supplier or customer exists and is still active (KYB, onboarding).
  • Fill CRM records with the official name, legal form, NAF code, VAT number and head office.
  • Build a list of companies in a department or with a NAF code.
  • Find the open and closed establishments of a company.

Not a fit

  • Directors, shareholders, phone numbers or emails. The Actor does not output them. Note: a sole trader (entrepreneur individuel) is registered under a person's name, and Sirene shows that name as the company name, unless the person hid it.
  • Companies that asked to hide their data (non-diffusible). The public API does not serve them.
  • A full copy of the Sirene database. Use the official Sirene files for bulk downloads.
  • Legal certificates such as a Kbis extract.

Quick start

  1. Open the Input tab. The form already has three SIREN numbers: EDF, TotalEnergies and LVMH.
  2. Click Start.
  3. Open the Companies view in the Output tab. Check name, administrativeStatus and headOfficeAddress.
  4. Replace the numbers with your own list (up to 100). Turn on Include establishments if you need SIRET rows.

Expected result: three complete company rows in a few seconds.

Use cases

Buyer jobInputOutputKey fields
Verify a company (KYB)identifierscompany rowstatus, administrativeStatus, closureDate, legalFormLabel
Clean CRM recordsidentifiers (SIREN, SIRET or VAT)company rowname, vatNumber, nafCode, headOfficeAddress
Map a company's sitesidentifiers + includeEstablishmentsestablishment rowssiret, address, administrativeStatus, isHeadOffice
Prospect list by area and activityquery + departments / nafCodescompany rowsname, employeeRangeLabel, companyCategory, searchRank

Input

Use either identifiers or a search (query and filters) in one run. A run with both is rejected with INVALID_INPUT.

FieldTypeDefaultAllowed valuesWhat it does
identifiersarray of stringsnone (form example: 3 SIREN)up to 100; SIREN (9 digits), SIRET (14 digits), French VAT (FR + 2 characters + SIREN)Exact lookup. Spaces, dots and dashes are ignored. The same number written twice (or a SIREN and its VAT number) is looked up once. A SIREN and a SIRET of the same company are two lookups.
querystringnone3–200 characters, or shorter with a filterFuzzy search on names, brands and addresses.
departmentsarray of stringsemptyup to 20; 01–95, 2A, 2B, 971–976Keeps companies with at least one establishment in these departments.
postalCodesarray of stringsemptyup to 20; 5 digitsKeeps companies with at least one establishment in these postal codes.
nafCodesarray of stringsemptyup to 20; NAF rev. 2 codes like 62.01Z or 6201ZActivity filter. Unknown codes and NAF 2025 codes are rejected with INVALID_INPUT.
companyStatusstringanyany, active, ceasedCompany status filter for search.
maxResultsinteger251–100Maximum companies in a search.
includeEstablishmentsbooleanfalseAdds establishment (SIRET) rows.
maxEstablishmentsPerCompanyinteger201–100Maximum establishment rows per company.

Filters belong to search mode and cannot be combined with identifiers. With identifiers, the number already selects one company.

Input examples

Lookup with establishments:

{
"identifiers": ["552100554", "55208131701156", "FR03552081317"],
"includeEstablishments": true,
"maxEstablishmentsPerCompany": 10
}

Search for active bakeries in Paris:

{
"query": "boulangerie",
"departments": ["75"],
"companyStatus": "active",
"maxResults": 30
}

Output

Each Dataset row has recordType: company or establishment. Use the Companies and Establishments views, or filter on recordType in your export. The key-value store has a RUN_SUMMARY record with the run status and counts.

Row status

statusMeaningCharged
completeThe record was found. Fields are as complete as the public data allows.yes
partialThe company was found, but a requested SIRET was not found, or extra establishments could not be listed. Read statusReason.yes
not_foundThe number is not in the public index: unknown, hidden (non-diffusible) or not yet indexed. A ceased company is not not_found: it is complete with administrativeStatus: "ceased".not-found price
errorNot a valid identifier (INVALID_IDENTIFIER) or a source failure (RATE_LIMITED, SOURCE_UNAVAILABLE, …).no

Company fields

FieldMeaningExample
input, inputTypeYour value and its type (siren, siret, search, invalid)"55208131701156", "siret"
matchedBysiren_exact, siret_exact or search"siret_exact"
checksumValidINSEE checksum of your number; false usually means a typotrue
searchRank, searchQueryPosition and query in search mode, else null1
siren, name, legalName, acronymCompany number and names"552081317", "ELECTRICITE DE FRANCE (EDF)"
legalFormCode, legalFormLabelINSEE legal category"5599", "SA à conseil d'administration (s.a.i.)"
nafCode, nafVersion, nafLabelMain activity, NAF rev. 2"35.11Z", "NAFRev2", "Production d’électricité"
naf2025CodeMain activity in the new NAF 2025, kept separate; can be null"35.11Y"
nafSectionCode, nafSectionLabelNAF section"D"
employeeRangeCode, employeeRangeLabel, employeeRangeYearINSEE headcount band and its year"53", "10 000 salariés et plus", 2024
companyCategory, companyCategoryYearPME, ETI or GE"GE"
creationDate, closureDateDates in YYYY-MM-DD"1955-01-01", null
administrativeStatus, administrativeStatusCodeactive (A) or ceased (C)"active"
diffusionStatus, hiddenFieldspartial when some data is hidden by law; hidden fields are null and listed"partial", ["headOffice.adresse"]
vatNumberIntra-EU VAT number as given by the source; null if the source has none"FR03552081317"
isIndividualEntrepreneur, isAssociation, isSocialEconomySource flagsfalse
isEmployerEmployer flag at company level; the source often leaves it empty, so it is usually null. Use the establishment isEmployer instead.null
latestFinancialYear, revenueEur, netIncomeEurLatest published accounts, when the company files them2024, 118690000000
establishmentsTotal, establishmentsOpenAll known establishments and open ones9158, 3551
establishmentsReturned, establishmentsComplete, establishmentsScopeHow many establishment rows this run returned, and whether that is the full list20, false, "name_matched_subset"
headOfficeSiret, headOfficeAddress, headOfficePostalCode, headOfficeCity, headOfficeCommuneCode, headOfficeDepartment, headOfficeRegion, headOfficeLatitude, headOfficeLongitude, headOfficeStatusHead office"55208131766522", "22-30 22 AVENUE DE WAGRAM 75008 PARIS"
annuaireUrlPublic page on annuaire-entreprises.data.gouv.fr
status, statusReason, errorCodeRow result, see above
source, sourceUrl, fetchedAt, sourceUpdatedAt, sourceUpdatedAtInsee, sourceUpdatedAtRneProvenance and update dates

Establishment fields

siret, siren, companyName, isHeadOffice, wasHeadOffice, administrativeStatus (active or closed), administrativeStatusCode (A or F), creationDate, activityStartDate, closureDate, address, postalCode, city, communeCode, department, region, latitude, longitude, nafCode, nafVersion, nafLabel, naf2025Code, employeeRangeCode, employeeRangeLabel, employeeRangeYear, isEmployer, tradeNames, commercialName, diffusionStatus, hiddenFields, matchedBy, annuaireUrl, status, statusReason, errorCode, input, source, sourceUrl, fetchedAt.

matchedBy tells where the row comes from: siret_exact (your SIRET), head_office, company_establishments (listed for your SIREN) or search_match (matched your search).

Output example

A trimmed company row for a ceased company:

{
"recordType": "company",
"status": "complete",
"input": "552100554",
"matchedBy": "siren_exact",
"siren": "552100554",
"name": "PEUGEOT SA",
"legalFormLabel": "SA à directoire (s.a.i.)",
"nafCode": "70.10Z",
"nafVersion": "NAFRev2",
"naf2025Code": null,
"administrativeStatus": "ceased",
"creationDate": "1955-01-01",
"closureDate": "2021-01-16",
"vatNumber": null,
"establishmentsTotal": 5,
"establishmentsOpen": 0,
"headOfficeSiret": "55210055400054",
"headOfficeCity": "VELIZY-VILLACOUBLAY",
"headOfficeStatus": "closed",
"annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/552100554",
"sourceUpdatedAt": "2026-10-08T09:06:03"
}

null means the source has no value. It never means zero.

Run summary

RUN_SUMMARY.status is one of COMPLETE, PARTIAL, NOT_FOUND (no identifier was found), NO_RESULTS (empty search), CAPPED (stopped at a limit), ERROR, INVALID_INPUT or CANCELLED. counts shows rows by status and charged rows. source names the data licence.

Pricing

Pay per event. Platform usage is included.

EventPriceWhen
Actor start$0.002Once per run (per GB of memory; the default 256 MB counts once)
Company record$0.0072Each complete or partial company row
Not-found lookup$0.001Each not_found company row
Establishment record$0.0003Each complete establishment row

error rows are free. An empty search costs only the start.

RunExample cost
3 SIREN (form example)$0.0236
10 SIREN$0.074
100 SIREN$0.722
100 SIREN with establishments (1,854 rows in our test)$1.278
100 unknown numbers$0.102

Set a maximum cost per run in the run options to cap your spend. The Actor stops before a paid row that does not fit and reports CAPPED.

Limits

  • Up to 100 identifiers per run, or up to 100 companies per search.
  • Up to 100 establishments per company. The source cannot list more. Check establishmentsComplete: in our test of 100 transport companies, 96 had their full list.
  • In search mode, establishments are the ones that matched your search or filters, not all establishments of the company.
  • The Actor sends at most about 3 requests per second. The source allows 7 per second per IP and shares a limit across cloud providers, so a busy moment can give RATE_LIMITED rows. Run them again later.
  • Internal time budget is 240 seconds. 100 identifiers with establishments took 94 seconds in our test.
  • naf2025Code is a temporary field of the source. The source says it may be removed after 2027-01-01.

API and integrations

Start a run with the same JSON input through the Apify API (POST /v2/acts/cliqtomedia~france-sirene-company-search/runs), then read the Dataset. Export to CSV, Excel or JSON from the Dataset, or connect the run to other tools with the usual Apify integrations.

Join rows on siren (company) and siret (establishment). For CSV, use the Companies or Establishments view.

There is no built-in monitoring mode. To re-check the same list regularly, create an Apify schedule for a saved task and compare administrativeStatus or sourceUpdatedAt between runs.

Use with AI agents (MCP)

AI agents can call this Actor through the Apify MCP server: add https://mcp.apify.com?tools=cliqtomedia/france-sirene-company-search to your MCP client (Claude, Cursor, VS Code and others). The MCP server needs your Apify account (OAuth sign-in or an Apify API token); the data source itself needs no key. The agent builds the input from the input schema. The smallest useful input:

{ "identifiers": ["552081317"] }

Key output fields for an agent: status (complete, not_found, …), name, administrativeStatus (active or ceased), legalFormLabel, nafCode, vatNumber, headOfficeAddress. A call with 10 numbers usually finishes in well under 30 seconds and costs about $0.074; up to 100 numbers or 100 search results fit in one run. A large run (100 numbers, around 45 seconds) can outlast the MCP call wait, so the agent may need to poll the run for its result. Search results are fuzzy, so an agent should verify a company by SIREN or SIRET.

Troubleshooting

SymptomCheckAction
not_found for a real companychecksumValidfalse means a typo. If true, the company may be non-diffusible or very new.
A ceased companyadministrativeStatus, closureDateThis is correct data, not an error.
Address is nulldiffusionStatus, hiddenFieldsThe company hides some data by law.
RATE_LIMITED rowsRUN_SUMMARY.http.rateLimitedRun the failed identifiers again later.
Fewer establishments than establishmentsTotalestablishmentsComplete, maxEstablishmentsPerCompanyRaise the limit up to 100. Above 100, the source gives a subset.
INVALID_INPUTRUN_SUMMARY.messageCommon causes: identifiers and a search in one run; no valid SIREN/SIRET/VAT in the list; an unknown NAF code; a search query shorter than 3 characters without a filter.

FAQ

Do I need an API key or a French account?

No. The source is open and free. You only need your Apify account.

Is a search result a verified match?

No. Search is fuzzy. For verification, use the SIREN or SIRET. Exact lookups show matchedBy: "siren_exact" or "siret_exact".

Why are directors not included?

They are personal data. This Actor gives company data only. Sole traders still appear under their registered name.

How fresh is the data?

Each run reads the source live. Each row has fetchedAt (our read time) and sourceUpdatedAt (the source update time of that record).

Can I use the data commercially?

The Sirene data is published under the French Licence Ouverte 2.0, which allows commercial reuse with attribution. See below.

Data source and licence

Data: API Recherche d'entreprises (DINUM, annuaire-entreprises.data.gouv.fr), built on INSEE Sirene and INPI RNE data, under the Licence Ouverte / Etalab 2.0. When you reuse the data, name the source and the update date (sourceUpdatedAt). This Actor is independent and not endorsed by INSEE, INPI or the French administration.

Support

Use the Issues tab of this Actor. Add the run ID, the mode (identifiers or search) and the statusReason or errorCode you saw. Do not send API tokens or private data.