Experts-Comptables Annuaire Scraper - French Accountant Leads avatar

Experts-Comptables Annuaire Scraper - French Accountant Leads

Pricing

from $1.80 / 1,000 per cabinet row returneds

Go to Apify Store
Experts-Comptables Annuaire Scraper - French Accountant Leads

Experts-Comptables Annuaire Scraper - French Accountant Leads

$1.80 per 1,000 cabinets, no start fee. Every cabinet on the Ordre des experts-comptables public annuaire: phone (on 92-98% of profiles, measured), website, street address, GPS, entity type, named experts-comptables. By commune, department, region or all France. Optional audited SIREN join.

Pricing

from $1.80 / 1,000 per cabinet row returneds

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

7 days ago

Last modified

Share

Experts-Comptables Annuaire Scraper — French accountant leads from the Ordre

Export every accounting firm inscribed on the Tableau of the Ordre des experts-comptables from its public annuaire (annuaire.experts-comptables.org) as a lead list: phone, website, street address, GPS, entity type, the named experts-comptables, languages, opening hours and social links — by commune, department, region or all of France. Optional SIREN / SIRET join against the State's open business register, audited row by row.

$1.80 per 1,000 cabinets. No start fee. A cabinet that publishes neither a phone nor a website is skipped and never charged.

Who buys this

You areWhat you do with it
Accounting / fintech SaaS partner team (bookkeeping, e-invoicing, cash management)Recruit cabinets into a partner or reseller programme, by region
Payroll / HR software, insurers, banksBuild a cabinet-partner channel; phone every firm in a department
B2B data teamsA clean national file keyed on the annuaire id, refreshed on demand
Market analystsCount and map the profession by commune, department and region

What one row is

One row = one cabinet (the annuaire's own unit: a société d'expertise comptable, an expert-comptable indépendant, an SPE, a branch or an AGC) with the experts-comptables it lists. Rows are deduplicated on the annuaire's own id, so a cabinet is never delivered or charged twice.

Measured fill (contact fields first)

Measured on live runs on 2026-09-23 and on two opposite-biased sampling frames captured the day before. Population numbers are quoted as a range across frames, never as one number.

FieldRhône (69), live run: 1,385 profiles read, 1,319 deliveredFrame A: 60 random national profilesFrame B: every cabinet in Rodez + Ajaccio (98)
phone99.8% of delivered (1,316 of all 1,385 profiles = 95.0%)91.7%98.0%
phoneE16499.8% (every printed phone reformatted)——
website7.9%8.3%10.2%
linkedinUrl2.7%1.7%3.1%
facebookUrl1.2%1.7%2.0%
email0% — the annuaire does not publish email (see below)0%0%
contactFormAvailable97.4%——
streetAddress, postalCode, city100%100%100%
lat / lng100%100%100%
entityType100%100% of cards100% of cards
accountants (≥1 named)99.8%100%100%
languages99.5%100%100%
openingHours4.9%3.3%6.1%
logoUrl11.0%11.7%13.3%

Between 2% and 8% of profiles (by frame; Rhône 5.0%) publish no phone at all (the JSON-LD telephone is empty and the page has no "Appeler" button — the call modal comes back with tel: empty, measured). With Only cabinets with a phone or website on (default) those are skipped and not charged; they are counted in RUN_SUMMARY.

Email is not published. The Ordre offers a "Contacter par mail" form instead of an address. email is always null by design, and contactFormAvailable tells you whether the form exists. When a cabinet publishes a website (~8–10%), website gives you the domain to chain into an imprint/contact enricher. We never guess a domain or an address.

Fields

