French Accountants Scraper · Expert-Comptable Directory
Pricing
from $1.99 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
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 goal | Suggested setup |
|---|---|---|
| B2B supplier / SaaS selling to accounting firms | Verified firm contacts by region | By city with target communes, or Full directory for France-wide coverage |
| Outbound / SDR team | Phone + address for cold calling or mail | By city for a département rollout; export CSV from Dataset |
| Market researcher / analyst | Count and map firms nationally | Full directory with Max firms = 0 (no row cap) |
| Ops / data team refreshing an old list | Same fields, latest phones | Your URLs — paste profile links from a previous export |
| Franchise / network ops | Firms in specific communes | By 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)
- Open this Actor on Apify and go to the Input tab.
- Under Step 1 — What do you need?, leave the default By city (safest for Try for free).
- Under Step 2 — Commune slugs, the default is
rodez— or replace with your target (e.g.paris,lyon,marseille). - Under Step 3 — Limits, Max firms defaults to 50 on Try — enough to preview the dataset without a long run.
- Click Start (or Try for free).
- 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). - 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
- Step 1 → select Full directory — nationwide firm export.
- Max firms → set 0 (no row ceiling).
- Leave Max communes at 0 (all ~4 600 communes) unless you want a smoke test (e.g. set 5 communes via API — see below).
- 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
- Step 1 → Your URLs — profile links to refresh.
- Paste one official profile URL per line under Profile URL(s).
- 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
| Step | Tool | Why |
|---|---|---|
| 1 | This Actor | Firm name, address, phone, profile URL from the Ordre register |
| 2 | French Companies Scraper | Match a cabinet name to SIREN, directors, NAF code, legal form |
| 3 | French Establishments Scraper | One row per SIRET / branch when you have the SIREN |
| 4 | BODACC Legal Announcements | Creation, insolvency, or sale events tied to a SIREN |
What does it extract?
| Category | Fields |
|---|---|
| Identity | Firm name (name), register ID (searchId) |
| Location | Street address, postal code, city, latitude / longitude |
| Contact | Phone (from JSON-LD on profile pages) |
| Web & social | Website, LinkedIn, Facebook — when linked on the profile |
| Profile extras | Spoken languages, competences — when shown in HTML |
| Links | Canonical profile URL, discovery commune slug (citySlug) |
| Metadata | scrapedAt; 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):
| Field | Fill rate |
|---|---|
name, streetAddress, postalCode, city, profileUrl, phone, latitude, longitude | 100% |
languages | 100% (Rodez — varies by commune) |
website | ~20% |
linkedinUrl | ~7% |
facebookUrl | ~3% |
competences | 0% in Rodez sample |
email | Not 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
- Commune list (full directory only) — walks the official regional index to build ~4 600 commune slugs.
- Map scan — for each commune, reads the public map API and collects firm IDs (
searchId). - Deduplication — merges IDs seen across communes before export.
- Profile export — for each firm: resolves the canonical profile URL (marker step when needed), fetches the profile page, parses JSON-LD + HTML panels.
- Dataset — pushes each row immediately (
pushData) so you see results during long runs. - 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 field | Purpose |
|---|---|
| Mode | Full 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 firms | Row cap; 0 = no cap |
| Max communes | Full 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):
| Phase | Example log | Example status |
|---|---|---|
| Commune list | Building commune list · departments 40/100 (40%) · ~11s | Building commune list — 40% |
| Scan + save | Scanning communes · 1610/4675 (34%) · 9063 firms found · 3132 saved to dataset | Scanning France — 34% · 3132 firms saved |
| Export finish | Exporting firm profiles · 8500/31330 (27%) · 22830 remaining · ~18m left | Exporting 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).
| Scenario | Approx. rows | Approx. cost |
|---|---|---|
| Try for free (default) | 50 | < $0.01 |
| Single large city | 500–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).
Is it legal to scrape experts-comptables.org?
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:
| Actor | Best for |
|---|---|
| Notaires.fr Directory Scraper | Official notary offices — same directory workflow (full France or your URLs) |
| French Companies · Search & SIREN Enrich | Match a firm name to SIREN, directors, NAF, finances from the public INSEE register |
| French Establishments · All Sites by SIREN | One row per SIRET / branch once you have SIRENs |
| BODACC Legal Announcements Scraper | Company creations, insolvencies, business sales — filter by keyword or SIREN |
| Houzz FR Professionals Scraper | Architects, designers, builders on Houzz — city search + optional website enrichment |
| Ameli Health Directory Scraper | Doctors and health professionals by specialty and city |
| ANAH Syndics & Condos Registry | Property 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 installcp .actor/INPUT.json storage/key_value_stores/default/INPUT.jsonapify runnpm 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