Cadremploi.fr Scraper
Pricing
from $1.50 / 1,000 results
Cadremploi.fr Scraper
Scrape job listings from Cadremploi.fr — France's leading executive and management job board. Full job details including salary range, company info & LLM-ready descriptions in HTML, text and Markdown. daysOld filtering & repost detection. No API key required.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Actor stats
2
Bookmarked
4
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share

Extract structured job listings from Cadremploi.fr — France's leading executive and managerial job board with 24,000+ active listings. No API key required. Output includes salary data, company profiles, and job descriptions in three formats (HTML, plain text, Markdown).
Why use this scraper?
- Structured data from France's #1 executive job board — titles, salaries, company info, location, and contract types in one consistent schema
- Three description formats — HTML, plain text, and Markdown for direct use in LLM pipelines, RAG applications, and job aggregators
- Salary extraction — minimum, maximum, currency, and pay period parsed from structured job data where published
- Cross-run repost detection — 90-day memory flags republished listings across automated runs
- Flexible input — keyword and location post-filters, contract type selection, age filter, and custom
startUrlsfor targeted scraping - Ready for automation — consistent schema, ISO 8601 dates, and flat JSON output compatible with any downstream pipeline
Input parameters
| Parameter | Type | Description |
|---|---|---|
startUrls | Array | Direct job URLs or list page URLs from Cadremploi.fr. If omitted, scrapes the latest 50 jobs from the site feed. |
keywords | String | Post-filter: only return jobs matching this keyword in title, description, sector, or company name. |
location | String | Post-filter: only return jobs in this city or region (e.g. Paris, Lyon, Ile-de-France). |
contractTypes | Array | Filter by contract type: Full-time, Part-time, Freelance, Temporary, Internship. |
maxResults | Integer | Maximum number of results to return. Default: 100. |
daysOld | Integer | Only return jobs posted within the last N days. Set to 0 to disable. Default: 30. |
skipReposts | Boolean | Skip jobs already seen in previous runs. Requires persistent storage across runs. Default: false. |
proxyConfiguration | Object | Proxy settings. Defaults to the built-in proxy pool — no changes needed for standard use. |
Input example
{"keywords": "directeur marketing","location": "Paris","contractTypes": ["Full-time"],"maxResults": 200,"daysOld": 14,"skipReposts": true}
Using startUrls
Paste a direct offer URL to scrape a specific listing:
{"startUrls": [{ "url": "https://www.cadremploi.fr/emploi/detail_offre?offreId=156513591941990131" }]}
Or paste a list page URL to scrape a custom result set:
{"startUrls": [{ "url": "https://www.cadremploi.fr/emploi/liste_offres" }],"maxResults": 100}
Output
Each result is a flat JSON object:
| Field | Type | Description |
|---|---|---|
id | String | Unique offer ID |
url | String | Direct link to the offer |
title | String | Job title |
companyName | String | Hiring company or agency |
companyLogo | String | Company logo URL |
companyUrl | String | Company website URL |
companyDescription | String | Company profile text |
location | String | Full location (city, region, country) |
city | String | City |
postalCode | String | Postal code |
region | String | French region |
country | String | Country code (FR) |
contractType | String | Normalised contract type |
sector | String | Industry or occupational category |
description | String | Job description in HTML |
descriptionText | String | Job description in plain text |
descriptionMarkdown | String | Job description in Markdown |
salaryMin | Number | Minimum annual salary (EUR) — null if not published |
salaryMax | Number | Maximum annual salary (EUR) — null if not published |
salaryPeriod | String | Pay period (e.g. YEAR) |
salaryCurrency | String | Currency code (EUR) |
experienceRequired | String | Required experience (e.g. 3 à 5 ans) |
directApply | Boolean | True if application is handled on Cadremploi directly |
publishDateISO | String | Publish date in ISO 8601 (UTC) |
validThrough | String | Listing expiry date in ISO 8601 (UTC) |
isRepost | Boolean | True if seen in a previous run |
originalPublishDate | String | First seen date (reposts only) |
originalUrl | String | Original URL (reposts only) |
source | String | Always cadremploi.fr |
scrapedAt | String | Scrape timestamp (ISO 8601 UTC) |
contentHash | String | MD5 fingerprint for deduplication |
Output example
{"id": "156530425728993983","url": "https://www.cadremploi.fr/emploi/detail_offre?offreId=156530425728993983","title": "Collaborateur comptable H/F","companyName": "LEA Recrutement","companyLogo": "https://imagedelivery.net/BN-U87wrUjbdYBHZwNH6NA/xxx/public","companyUrl": null,"companyDescription": "Cabinet de recrutement spécialisé...","location": "Montpellier, Languedoc-Roussillon, FR","city": "Montpellier","postalCode": "34000","region": "Languedoc-Roussillon","country": "FR","contractType": "Full-time","sector": "Cabinet Comptable - Audit","description": "<div class=\"job-description\">...</div>","descriptionText": "Nous recherchons un collaborateur comptable...","descriptionMarkdown": "Nous recherchons un collaborateur comptable...","salaryMin": 32000,"salaryMax": 38000,"salaryPeriod": "YEAR","salaryCurrency": "EUR","experienceRequired": null,"directApply": true,"publishDateISO": "2026-03-17T12:00:39.000Z","validThrough": "2026-04-17T00:00:00.000Z","isRepost": false,"originalPublishDate": null,"originalUrl": null,"source": "cadremploi.fr","scrapedAt": "2026-03-30T09:15:22.000Z","contentHash": "7ee5c94a3964"}
Pricing
| Volume | Cost |
|---|---|
| 1,000 results | $1.50 |
| 10,000 results | $15.00 |
| 50,000 results | $75.00 |
Billed at $1.50 per 1,000 results — pay only for what you use. No subscription, no minimum.
Flat-rate job data services typically charge $50–$200/month regardless of usage. At 5,000–20,000 results per month, this actor costs 70–90% less.
Performance
| Scenario | Speed | Memory |
|---|---|---|
| 50 latest jobs (default) | ~60 seconds | 256 MB |
| 200 jobs with keyword filter | ~4 minutes | 256 MB |
| 1,000 jobs via startUrls | ~20 minutes | 256 MB |
Known limitations
- Default discovery is capped at ~50 listings per run — the scraper reads the Cadremploi.fr list page, which displays the 50 most recent jobs server-side. For broader coverage, supply
startUrlswith specific search result page URLs copied from your browser. - Keyword and location filters are applied as post-filters — results are fetched first, then filtered. A keyword filter on a default run of 50 jobs will only match jobs that happen to appear in that set. For targeted keyword searches, use
startUrls. - Salary is not always published —
salaryMinandsalaryMaxarenullwhen the employer has not disclosed salary information. - Apply URL not available — Cadremploi's application flow is rendered client-side. Use
directApplyto determine whether applications are handled on-site or via employer redirect.
Technical details
Built on the Apify platform using server-rendered HTML scraping. Structured data is extracted from schema.org JobPosting JSON-LD blocks present in every offer detail page. No browser automation required — runs at 256 MB memory.
Additional services
Need a custom scraper, scheduled data feed, or integration with your HR platform or ATS? Contact us at info@unfencedgroup.nl — we build and maintain job board scrapers across France, Belgium, the Netherlands, Germany, Switzerland, and the UK.
Built by unfenced-group · All actors