France Travail Scraper: 700K+ FR Jobs (Pôle Emploi)
Pricing
$1.50 / 1,000 job scrapeds
France Travail Scraper: 700K+ FR Jobs (Pôle Emploi)
Scrape 700K+ public job offers from France Travail (ex Pôle Emploi). Filter by keywords, location, contract (CDI/CDD/alternance), experience, salary. Get title, company, location, required skills, work hours, full description. For ATS, recruitment agencies, market intel. $1.50/1K jobs.
Pricing
$1.50 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Walid
Maintained by CommunityActor stats
1
Bookmarked
58
Total users
36
Monthly active users
3 days ago
Last modified
Categories
Share
France Travail Scraper — 700K+ FR Jobs API (Pôle Emploi)
⭐ Bookmark this actor → apify.com/dltik/francetravail-scraper — Apify ranks by bookmarks, so it directly drives the visibility of this scraper. One click. No signup beyond your existing Apify account.
Scrape 700K+ job offers from France Travail (formerly Pôle Emploi) — the largest French public job board — via the official France Travail API. Get real
competences, ROME code + label, lat/lon geo coords, structured salary, experience, education, sector in one call. Add optional AI fit-scoring, SIREN company intelligence, and incremental diff mode. No OAuth to configure, no API key for you, no monthly subscription.
✨ What makes this scraper different
| Feature | This scraper | Other FT scrapers |
|---|---|---|
| Official France Travail API (structured, not HTML-guessed) | ✅ | ❌ mostly HTML scraping |
Real competences + ROME code + label per job | ✅ | ❌ |
Structured salary (min, max, period, annualized_*) | ✅ | ❌ raw string only |
| Geo coords (lat/lon) native, for each job | ✅ | ❌ |
| Experience years + education level detection | ✅ | ❌ |
| AI fit-scoring (candidate profile → 0-100 + apply/maybe/skip) | ✅ | ❌ |
| SIREN company intelligence (size, sector, status) per employer | ✅ | ❌ |
| Incremental diff mode (only new/changed, -70/95% cost) | ✅ | rare |
| Partner offers (Indeed, Apec) inclusion toggle | ✅ | partial |
| Success rate (live 30d) | 100% | varies |
What can this scraper do?
- 🇫🇷 700K+ live French job offers indexed by France Travail (CDI, CDD, alternance, intérim, stage)
- 🎯 11 search filters — keywords, location, contract, experience, qualification, salary, radius, posted since, full-time
- 🏷️ ROME code + label + real
competences— straight from the official API taxonomy (not keyword guessing) - 💰 Structured salary parsing —
min,max, currency, period (year/month/hour), auto-annualized - 📍 Native geo coordinates — lat/lon in every record, no extra geocoding step
- 🎓 Education level + experience years — from
formations/experienceLibelle - 🤖 AI fit-scoring (opt-in) — give a candidate profile, get a
fit_score0-100 +apply/maybe/skipper job - 🏢 SIREN company intelligence (opt-in) — resolve each employer to size, sector (NAF), category, active/ceased status
- 🧭 ROME métier reference (opt-in, free) — canonical definition, alternative job titles, and France Travail's emerging skills per occupation (official ROME 4.0 API)
- 📊 Labour-market context (opt-in) — hires + jobseekers + recruitment-tension per ROME × department (official Marché du travail data): is this role in demand here?
- ♻️ Incremental diff mode (opt-in) — recurring runs emit only NEW/UPDATED offers, 70-95% cheaper monitoring
- 🚀 Zero setup for you — we carry the API credentials; you just click Start
What data can you extract per job?
| Field | Description |
|---|---|
id | France Travail offer ID |
title | Job title |
company | Employer name (or anonymized) |
location / postal_code / department | City, postal code, département (75, 92, 13...) |
geo | { lat, lon, label } native from the API |
contract_type / contract_type_label | CDI / CDD / MIS / SAI + human label |
contract_nature / alternance | Contract nature + alternance flag |
rome_code / rome_label / appellation | ROME job classification + label |
salary | Raw salary text from France Travail |
salary_parsed | { min, max, currency, period, annualized_min, annualized_max, is_range } |
competences | Structured skills from the API { code, libelle, exigence } |
skills_detected | Flat skill list (competences + regex backfill, ≤25) |
experience_years / experience_required | Min years + raw requirement label |
education_level / formations | Detected level + structured formations |
langues / permis | Required languages + driving licences |
sector / naf_code | Sector label + NAF code |
nombre_postes / accessible_th | Number of openings + disability-friendly flag |
description | Full job description |
apply_url | Direct application URL |
posted_date / updated_date | YYYY-MM-DD |
partner_source | Partner site (Indeed, Apec...) if applicable |
rome | (opt-in) ROME 4.0 métier ref: { definition, appellations, skills_core, skills_emerging, work_contexts, riasec, isco_code, is_cadre, green_transition, digital_transition } |
market | (opt-in) Labour-market context for the job's ROME × dept: { period, hires, hires_stable, jobseekers, tension_ratio, tension_label } |
company_data | (opt-in) SIREN, size, sector, category, status — see AI/company sections |
ai | (opt-in) { summary, seniority, remote, must_have, red_flags, fit_score, recommended_action } |
change_type | (incremental mode) NEW / UPDATED / UNCHANGED / EXPIRED |
How to scrape France Travail jobs in 5 steps
- Create a free Apify account — no credit card required
- Open France Travail Scraper on Apify Store
- Set your filters — keyword (e.g. "développeur python"), location (
75Dfor Paris dept), contract (CDI) - Pick maxResults (start with 20 to validate, scale to 5000 once happy)
- Click Start — clean JSON in seconds, exportable to CSV / JSON / Excel from Apify dataset UI
How much does it cost to scrape France Travail jobs?
PAY_PER_EVENT — $0.0015 per job scraped ($1.50 per 1,000 results). Failed/empty runs not charged. Full structured detail (competences, ROME, geo, salary) is included in the base price — no enrichment upsell needed.
| Run size | Jobs | Apify cost | Time |
|---|---|---|---|
| Quick test | 20 | $0.03 | ~3s |
| Standard | 200 | $0.30 | ~10s |
| Deep | 1,000 | $1.50 | ~40s |
| Massive | 5,000 | $7.50 | ~4min |
Optional add-on events (charged only when you turn them on, on top of job-scraped):
| Add-on | Event | Price | What you get |
|---|---|---|---|
enrichCompany | company-enriched | +$0.002/job | Employer → SIREN, size, sector (NAF), category, active/ceased status |
enrichMarket | market-enriched | +$0.002/job | Recruitment tension per ROME × dept (hires, jobseekers, tension ratio+label) |
analyzeJobs | job-analyzed | +$0.01/job | AI summary, seniority, remote, red-flags + fit-score vs. candidate profile (paid Apify plan) |
Incremental mode (incrementalMode=true) charges only NEW + UPDATED offers on recurring runs — typically 70-95% cheaper for daily monitoring.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
keywords | string | — | Free-text search (title + description) |
location | string | — | 75D = Paris dept, 13D = Bouches-du-Rhône |
contractType | string | — | CDI, CDD, MIS, SAI, multiple via comma |
contractNature | string | — | E1 alternance, E2 apprentissage, FS formation |
experience | enum | — | 1 débutant, 2 exigé, 3 expérimenté |
qualification | string | — | 5 cadre, 3 technicien, etc. |
fullTimeOnly | bool | false | Only full-time |
minSalary | string | — | Annual minimum (30000) |
radiusKm | string | — | Search radius from location |
postedSince | enum | — | 1, 3, 7, 14, 31 days |
includePartners | bool | true | Include Indeed/Apec partner offers |
enrichCompany | bool | false | Resolve each employer → SIREN + company data (company-enriched event) |
enrichRome | bool | false | Attach ROME 4.0 métier reference (definition, appellations, emerging skills) — free |
enrichMarket | bool | false | Attach labour-market tension per ROME × dept (market-enriched event) |
analyzeJobs | bool | false | AI analysis + fit-scoring (job-analyzed event, paid plan) |
candidateProfile | string | — | Candidate/role description for AI fit_score |
incrementalMode | bool | false | Emit only NEW/UPDATED offers vs. last run |
includeExpired | bool | false | Also emit EXPIRED markers (not charged) |
stateKey | string | default | Baseline name for incremental mode |
maxResults | integer | 20 | 1–5000 (API caps a single query at ~1150) |
enrichDetails | bool | false | HTML fallback only — API already returns full detail |
proxyConfig | object | datacenter | HTML fallback only — France Travail rarely blocks |
Output example
{"id": "ABCD123","title": "Data Engineer Senior H/F","company": "Acme Tech","location": "Paris 9e (75009)","geo": { "lat": 48.8775, "lon": 2.3380, "label": "Paris 9e Arrondissement" },"department": "75","contract_type": "CDI","salary": "De 55 000 € à 75 000 € sur 12 mois","salary_parsed": {"raw": "De 55 000 € à 75 000 € sur 12 mois","min": 55000, "max": 75000, "currency": "EUR","period": "year", "is_range": true,"annualized_min": 55000, "annualized_max": 75000},"skills_detected": ["Python", "AWS", "Docker", "Kafka", "Snowflake", "SQL", "Airflow", "anglais"],"competences": [{ "code": "...", "libelle": "Python", "exigence": "E" }],"experience_years": 5,"education_level": "Bac+5 et plus ou équivalents","rome_code": "M1805","rome_label": "Études et développement informatique","sector": "Programmation informatique","apply_url": "https://acme.example/apply","posted_date": "2026-06-19","company_data": {"siren": "812345678", "legal_name": "ACME TECH SAS","naf_code": "6201Z", "category": "PME", "employee_range": "100-199","creation_date": "2015-03-01", "is_active": true, "risk_flag": null},"ai": {"summary": "Poste de data engineer senior pour bâtir la plateforme data.","seniority": "senior", "remote": "hybrid","must_have": ["Python", "AWS", "SQL"],"red_flags": [],"fit_score": 88, "fit_reason": "Stack Python/AWS alignée, séniorité correspondante.","recommended_action": "apply"},"scraped_at": "2026-06-20T14:32:01Z"}
company_dataappears withenrichCompany=true,aiwithanalyzeJobs=true.
Use cases
- 🎯 ATS auto-feed — daily import of new CDI/alternance offers matching company hiring filters
- 💼 Recruitment intelligence — track who's hiring what in any ROME code / department
- 💰 Salary benchmarking — aggregate
salary_parsedacross thousands of jobs by role + region - 🗺️ Geo job-map dashboards — leverage
geo.lat/lonfor interactive maps (Mapbox, Leaflet) - 📊 Labor-market analytics — track open job count per ROME × department × month
- 🤖 Career bots — alert candidates daily when matching jobs are posted (combine with diff)
- 🎓 Career coaching SaaS — show students alternance/apprentissage matching their CAP/BTS
Use the actor via API
Python:
import requestsrun = requests.post("https://api.apify.com/v2/acts/dltik~francetravail-scraper/run-sync-get-dataset-items",headers={"Authorization": "Bearer YOUR_APIFY_TOKEN", "Content-Type": "application/json"},json={"keywords": "développeur python","location": "75D","contractType": "CDI","experience": "2","postedSince": "7","enrichDetails": True,"maxResults": 50}).json()print(f"Scraped {len(run)} jobs")
curl:
curl -X POST "https://api.apify.com/v2/acts/dltik~francetravail-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords":"data engineer","location":"69D","contractType":"CDI","maxResults":100}'
FAQ
Does it use the official France Travail API?
Yes. This scraper runs on the official France Travail API (api.francetravail.io Offres v2), so you get clean, fully-structured data — real competences, ROME code, native lat/lon, structured salary. We carry the API credentials, so there's nothing for you to register or rotate: you just click Start. If the API is ever unreachable, the actor automatically falls back to the public-HTML search so a run never fails.
Can I use my own France Travail API credentials?
Yes — set FRANCETRAVAIL_CLIENT_ID and FRANCETRAVAIL_CLIENT_SECRET (from francetravail.io) as actor environment secrets and the actor will use them.
Does it cover alternance and stage?
Yes, via contractNature (E1 alternance, E2 apprentissage, FS formation). All major contract types supported.
ROME code support?
Every job comes back with its rome_code + rome_label from the official taxonomy, so you can group/aggregate by occupation. You can also search by ROME via the keywords filter.
Can I enrich the employer with company data?
Yes — set enrichCompany=true and each employer is resolved to its SIREN with size, sector (NAF), category (PME/ETI/GE) and active/ceased status. Pair it with our Pappers Sirene Scraper or BODACC Scraper for full company financials and court-procedure history.
How fresh is the data?
Pulled live at run time from the official France Travail API, so freshness matches France Travail itself. Use incrementalMode=true to poll daily and only pay for what changed.
Will France Travail block my runs? We've never been blocked at moderate volume (< 5000 jobs/run). Datacenter proxy is the default — toggle to residential only if you scrape at high frequency.
What's salary_parsed exactly?
A structured breakdown of the raw salary string: detects ranges (30k-45k), single values (30000), periods (year/month/hour), and auto-annualizes to a comparable yearly figure. Unlike other scrapers, you can filter and sort numerically.
⭐ Found this France Travail Scraper useful? Bookmark it — Apify ranks actors by bookmarks, so it's the strongest single signal for Store visibility. One click.
Other scrapers by dltik
| Actor | What it does | Price |
|---|---|---|
| Pappers Sirene Scraper | 26M French companies (SIREN, SIRET, dirigeants, capital) | $0.001/result |
| Pappers Enrichment Bundle | Bulk enrichment of SIREN lists with full company data | $0.005/result |
| Pappers MCP Server | French company data for AI agents (Claude / GPT) | $0.01/tool-call |
| BODACC Scraper | French commercial court announcements (creations, faillites, M&A) | $0.003/record |
| BODACC MCP Server | BODACC announcements for AI agents | $0.01/tool-call |
| HelloWork Scraper | France's #2 job board | $0.003/job |
| Welcome to the Jungle Scraper | Tech-focused FR/EU jobs | $0.003/job |
| JobTeaser Scraper | Student jobs, internships, alternance | $0.003/job |
| Malt Scraper | French freelancers (profiles, rates) | $0.005/profile |
| Annuaire Administration Française | French gov agencies & contacts | $0.003/org |
| TED Europa Scraper | EU public procurement tenders | $0.005/tender |
| Boamp Scraper | French national public procurement | $0.005/tender |
| ADEME DPE Scraper | Energy performance diagnostics for FR buildings | $0.002/DPE |
| HATVP Scraper | French elected officials' financial declarations | varies |
License: MIT · Author: dltik