France Travail Scraper — Scrape Job Offers from Pôle Emploi avatar

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

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

Julien ApiKiy

Maintained by Community

Actor 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

  1. Go to the actor's page on Apify Console
  2. 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
}
  1. Click Start and wait for results in the dataset.

Run Locally

# Install dependencies
npm install
# Run with Apify local APIFIFY_TOKEN
APIFY_TOKEN=your_token npm start
# Or provide input via stdin
echo '{"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

FieldTypeDefaultDescription
searchQueriesstring[]requiredJob titles, keywords, or skills (e.g., "comptable", "infirmier")
locationsstring[][] (all France)Cities, departments, or regions (e.g., "Paris", "75")
contractTypesstring[][] (all)Filter: CDI, CDD, Interimaire, Stage, Apprentissage
maxResultsnumber20Maximum total job listings to collect (1–200)
maxPagesnumber5Max search result pages per query (1–20)
visitDetailsbooleanfalseVisit each job's detail page for salary/full description
delayMinnumber2000Minimum delay between requests (ms)
delayMaxnumber5000Maximum delay between requests (ms)
maxConcurrencynumber1Concurrent browser pages (keep ≤2 to avoid detection)
debugModebooleanfalseEnable 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 dependencies
npm install
# Run tests
npm test
# Watch mode
npm run test:watch

How It Works

  1. Builds search URLs for each query × location combination with pagination
  2. Launches a headless Chromium browser with anti-detection flags
  3. Navigates to France Travail search results pages
  4. Extracts job listings from the DOM (title, company, location, contract, URL)
  5. Optionally visits detail pages to get salary and full descriptions
  6. 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.webdriver override to hide automation
  • Fake navigator.plugins and 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