FieldMeaning
annuaireIdNumeric id from the profile URL — the stable key
ordreFirmId12-digit id the annuaire attaches to the cabinet's call/contact buttons, verbatim
nameCabinet name as printed
entityType / entityTypeLabelfirm (Société d'expertise comptable), independent (Expert-comptable indépendant), multiProfessionalFirm (SPE), branch (Succursale), managementAssociation (AGC) — read from the label the annuaire prints on each result card, never inferred from the name
phoneAs printed by the Ordre (schema.org telephone)
phoneE164Pure reformat of phone: +33, or +590/+596/+594/+262 for the overseas departments. Never completed: a short or double number gives null
website, linkedinUrl, facebookUrl, instagramUrl, twitterUrl, youtubeUrlClassified by host from the profile's "Nos sites" panel (the site labels Facebook pages "Site web", so its label is not trusted)
linksEvery published link with the site's own label
contactFormAvailableThe "Contacter par mail" form exists
emailAlways null (not published)
streetAddress, postalCode, city, countryPostal address as published (CEDEX codes kept as printed)
departmentCode, departmentName, regionName, citySlugFrom the annuaire's own region → department → commune index (null in profile-URL mode)
lat, lngCoordinates the annuaire publishes
accountants[{firstName, lastName, fullName}] — the experts-comptables listed in the cabinet
accountantCountNumber of listed experts-comptables
languagesLanguages spoken
openingHours[{day, opens, closes}] from schema.org openingHoursSpecification (a split day gives two entries)
logoUrl, taglineWhen the cabinet uploaded them
siren, siret, sirenLegalName, sirenNafCode, sirenEstablishmentAddress, sirenMatchMethod, sirenMatchStatus, directors, sireneUrlOptional SIREN join, see below. sirenMatchStatus = matched, no-match, ambiguous, error or not-requested
profileUrl, source, scrapedAtProvenance

Real example row (Rhône run, 2026-09-23, accountants list shortened here)

{
"annuaireId": 7602,
"ordreFirmId": "260000493901",
"name": "FORVIS MAZARS",
"entityType": "firm",
"entityTypeLabel": "Société d'expertise comptable",
"phone": "04 26 84 52 52",
"phoneE164": "+33426845252",
"website": "https://www.forvismazars.com/fr/fr",
"linkedinUrl": "https://www.linkedin.com/company/forvis-mazars-en-france/",
"facebookUrl": null,
"twitterUrl": "https://x.com/forvismazarsfr",
"youtubeUrl": "https://www.youtube.com/user/MazarsFrance",
"contactFormAvailable": true,
"email": null,
"streetAddress": "109 RUE TETE D OR - CS 10363",
"postalCode": "69451",
"city": "Lyon",
"country": "FR",
"departmentCode": "69",
"departmentName": "Rhône",
"regionName": "Auvergne-Rhône-Alpes",
"citySlug": "lyon",
"lat": 45.764977,
"lng": 4.853312,
"accountants": [
{ "lastName": "BERTUCAT-LOUWAGIE", "firstName": "ALEXANDRA", "fullName": "ALEXANDRA BERTUCAT-LOUWAGIE" },
{ "lastName": "BLONDEAU", "firstName": "RENAUD", "fullName": "RENAUD BLONDEAU" }
],
"accountantCount": 13,
"languages": ["Français", "Anglais"],
"openingHours": [
{ "day": "Lundi", "opens": "8:00", "closes": "12:00" },
{ "day": "Lundi", "opens": "14:00", "closes": "18:00" }
],
"logoUrl": "https://annuaire.experts-comptables.org/upload/accounting_firm/cc6ede9222e948d4ffd98459648d485a.jpg",
"tagline": null,
"siren": null,
"sirenMatchStatus": "not-requested",
"profileUrl": "https://annuaire.experts-comptables.org/expert-comptable/7602-forvis-mazars-lyon-69451",
"source": "annuaire.experts-comptables.org (Ordre des experts-comptables)",
"scrapedAt": "2026-09-23T04:06:59.360Z"
}

Input

InputDefaultWhat it does
cities— (prefill Rodez (12))Communes as the annuaire names them. "Lyon (69)" pins the department and skips a lookup; a bare name is matched in every department
departments—Codes such as "69", "75", "971". Corsica is one department on the annuaire: "20"
regions—Any of the 18 regions the annuaire indexes
(all three empty)All of France — about 31,600 cabinets
profileUrls—Refresh known cabinets from their profile links; location inputs are ignored
entityTypesallKeep only firms, independents, SPE, branches and/or AGC. Filtered cabinets are never fetched or charged
requireContacttrueSkip (no charge) cabinets with neither a phone nor a website
requirePhonefalseStricter: skip cabinets without a phone
enrichSirenfalseAdd the audited SIREN/SIRET join
maxResults100 (prefill 20)Stop after this many delivered rows; 0 = no limit
maxConcurrency8Requests in flight
proxyConfigurationdirectSee "How it works"

API example:

curl -X POST "https://api.apify.com/v2/acts/scrapersdelight~experts-comptables-annuaire-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "departments": ["69", "01"], "entityTypes": ["firm"], "maxResults": 0 }'

Optional SIREN / SIRET join — audited, never guessed

The annuaire publishes no SIREN. With enrichSiren on, each row is looked up in the State's open business-register API (recherche-entreprises.api.gouv.fr, SIRENE + RNE). A SIREN is written only when exactly one active company with NAF 69.20Z passes both gates:

  1. identity — its legal name, full name or sigle equals the cabinet name after normalisation (accents, case, &/et, legal-form words, word order), or its shop-sign does (sirenMatchMethod then says tradeName); an entrepreneur individuel can only match an "Expert-comptable indépendant" listing;
  2. location — one of its establishments has the annuaire's postal code, or the same commune (CEDEX).

Zero or several candidates → siren: null with the reason in sirenMatchStatus. There is no director-based bridge: in testing, one expert-comptable directing two cabinets made such a bridge join the wrong company, so it was removed. The register's own legal name and establishment address travel with every match so you can audit it. Measured on departments 12 + 20 (366 cabinets, live run 2026-09-23): 237 matched (64.8%) — firms 202 of 272 (74.3%), independents 35 of 72 (48.6%), AGC 0 of 21 — 129 no-match, 0 ambiguous, 0 errors; every match NAF 69.20Z and every SIRET distinct. Branches of one company correctly share a SIREN with different SIRETs.

A matched row is charged the siren-matched event ($0.0018); unmatched rows are not.

Pricing

EventPrice
cabinet-scraped — per cabinet row delivered$0.0018 ($1.80 / 1,000)
siren-matched — only with enrichSiren, per delivered row that carries a SIREN$0.0018
Run start$0
JobRowsCost
Try it (prefill: Rodez, 20 cabinets)20$0.036
Rhône (69), all cabinets~1,320~$2.37
All of France~30,000~$54
All of France + SIREN (~65% match)~30,000~$89

Never charged: duplicates, cabinets outside your entity-type filter, cabinets without phone or website (while requireContact is on), profiles that no longer exist, pages that stayed unreachable. Set a maximum charge on the run and the actor stops cleanly at it — rows it cannot pay for are neither delivered nor charged.

How it works (and what it guarantees)

  1. Reads the annuaire's own region → department → commune index, which prints the number of cabinets per commune (France printed 31,582 on 2026-09-22; region totals are checked against their department links on every run).
  2. Walks each commune's result pages with a pinned ordering seed. Measured: without one the site reshuffles results between requests (the same page twice gives different cabinets), which silently duplicates and drops rows. The actor fails the run if the site stops honouring the seed.
  3. Floor-asserts every commune against the count the annuaire prints (Rhône: 1,385 printed, 1,385 read, 121 of 121 communes complete). A short commune is re-walked; a scope missing more than 1% fails the run instead of passing a partial file off as complete.
  4. Fetches each cabinet's profile page (JSON-LD + HTML) and delivers the row.

Transport. The annuaire has no anti-bot. Requests go direct from the Apify container (measured 1,319 cabinets in 95 s); any request that fails direct — a 403/429/5xx or a 200 that is not the expected page — is retried through Apify RESIDENTIAL (France) on a fresh session. Set a proxy to force every request through it.

RUN_SUMMARY (key-value store) reports per-commune coverage against the printed counts, rows delivered == charged, the three kinds of nothing (profile gone / no contact published / unreachable), field fill on the delivered rows, phones shared by several cabinets (network switchboards), SIREN statistics and transport.

Data limits

  • No email — not published by the Ordre (a contact form only).
  • Phone is the cabinet's published switchboard, not a direct line. Some numbers are shared across the branches of one network (Rhône: the most-shared number sits on 13 cabinets); they are kept as printed and listed in RUN_SUMMARY.phoneDistribution.
  • Entity type, department and region come from search results, so they are null in profileUrls mode.
  • The ordreFirmId is the annuaire's own button id; it is not documented as the Tableau inscription number, so it is shipped verbatim and not relabelled.
  • The national search lists 31,589 cabinets while the region index sums to 31,582: ~7 cabinets are reachable only by the national search and are not covered by the index walk.
  • SIREN join: ~35% of cabinets get no SIREN (name differs from the register's, or the register address is in another commune); AGCs rarely match (they are associations, not NAF 69.20Z companies).

Source

Data: the public annuaire of the Conseil national de l'Ordre des experts-comptables (annuaire.experts-comptables.org). This actor is not affiliated with the Ordre.

FAQ

How fresh is it? Every run reads the live annuaire; nothing is cached.

Why does a cabinet appear with a CEDEX postal code (e.g. 69451)? That is what the cabinet declared; it is kept as printed. city stays the commune name.

Can I get all the experts-comptables as individual rows? Each row carries the accountants array; flatten it in your pipeline. The annuaire publishes no individual contact details for them.