CIIFragments Studio is CII-accredited: recover up to 20% of your software development spendLearn more

API integration for France Travail

We build your France Travail connector

We wire France Travail APIs into your careers site, ATS or HR tool: official listings, ROME occupations, local labour tension. Without scraping the public site.

  • Senior product team
  • public-data connectors in production
  • from scoping to monitoring
In short

What does the France Travail API provide and which tools should integrate it?

France Travail (formerly Pôle emploi) exposes public APIs covering job listings, ROME skills framework and labour market indicators. You integrate them into HR platforms, recruitment tools or career guidance applications to display live job postings, suggest training based on a job title, or enrich a job description with the associated ROME competencies. Access is free after registration on the developer portal; each API requires a separate subscription.

Use cases

What our clients build on the France Travail API

01

A territorial offers widget

A municipality or development-agency site: the official feed, not a scrape of francetravail.fr.

02

Enriching an ATS / job board

France Travail offers and consenting partners, with redistribution terms respected.

03

ROME occupation autocomplete

A hiring or training form: we store the occupation code, not only the label.

04

Occupation tightness on a territory

Labour Market API for an HR firm or an OPCO: « tightness on occupation X in the 44 », admin sources already crossed.

For you

What it changes on your careers site

Engineering in service of a measurable outcome: the official listing, access that works, no illegal scrape.

Access is opened before coding

Without the right portal subscription, nothing works. We validate access up front: weeks of debugging avoided.

We search, we do not download everything

The product queries and follows updates. Paginating the whole base every ten minutes is not a product.

Old Pôle emploi URLs are cleaned up

A legacy host can still answer and hide debt. We move to francetravail before it breaks silently.

Listings ≠ a claimant's status

Listings go through a developer account. A user's status is API Particulier with accreditation. We do not mix the two.

Method

How we ship your France Travail connector

01

Scoping

Offers, ROME, labour market: which APIs, which scopes, which redistribution. We subscribe before writing the client.

02

Development

OAuth client with a token cache, secrets in a vault, a limiter, local storage of offers already seen, ROME mapping by code.

03

Acceptance testing

invalid_client without a subscription, missing scopes, replay on your ROME codes / départements, cache fallback if the API drops.

04

Monitoring

401 / 429 alerts, freshness of the offer cache, token expiry. The careers site does not empty if FT is down.

The API

What the France Travail API allows

Offers search v2
Filters on occupations, municipalities, départements, contract types. Offers collected by France Travail and consenting partners.
Offer detail and reference data
One offer, places, contracts, occupations, training, sectors. Enough to prefill a job sheet, not enough to dump the base.
ROME 4.0
Four APIs: skills, occupations, work contexts, occupation sheets. The reference OPCOs no longer recode by hand.
Labour market
Jobseekers, offers, hires, tightness, offered wages. Sources FT, ACOSS, CCMSA, DARES. Quarterly update.
Glossary

The vocabulary of the France Travail API

Subscription
The application must be subscribed to each API. Without that, invalid_client. Same reflex as PISTE or the Météo-France portal: an empty account does nothing.
o2dsoffre / api_offresdemploiv2
Example of offers scopes. A missing scope = token refused or 403. Each API has its own, composed at scoping.
ROME 4.0
Occupation / skills reference (March 2023). Four APIs. The occupation code is stored, the label is displayed.
dateActualisation
The field used to reread only the delta. Without it, you re-download what you already have. With ~500,000 offers / day on the site, the connector searches, it does not dump.
francetravail.io
The current portal. api.emploi-store.fr and pole-emploi.fr paths in business code are suspect. A PE token that still answers is a trap.
invalid_client
Symptom number one: id/secret are right, subscription is missing. Documented in five minutes on the portal, not in three days of logs.
Good to know

The real constraints of the France Travail API

01

2024 rename: Pôle emploi → France Travail

Hosts, scopes, docs. Any api.emploi-store.fr snippet is debt. A PE token that still answers is worse than a 404: the code looks healthy.

02

Subscribing is not creating an app

Without a subscription, invalid_client. Same mechanic as Météo-France and PISTE. We check it at scoping, not in client UAT.

03

This is not an allottee's status

Offers = a developer account. A person's jobseeker status = API Particulier, DataPass. A job board does not need the second; a CCAS does not need the first.

04

No webhook, so a poll under quota

Ceilings are read in the portal after an account. We do not publish a third-party figure. A limiter, 429 backoff, cache, a clear User-Agent.

Offers or status

France Travail Offers API or API Particulier?

Two « France Travail » in search engines. One is a job board, the other a social procedure.

CriterionFrance Travail OffersOfficial job boardAPI ParticulierA user's status
SubjectPublic job offersAn allottee's status and payments
AccessDev account, subscriptionDataPass, public-service mission
Open-ishYes, after an accountNo, authorisation
Hostapi.francetravail.ioparticulier.api.gouv.fr
AuthOAuth2 client_credentialsJWT Bearer
Front endServer token, not in a SPAForbidden, CORS refused
The right caseCareers site, ATS, OPCOCCAS, social pricing

We combine them only if the product truly has both needs. Otherwise we pick one, and we stop merging them in the same quote.

Our expertise

What we measure on a France Travail integration

15 d
first offer feed in production
1 app
sandbox / prod, versioned subscriptions
delta
reread on dateActualisation, not a dump
4
senior developers on the project

We combine France Travail with

The stack around offers on our projects.

  • PostgreSQL
  • Redis
  • n8n
  • TypeScript
  • Node.js
FAQ

France Travail integration: your questions

An account on francetravail.io, an application, a subscription to each useful API, OAuth2 client_credentials on entreprise.francetravail.fr (grant_type, client_id, client_secret, scope). Cache the token from expires_in, secrets in a vault, one sandbox / prod app. Then search a perimeter (ROME, département), store offers already seen, reread the delta. A clear User-Agent, a limiter calibrated on the portal quota, 429 backoff. If the API drops, we do not empty the careers-site cache.

Almost always: the application is not subscribed to the API, or a scope is missing (api_offresdemploiv2, o2dsoffre, and so on). The keys can be right. That is bug number one, documented in five minutes on the portal. The second trap is a host still on pole-emploi.fr: it answers, so nobody migrates. We check it at scoping, on the portal, before writing the OAuth client. That avoids three days of logs for an unticked box.

The Offers API exposes public ads, with a developer account. API Particulier exposes an allottee's status, under DataPass, for a social procedure. One feeds a job board; the other a CCAS file. Mixing them in the same connector is a pre-sales error, not a technical shortcut. An ATS does not need allottee status; a CCAS does not need the offer feed. We pick one, we do not merge the quote. Mixing them in one quote is the pre-sales error this page exists to stop.

About 500,000 offers online a day: you do not « download the base ». You search a perimeter, paginate with care, store what you have already seen. No documented webhook, so a poll under the portal quota. A bulk extract is a scoping discussion; it is not the default of a territorial widget. Redistribution terms for partner offers are in the portal terms: not every offer has the same republication right.

Partner access is free after an account. The cost is the connector: OAuth, subscriptions, cache, delta, ROME, redistribution terms. An offers widget on three départements is a short job. An ATS that republishes partner offers, plus ROME and the labour market, is a project. We scope the perimeter and give a firm estimate before we start. Versioned subscription (sandbox / prod) and ROME mapping by code are part of the deliverable, not an option.

A France Travail integration project?

Let's talk. 30 minutes to scope offers, ROME or the labour market, check the subscription, and tell you frankly what is feasible.

Discuss my France Travail project
Discuss my France Travail project