French Accountants Scraper · Expert-Comptable Directory avatar

French Accountants Scraper · Expert-Comptable Directory

Pricing

from $1.99 / 1,000 results

Go to Apify Store
French Accountants Scraper · Expert-Comptable Directory

French Accountants Scraper · Expert-Comptable Directory

Export French accounting firms from the official Ordre register: name, address, phone, website, profile URL. Run by city or nationwide. No login. No API key. Public official register. JSON, CSV, Excel for CRM and B2B prospecting.

Pricing

from $1.99 / 1,000 results

Rating

0.0

(0)

Developer

Corentin Robert

Corentin Robert

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

French Accountants Directory Scraper — experts-comptables.org (HTTP)

Export the official French expert-comptable register — firm names, addresses, phones, and profile links — in one dataset you can plug into CRM, outbound, or market research.

Stop copying annuaire.experts-comptables.org by hand. This Actor reads the public Ordre directory over plain HTTP, structures every accounting firm as a row, and lets you run nationwide, by commune, or from profile URLs you already have. Download JSON, CSV, or Excel from the Apify Dataset tab — or call the run via API and wire it to Schedules for monthly refreshes.

No login. No API key. Public official register.

Important: Data comes from public firm profile pages. Some optional fields (website, languages, competences) appear only when the site displays them. Email is not included — the register does not expose it in structured data. You must comply with Ordre des experts-comptables terms, GDPR, and professional-directory rules.


Who is this for?

You are…Typical goalSuggested setup
B2B supplier / SaaS selling to accounting firmsVerified firm contacts by regionBy city with target communes, or Full directory for France-wide coverage
Outbound / SDR teamPhone + address for cold calling or mailBy city for a département rollout; export CSV from Dataset
Market researcher / analystCount and map firms nationallyFull directory with Max firms = 0 (no row cap)
Ops / data team refreshing an old listSame fields, latest phonesYour URLs — paste profile links from a previous export
Franchise / network opsFirms in specific communesBy city — slug from /recherche/ville/{slug} (e.g. paris, rodez)

What you get by default: firm name, full address, phone, GPS coordinates, and canonical profile URL — typically ~100% fill on those core fields in our samples. Website and social links are included when the profile publishes them (~10–20% for website on mixed communes).

Which mode to pick: use By city for your first run (fast, cheap, easy to validate). Switch to Full directory when you need a national file (~22k–31k unique firms after deduplication, ~30–45 min on Apify). Use Your URLs only when you already have profile links and want a contact refresh without re-scanning communes.


Getting started

First run in the Apify Console (~2 minutes)

  1. Open this Actor on Apify and go to the Input tab.
  2. Under Step 1 — What do you need?, leave the default By city (safest for Try for free).
  3. Under Step 2 — Commune slugs, the default is rodez — or replace with your target (e.g. paris, lyon, marseille).
  4. Under Step 3 — Limits, Max firms defaults to 50 on Try — enough to preview the dataset without a long run.
  5. Click Start (or Try for free).
  6. While the run executes, watch the log line Progress: and the short status at the top of the run page (e.g. Scanning France — 34% · 120 firms saved).
  7. When the run finishes, open the Output tab → Dataset → preview rows or click Export (JSON, CSV, Excel). Use Quick view (table) for a curated column set.

Export all of France

  1. Step 1 → select Full directory — nationwide firm export.
  2. Max firms → set 0 (no row ceiling).
  3. Leave Max communes at 0 (all ~4 600 communes) unless you want a smoke test (e.g. set 5 communes via API — see below).
  4. Start — expect ~22k–31k rows and ~30–45 minutes depending on platform load. Rows appear in the Dataset while the run is still going (progressive export).

Refresh firms you already know

  1. Step 1Your URLs — profile links to refresh.
  2. Paste one official profile URL per line under Profile URL(s).
  3. Start — skips commune discovery; only fetches the profile pages you listed.

Run via API

Replace YOUR_API_TOKEN and start a run programmatically:

curl -X POST "https://api.apify.com/v2/acts/corent1robert~experts-comptables-annuaire-scraper/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "cities",
"citySlugs": ["paris", "lyon"],
"maxProfiles": 0
}'

Fetch results when the run succeeds:

$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&token=YOUR_API_TOKEN"

