France Travail Scraper — Scrape Job Offers from Pôle Emploi
Pricing
from $10.00 / 1,000 results
Go to Apify Store

France Travail Scraper — Scrape Job Offers from Pôle Emploi
An [Apify actor](https://apify.com/) that scrapes job listings from [France Travail](https://candidat.francetravail.fr/) (formerly Pôle Emploi) using Playwright
Pricing
from $10.00 / 1,000 results
Rating
0.0
(0)
Developer
Julien ApiKiy
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
France Travail Job Scraper
An Apify actor that scrapes job listings from France Travail (formerly Pôle Emploi) using Playwright with anti-detection measures.
Features
- 🔍 Search jobs by keyword, location, and contract type
- 📄 Multi-page pagination with configurable depth
- 🛡️ Anti-detection: random user agents, delays, webdriver override
- 💰 Optional detail page visits for salary and full description extraction
- 🇫🇷 French market focus — defaults to all of France
- 📊 Deduplication across pages and queries
- ⚙️ Configurable concurrency, delays, and result limits
Usage
On Apify Platform
- Go to the actor's page on Apify Console
- Set the input — at minimum provide
searchQueries:
{"searchQueries": ["développeur react", "ingénieur python"],"locations": ["Paris", "Lyon"],"contractTypes": ["CDI"],"maxResults": 50,"maxPages": 5,"visitDetails": false}
- Click Start and wait for results in the dataset.
Run Locally
# Install dependenciesnpm install# Run with Apify local APIFIFY_TOKENAPIFY_TOKEN=your_token npm start# Or provide input via stdinecho '{"searchQueries": ["développeur web"], "maxResults": 10}' | npm start
Run via Docker
docker build -t france-travail-scraper .docker run -e APIFY_TOKEN=your_token france-travail-scraper
Input
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | required | Job titles, keywords, or skills (e.g., "comptable", "infirmier") |
locations | string[] | [] (all France) | Cities, departments, or regions (e.g., "Paris", "75") |
contractTypes | string[] | [] (all) | Filter: CDI, CDD, Interimaire, Stage, Apprentissage |
maxResults | number | 20 | Maximum total job listings to collect (1–200) |
maxPages | number | 5 | Max search result pages per query (1–20) |
visitDetails | boolean | false | Visit each job's detail page for salary/full description |
delayMin | number | 2000 | Minimum delay between requests (ms) |
delayMax | number | 5000 | Maximum delay between requests (ms) |
maxConcurrency | number | 1 | Concurrent browser pages (keep ≤2 to avoid detection) |
debugMode | boolean | false | Enable verbose logging |
Output
Each job listing contains:
{"jobId": "210SSZN","title": "Développeur Web Full Stack","company": "ACME Corp","location": "75 - Paris","contractType": "CDI","salary": "Annuel de 35000.0 Euros à 40000.0 Euros","publicationDate": "Publié hier","description": "Nous recherchons un développeur web...","url": "https://candidat.francetravail.fr/offres/recherche/detail/210SSZN","searchQuery": "développeur web","scrapedAt": "2025-01-15T10:30:00.000Z"}
Development
# Install dev dependenciesnpm install# Run testsnpm test# Watch modenpm run test:watch
How It Works
- Builds search URLs for each query × location combination with pagination
- Launches a headless Chromium browser with anti-detection flags
- Navigates to France Travail search results pages
- Extracts job listings from the DOM (title, company, location, contract, URL)
- Optionally visits detail pages to get salary and full descriptions
- Deduplicates by job ID and pushes results to the Apify dataset
Anti-Detection Measures
- Random user agent rotation (8 Chrome/Firefox/Safari agents)
- Configurable random delays between requests (default 2–5s)
navigator.webdriveroverride to hide automation- Fake
navigator.pluginsand French language preferences - Chromium flags:
--disable-blink-features=AutomationControlled,--lang=fr-FR - Cookie consent banner auto-dismissal
💰 Pricing
Pay-per-use, no monthly fees:
| Price | |
|---|---|
| Actor start | $0.01 |
| Per result | $0.01 |
💡 Example: A run returning 500 results costs $5.01 total ($0.01 start + 500 × $0.01).
License
ISC