← Blog

Company data

Pappers Scraper: Export French Company Data by SIREN and NAF

Export French company data from Pappers.fr in bulk: SIREN, NAF code, directors, revenue, establishments and BODACC publications. Inputs, output and API code.

Epic Scrapers

Pappers.fr is the easiest place to look up a French company. It combines INSEE’s SIRENE register, the RCS (Registre du Commerce et des Sociétés), BODACC legal announcements and filed accounts into one profile per SIREN. Looking up one company is free and fast. Exporting 3,000 companies matching a department and NAF code is not, unless you script it.

The Pappers Scraper does that export. You build a search on pappers.fr/recherche, paste the URL, and get back one full company profile per result: identifiers, legal form, NAF code, head office, every establishment, directors, beneficial owners, headcount range, revenue and profit when published, and BODACC publications.

What you can extract from Pappers

Each dataset row is a company profile. The most useful fields:

Category Fields
Identifiers siren, siren_formate, siege.siret, diffusable
Names nom_entreprise, denomination, plus nom / prenom for sole traders
Legal status forme_juridique, categorie_juridique, statut_rcs, statut_consolide, date_creation, date_cessation
Activity code_naf, libelle_code_naf, domaine_activite, conventions_collectives
Size and finances capital, effectif, effectif_min, effectif_max, chiffre_affaires, resultat, annee_finances
Locations siege (address, postcode, city, coordinates), etablissements, villes
People dirigeants (role, name, start date, current or past), beneficiaires
Filings publications (BODACC), documents, nb_publications_total, nb_documents_total
Traceability source (the search URL) or query (the keyword) that found the company

How to scrape Pappers, step by step

  1. Go to pappers.fr/recherche and apply filters: département, commune, NAF code, company status, and so on.
  2. Copy the URL from your browser.
  3. Open the Pappers Scraper on Apify and paste it into Search URLs.
  4. Set Max Results Per Query/URL (maxResults). Use 50 for a test, 0 for everything.
  5. Run, then export as CSV, Excel or JSON.

Input from a filtered search URL

This is the recommended mode because Pappers’ own filter UI does the hard part. Every URL parameter (departement, commune, code_naf, etat, and so on) is passed straight through to the search. Here: software publishing and IT consulting companies (NAF 62.01Z) in Paris (département 75).

{
  "searchUrls": [
    "https://www.pappers.fr/recherche?departement=75&code_naf=62.01Z"
  ],
  "maxResults": 500
}

Input from plain keywords

queries runs a free-text search across the bases you choose. bases is a comma-separated string of entreprises, dirigeants and publications. precision is either standard (broader matches) or strict (exact matches only).

{
  "queries": ["boulangerie lyon", "torréfaction café"],
  "bases": "entreprises",
  "precision": "strict",
  "maxResults": 200
}

You can combine both modes in one run. URLs are processed first, then queries, and everything lands in one dataset. maxResults applies per URL or query, not to the run as a whole. precision and bases only affect keyword queries, because a URL carries its own parameters.

The actor picks a pagination strategy from maxResults: from 1 to 400 it uses faster page-based pagination; 0 (unlimited) or anything above 400 switches to cursor-based pagination with no hard cap.

Sample output

Trimmed record:

{
  "source": "https://www.pappers.fr/recherche?departement=75&code_naf=62.01Z",
  "siren": "503826968",
  "siren_formate": "503 826 968",
  "nom_entreprise": "AMD RENTAL",
  "denomination": "AMD RENTAL",
  "personne_morale": true,
  "forme_juridique": "SARL, société à responsabilité limitée",
  "statut_rcs": "Inscrit",
  "statut_consolide": "actif",
  "date_creation": "2008-01-15",
  "code_naf": "62.01Z",
  "libelle_code_naf": "Programmation informatique",
  "capital": 10000,
  "effectif": "Entre 10 et 19 salariés",
  "chiffre_affaires": 1842300,
  "resultat": 96400,
  "annee_finances": 2024,
  "siege": {
    "siret": "50382696800015",
    "adresse_ligne_1": "12 RUE DE LA PAIX",
    "code_postal": "75002",
    "ville": "PARIS"
  },
  "dirigeants": [
    {
      "qualite": "Gérant",
      "nom_complet": "Jean DUPONT",
      "actuel": true,
      "personne_morale": false
    }
  ],
  "publications": [
    {
      "date": "2012-01-17",
      "type": "Modification",
      "contenu": "Modification Bodacc B n°20120011"
    }
  ],
  "nb_publications_total": 7
}

Financial fields are filled when the company published its accounts and did not opt for confidentiality, so expect chiffre_affaires and resultat to be empty for many small companies.

Pappers data via the API

Trigger the actor from your own code with the Apify API. Keep your token in APIFY_TOKEN.

cURL:

curl -X POST \
  "https://api.apify.com/v2/acts/epicscrapers~pappers-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchUrls": ["https://www.pappers.fr/recherche?departement=69&code_naf=56.10A"], "maxResults": 100}'

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('epicscrapers/pappers-scraper').call({
  searchUrls: ['https://www.pappers.fr/recherche?departement=33&code_naf=43.22A'],
  maxResults: 0,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
const leads = items
  .filter((c) => c.statut_consolide === 'actif' && (c.effectif_min ?? 0) >= 10)
  .map((c) => ({ siren: c.siren, name: c.nom_entreprise, city: c.siege?.ville, ca: c.chiffre_affaires }));

console.log(leads);

Use cases

French B2B lead lists. Filter by NAF code and département on Pappers, export everything, then segment on effectif_min and chiffre_affaires. The dirigeants array gives you the gérant or président to address, and siege gives a clean address for mailing or territory mapping.

Supplier and client due diligence. Check statut_consolide, date_cessation, the latest publications (BODACC procedures, transfers, dissolutions) and beneficiaires before signing. Schedule a weekly run on a list of SIRENs to catch status changes.

M&A and investor screening. Find companies in a niche with stable revenue and a long history (date_creation), then look at director tenure (date_prise_de_poste) to spot founder-led businesses that may face succession.

Market mapping. Count active companies per NAF code per city using villes and etablissements, or track new creations in a sector month over month.

Competitor monitoring. Search by competitor name with "precision": "strict" and watch for new establishments, capital changes, or BODACC announcements.

Working on other countries? See our guides to the Brazilian CNPJ register and the German Bundesanzeiger.

FAQ

Does Pappers have an API?

Yes. Pappers sells direct API access with its own token and paid plans. The Pappers Scraper is a no-code alternative: you don’t need a Pappers API token in the input, you can reuse search URLs from the website, and results go straight into an Apify dataset you can export or schedule.

The actor collects publicly diffusable company information that originates from French official registers (INSEE, RCS, BODACC). Companies marked non-diffusable are not exposed. Director and beneficial-owner data is personal data under GDPR, so only process it with a legitimate purpose and respect Pappers’ terms of service. This is not legal advice.

Can I export by département, city or NAF code?

Yes. Set those filters on pappers.fr/recherche, copy the URL into searchUrls, and every filter is preserved.

What is the difference between SIREN and SIRET?

SIREN is the 9-digit identifier of the company. SIRET is 14 digits: the SIREN plus a 5-digit NIC identifying one establishment. You get the SIREN on every record and a SIRET for the head office (siege.siret) and each entry in etablissements.

Does it include auto-entrepreneurs?

Yes. Sole traders are returned too, with personne_morale: false and their nom and prenom.

Export your first Pappers list

Build one filtered search on Pappers, paste the URL, set maxResults to 50 and run it. Open the Pappers Scraper on Apify or see the actor page for details.