Use maxProfiles: 0 for no row cap. Add "resume": true on full-directory runs to continue from the last checkpoint after an abort (API-only — see Input).

Schedule a monthly refresh

In Apify Console → Schedules → create a schedule on this Actor → paste the same JSON input (e.g. Your URLs with your master list, or By city for rolling département coverage). Pair with Integrations (Google Sheets, webhooks, Zapier) to push new rows into your stack automatically.

Typical workflow with other registers

StepToolWhy
1This ActorFirm name, address, phone, profile URL from the Ordre register
2French Companies ScraperMatch a cabinet name to SIREN, directors, NAF code, legal form
3French Establishments ScraperOne row per SIRET / branch when you have the SIREN
4BODACC Legal AnnouncementsCreation, insolvency, or sale events tied to a SIREN

What does it extract?

CategoryFields
IdentityFirm name (name), register ID (searchId)
LocationStreet address, postal code, city, latitude / longitude
ContactPhone (from JSON-LD on profile pages)
Web & socialWebsite, LinkedIn, Facebook — when linked on the profile
Profile extrasSpoken languages, competences — when shown in HTML
LinksCanonical profile URL, discovery commune slug (citySlug)
MetadatascrapedAt; scrapeError if a row failed partially

Output shape: one row per firm record in the Dataset (the register lists cabinets by commune of attachment — not unique individuals). Deduplication uses searchId.


Typical fill rates

Benchmark on a Rodez sample (30 firms, June 2026):

FieldFill rate
name, streetAddress, postalCode, city, profileUrl, phone, latitude, longitude100%
languages100% (Rodez — varies by commune)
website~20%
linkedinUrl~7%
facebookUrl~3%
competences0% in Rodez sample
emailNot available (contact button uses a separate UI flow)

On a 100-firm slice from Paris, Lyon, Marseille, Toulouse, and Rodez: core address and phone 100%; website ~14%; LinkedIn ~6%.

Full-directory runs deduplicate by searchId across communes. Expect ~22k–31k unique rows after deduplication depending on how the register maps cabinets to communes.


Three modes (JSON reference)

Full directory

{
"mode": "fullDirectory",
"maxProfiles": 0,
"maxCities": 0
}

Use maxCities: 5 (API) to cap communes during testing.

By city

{
"mode": "cities",
"citySlugs": ["paris", "lyon", "rodez"],
"maxProfiles": 0
}

Slug = last segment of https://annuaire.experts-comptables.org/recherche/ville/{slug}.

Your URLs

{
"mode": "bulkUrls",
"profileUrls": [
"https://annuaire.experts-comptables.org/expert-comptable/12346-douls-associes-rodez-12000"
]
}

How it works

  1. Commune list (full directory only) — walks the official regional index to build ~4 600 commune slugs.
  2. Map scan — for each commune, reads the public map API and collects firm IDs (searchId).
  3. Deduplication — merges IDs seen across communes before export.
  4. Profile export — for each firm: resolves the canonical profile URL (marker step when needed), fetches the profile page, parses JSON-LD + HTML panels.
  5. Dataset — pushes each row immediately (pushData) so you see results during long runs.
  6. Optional checkpoint — with "resume": true, communes already scanned and firms already exported are skipped on the next run.

HTTP-only — no browser. Cloud runs use a two-stage export pipeline (marker + profile workers) for throughput.


Input (Console vs API)

Console fieldPurpose
ModeFull directory / By city / Your URLs
Commune slug(s)By city — e.g. paris, aix-en-provence
Profile URL(s)Your URLs — one official profile link per line
Max firmsRow cap; 0 = no cap
Max communesFull directory only; 0 = all communes (hidden in Console — use API)

API-only options: resume, verboseLogs, mapConcurrency, maxConcurrency / marker+profile workers (auto-tuned on cloud), proxyConfiguration, maxRequestRetries, navigationTimeoutSecs, checkpointEveryCommunes.


Progress during a run

Every ~8 seconds you get one Progress: log line and a short Console status (they differ on purpose):

PhaseExample logExample status
Commune listBuilding commune list · departments 40/100 (40%) · ~11sBuilding commune list — 40%
Scan + saveScanning communes · 1610/4675 (34%) · 9063 firms found · 3132 saved to datasetScanning France — 34% · 3132 firms saved
Export finishExporting firm profiles · 8500/31330 (27%) · 22830 remaining · ~18m leftExporting profiles — 27% · 8500/31330 firms

