France's public employment service, free after a short OAuth registration.
The official route
France Travail publishes the Offres d'emploi v2 API: the national vacancy database, free, behind a client_credentials registration on francetravail.io. Search answers with HTTP 206 and a Content-Range, 150 results per page, 3,149 per query, so full coverage takes deliberate paging. And it is one country in one schema: Nivult unifies it with 60+ private ATS sources in a single feed.
# 1. token (registration on francetravail.io) curl -X POST "https://entreprise.francetravail.fr/connexion/oauth2/access_token?realm=/partenaire" \ -d "grant_type=client_credentials&client_id=$ID&client_secret=$SECRET&scope=api_offresdemploiv2" # 2. search (answers 206 with Content-Range) curl -H "Authorization: Bearer $TOKEN" \ "https://api.francetravail.io/partenaire/offresdemploi/v2/offres/search?motsCles=soudeur"
The Nivult route
Reading France Travail (France) yourself buys you one source and a maintenance burden. The Nivult index already reads France Travail (France) next to 77+ other career systems, every day, in one schema: seniority, workplace, language, skills and a salary signal added by our own measured models. A posting is marked closed only when it leaves the employer's page, never because it grew old.
Free sample export on the actor page · no credit card required
Live right now
Counted on active postings in our index, 10 Oct 2026. Company names come from our employer spine, with the board slug as fallback.
| # | Company | Active postings |
|---|---|---|
| 1 | pole-emploi | 56,287 |
Real rows, real links
The most recent live France Travail (France) postings in the index. Links go to the employer's own page, where the posting either still stands or shows its closure.
The shape of the feed
The first posting above, serialized with the field names of the daily export. Fields we could not measure on this row are simply absent: a declared salary appears as salary_observed_*, and when the employer declares nothing the modelled salary_estimate_* fields take its place in the full export.
{
"title": "Serveur / Serveuse - Bar Tabac (H/F)",
"company": "pole-emploi",
"ats": "francetravail",
"country": "FR",
"city": "42 - ST ETIENNE",
"posted_at": "2026-10-10",
"url": "https://candidat.francetravail.fr/offres/recherche/detail/215BRTX"
}
Before you ask
Yes. France Travail (France) serves public job board data as JSON with no API key. The exact endpoint and a working request are in the «The official route» section above. What no single endpoint gives you is the whole market: you still need to know every company board, fetch each one, and notice yourself when a posting disappears.
As of the last refresh (10 Oct 2026), our index holds 56,287 active France Travail (France) postings across 1 companies. A posting counts as active only while it appears on the employer's own board; when it leaves the source we mark it closed, we never let it age out silently.
Through the Nivult index: France Travail (France) postings arrive already unified with 77+ other ATS sources in one schema, enriched with seniority, workplace, language, skills and a salary signal. Start with the free sample on the Apify actor linked above, or book a call for the full daily export.
The free API covers France, in the national schema, with a 3,149-result cap per query that makes full exports an engineering task. Nivult ships the same market already unified with 60+ private sources, one schema, verified closures.
Numbers on this page are measured from our own index of employer career systems, refreshed daily. The «last refresh» date is the timestamp of the last real data change, not the page build time. How we collect data · All ATS sources