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
1
Total users
1
Monthly active users
10 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). Runs with 0 results cost only $0.01.
License
ISC