You need a list of French companies by NAF code: every company in one activity, maybe in one department, as a spreadsheet. But the portals are mostly in French, INSEE's Sirene API needs an account and its own query syntax, and the bulk files hold the whole register. For single lookups by SIREN or SIRET, see the related guide, the SIREN lookup API tutorial. This page covers exporting French companies by industry with France Company Search (SIRENE), an Apify Actor, with no API key.
This Actor is independent: it is not affiliated with or endorsed by INSEE, DINUM or the French government, and is not a government service.
NAF codes in 30 seconds
- NAF (Nomenclature d'activités française) is the French classification of economic activities, built on the European NACE.
- APE code (activité principale exercée) is the code INSEE assigns to a company or establishment by reference to the NAF.
- Format: for example
62.01Z(computer programming).
Find your code: search the NAF by keyword on INSEE's Nomenclature d'activités française page (in French).
NAF 2025: what changes on 1 January 2027
NAF 2025, nested in the European NACE Rev. 2.1, replaces NAF rév. 2. According to INSEE's NAF 2025 page and its Sirene open data newsletter:
- New reference from 1 January 2027. NAF 2025 becomes the reference nomenclature for assigning APE codes. It was approved by Décret n° 2025-736 du 31 juillet 2025.
- All active units are recoded. Every active legal unit in Sirene (companies, associations, local authorities) and its establishments gets a modified APE code. The format stays 4 digits and a letter, but no code is shared between the two versions.
- A correspondence table exists. INSEE's NAF rév. 2 to NAF 2025 table (January 2026 edition) marks each link "Unique" or "Multiple", so some old codes split.
62.01Zhas a "Unique" correspondence: it maps only to62.10Y. - Businesses can check their future code on sirene.gouv.fr during 2026 with their SIREN and ask for a correction if needed (see also service-public R75416, in French).
CRM fields, segments and saved searches built on NAF codes will need remapping, and where an old code splits, you want each company's own future code.
How France Company Search handles this: the nafCodes filter takes current NAF rév. 2 codes only, such as 62.01Z (6201Z is also accepted). Each record carries nafCode (the current rév. 2 code) and nafCode2025 (the company's future NAF 2025 code) side by side. You filter with today's code and read the 2027 code from the output, so one export gives you the old to new mapping for your own list.
Step-by-step: list companies by NAF code
- Open France Company Search (SIRENE), click Try for free and sign in. No French API key is needed. Clear the pre-filled SIREN numbers.
- In NAF codes (
nafCodes), add your current code, for example["62.01Z"]. The filter applies to the legal unit's main activity. - Optional: in Departments (
departments), add a code, for example["48"](Lozère). It matches any establishment, not only the head office;matchedEstablishmentSiretsshows which matched. - Optional: set Status (
status) to"active"to leave out ceased companies. The default is"any". - Set Max companies (
maxItems, 1 to 10,000) to cap how many companies are output and charged. - Click Start, then open the dataset and click Export for CSV or JSON.
Sample input and output
This is the input of a live run on 15 October 2026 at 16:07 (UTC+8):
{"nafCodes": ["62.01Z"], "departments": ["48"], "maxItems": 5} status was left at its default ("any"). The run returned 5 companies. Two were sole traders (isIndividualEntrepreneur: true), whose company names are personal names, so they are not shown. Both had their head office outside Lozère and matched through an establishment in department 48. The other 3 had their head office in department 48.
Here is one of those 3 records, shortened, with the street address removed (town kept); other shown values are unchanged:
{ "siren": "892371139", "name": "SOLARIS BI", "status": "active", "creationDate": "2021-01-02", "nafCode": "62.01Z", "nafCode2025": "62.10Y", "legalFormCode": "5710", "companyCategory": "PME", "headOffice": {"city": "MARVEJOLS", "department": "48"}, "matchedEstablishmentSirets": ["89237113900015", "89237113900023"], "isIndividualEntrepreneur": false, "diffusionStatus": "O", "annuaireUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/892371139", "sourceUpdatedAt": "2026-10-14T08:09:07" } Note the pair "nafCode": "62.01Z" and "nafCode2025": "62.10Y". All 5 records in this run carry it, matching INSEE's correspondence table. Both of this company's establishments in department 48 appear in matchedEstablishmentSirets.
To drop sole traders and build your old to new mapping, load the JSON export with pandas, keeping IDs and codes as strings so leading zeros survive:
import pandas as pd df = pd.read_json("dataset.json", dtype={"siren": str, "legalFormCode": str}) companies = df[df["isIndividualEntrepreneur"] == False] mapping = companies.groupby(["nafCode", "nafCode2025"]).size().reset_index(name="companies") print(mapping) companies.drop(columns=["dirigeants"]).to_json("companies.json", orient="records", force_ascii=False) On this run's export, mapping has one row: 62.01Z, 62.10Y, 3 companies. companies.json keeps the 3 non sole trader records.
Narrowing big segments
Each query scans at most 10,000 results. For a large code such as 62.01Z across France, split the job by department or postcode (postalCodes), or use a more specific code. When a query hits the cap, RUN-STATS warns you.
Use cases
- Market sizing: count companies by activity and region, optionally by creation date (
incorporatedFrom,incorporatedTo). - KYB and supplier vetting: check status and legal form across a sector.
- Remapping before NAF 2025: export your current segments and rebuild them with
nafCode2025. - Company-level lead lists, within the rules: sole traders' names are personal data, and units with
diffusionStatus = "P"must not be used for marketing or prospecting. You are the data controller and B2B prospecting must follow GDPR and CNIL rules (see the CNIL's guidance on electronic commercial prospecting, in French). This is not legal advice.
Cost
$0.003 per company written to the dataset ($3 per 1,000 companies). Worked example: 2,000 companies = 2,000 x $0.003 = $6.00.
FAQ
How do I get a list of all companies with a given NAF code in France?
In France Company Search, put the code (e.g. 62.01Z) in nafCodes, optionally add a department, and export CSV or JSON.
What is the difference between a NAF code and an APE code?
NAF is the French classification of activities; the APE code is the NAF code INSEE assigns to a company or establishment for its main activity.
What is NAF 2025?
The new French activity classification. From 1 January 2027 it becomes the reference for APE codes, and all active units in Sirene get an updated code.
How do I find a company's new NAF 2025 code?
During 2026, a business can check its future code on sirene.gouv.fr with its SIREN. For a list, France Company Search returns nafCode2025 next to the current nafCode in each record.
Can I search by NAF 2025 codes?
No. Filter with the current rév. 2 code and read the new code from nafCode2025.
Can I filter by department and NAF code together?
Yes. Combine nafCodes and departments. The department filter matches any establishment, so the head office can be elsewhere.
Do I need an INSEE API key?
No. The tool reads the keyless public API Recherche d'entreprises.
How much does it cost?
$0.003 per company returned, i.e. $3 per 1,000 companies.
Get started
Enter the current NAF code, add a department if needed, run and export; each record already shows its NAF 2025 code. Try France Company Search (SIRENE) on Apify, and for SIREN and SIRET lookups and API calls, read the SIREN lookup API tutorial.
Data: Annuaire des Entreprises / API Recherche d'entreprises (DINUM), INSEE Sirene and other French public registers, reused under Licence Ouverte 2.0.
This Actor is independent: it is not affiliated with or endorsed by INSEE, DINUM or the French government, and is not a government service.