During the scan phase, export percentage is not shown against a partial total (that was misleading in earlier versions). After the commune scan completes, export progress uses the final firm count.

A RUN_LOG record in the key-value store mirrors recent lines — open it from Output → Run log (live).

Resume: set "resume": true in API input to continue from the last checkpoint (CHECKPOINT in KV) without re-scanning communes already processed.


Output sample

{
"searchId": 12346,
"name": "DOULS & ASSOCIES",
"streetAddress": "1, avenue du Maréchal Joffre",
"postalCode": "12000",
"city": "Rodez",
"phone": "+33565687888",
"website": "https://example-cabinet.fr",
"linkedinUrl": null,
"facebookUrl": null,
"languages": "Français, Anglais",
"competences": null,
"profileUrl": "https://annuaire.experts-comptables.org/expert-comptable/12346-douls-associes-rodez-12000",
"citySlug": "rodez",
"latitude": 44.3512,
"longitude": 2.5734,
"scrapedAt": "2026-06-05T12:00:00.000Z"
}

Use profileUrl or searchId as the stable key across runs.


How much does it cost to scrape experts-comptables.org?

HTTP-only — no browser — so compute stays low compared to Puppeteer/Playwright Actors. Residential proxy is not required for typical runs (optional via API).

ScenarioApprox. rowsApprox. cost
Try for free (default)50< $0.01
Single large city500–2 000~$0.05–0.15
Regional batch (several communes)1 000~$0.10–0.20
Full France~22k–31k~$0.50–2.00

Actual cost depends on your Apify plan (compute units, dataset storage, run duration). Profile export is ~1–2 HTTP requests per firm (marker + profile, or profile only in Your URLs mode).


This Actor accesses public pages from the official Ordre register — the same information visible to any visitor. You remain responsible for:

  • GDPR and French privacy law when storing or processing personal data (e.g. phone numbers of professionals).
  • Direct marketing rules (B2B outreach still requires legitimate interest and opt-out respect).
  • Terms of use of annuaire.experts-comptables.org.

Use outputs for legitimate professional purposes — B2B services, market research, CRM enrichment — not for abusive bulk spam or resale of personal data without a legal basis.


Also available — French B2B registers on Apify

Apify’s recommendation engine only links Actors in the same category. Cross-promotion between your own Actors is manual — these companions share the same HTTP-first, CRM-ready pattern:

ActorBest for
Notaires.fr Directory ScraperOfficial notary offices — same directory workflow (full France or your URLs)
French Companies · Search & SIREN EnrichMatch a firm name to SIREN, directors, NAF, finances from the public INSEE register
French Establishments · All Sites by SIRENOne row per SIRET / branch once you have SIRENs
BODACC Legal Announcements ScraperCompany creations, insolvencies, business sales — filter by keyword or SIREN
Houzz FR Professionals ScraperArchitects, designers, builders on Houzz — city search + optional website enrichment
Ameli Health Directory ScraperDoctors and health professionals by specialty and city
ANAH Syndics & Condos RegistryProperty managers (syndics) from the official ANAH register

Browse the full store: apify.com/corent1robert


FAQ

Is this affiliated with the Ordre des experts-comptables?
No. It automates access to public directory pages. You remain responsible for compliance.

Why more markers than the ~22k figure on the site?
The register attaches firm records to communes; the same logical firm can appear in map data across overlapping geography. The Actor deduplicates by searchId before export.

Why is email missing?
The profile page uses a Contacter par mail button (separate UI/API). Structured JSON-LD does not include email.

Can I use a proxy?
Optional via API proxyConfiguration. Default runs without proxy — no blocks observed at moderate concurrency during development.

How do I find a commune slug?
Open a city page on the directory, e.g. …/recherche/ville/paris → slug is paris.


Support

Custom integrations, larger exports, or CRM wiring: corentin@outreacher.fr


Local development

npm install
cp .actor/INPUT.json storage/key_value_stores/default/INPUT.json
apify run
npm test

Results appear under storage/datasets/default/ locally. For heavy presets, use apify run --input-file=./input.json.

Debug probe:

$node scripts/probe-experts-comptables.mjs --city rodez --profiles 5