Francetravail Scraper | Job Offers and Salaries avatar

Francetravail Scraper | Job Offers and Salaries

Pricing

from $1.68 / 1,000 jobs

Go to Apify Store
Francetravail Scraper | Job Offers and Salaries

Francetravail Scraper | Job Offers and Salaries

France Travail scraper (ex Pôle emploi): export French job offers by keyword, location, link or offer number. 20 jobs in 9 seconds, 42 fields each: full description, ROME code, contract, salary range, skills, company, city, coordinates and the apply link. No login, partner job boards included.

Pricing

from $1.68 / 1,000 jobs

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Francetravail Scraper (France Travail, Pôle emploi) | Job Offers, Salaries and Skills (2026)

Francetravail jobs, 42 fields each, from any search.

From SilentFlow. Creators of Facebook Search Scraper and JD Products Scraper (#1 for “jd scraper” in Apify Store search), with 850,000+ combined lifetime runs.

Every job offer on France Travail, the French public employment service once called Pôle emploi, as one clean row: the full description, the ROME occupation code, the contract, the salary as numbers, the skills, the company, the city and its coordinates, and the link to apply. Our default test run typed développeur and saved 20 offers in 9 seconds, out of 6,167 matching offers across France, with 39 data fields filled on at least half of the rows.

Why choose this actor?

Copying France Travail offers into a spreadsheet one tab at a time? Reading "Annuel de 45000.0 Euros à 55000.0 Euros" and typing the numbers by hand? Getting a title, a company and a city from a scraper, but not the skills, the ROME code or where to apply?

  • 39 fields filled per offer, not 20. In our default run of 20 offers, 39 data fields held a value on at least half of the rows: ID, link, title, full description, ROME code, ROME occupation, contract type and nature, work time, weekly schedule, qualification, experience, whether experience is required, skills, soft skills, benefits, travel, sector, company name, employer page, salary text, minimum, maximum, currency and period, location, city, département, region, country, latitude, longitude, posting date, last update, source, partner flag, disability-friendly flag, few-applicants flag and the apply link. Education, languages, driving licences, company description and website come on top whenever the offer states them.
  • Start from a keyword, a France Travail link or an offer number, in the same run. Type a job title, paste any search, job page or offer address from candidat.francetravail.fr, or list the offer numbers you follow. In our test, a search link with its filters plus three offer numbers returned 25 offers in 11 seconds, and the offer number that had left the site was named in the log instead of failing the run. A job page link (/offres/emploi/commercial/paris/...), which shows only 20 offers on the site, was read as the full search behind it: 3,911 matching offers, the first 30 saved in 13 seconds.
  • Salary as numbers, skills as a list, and the place on a map. In the default run, 18 of the 20 offers came with salaryMin, salaryPeriod and salaryCurrency ready to sort (15 yearly, 3 monthly), 18 carried their list of required skills (48 skills in total), 18 had latitude and longitude, and all 20 had a ROME code, a region and a link to apply.

Try Francetravail Scraper

Try your first 20 job offers

Paste this input in the JSON tab of the Input page and press Start. It reads the 20 most relevant offers France Travail shows for développeur across France, each completed with its full offer page and its apply link.

{
"searchQueries": ["développeur"],
"maxItems": 20
}

It runs on the Apify Free plan. Each offer becomes one row of your dataset: open the Output tab to see the "Job offers" table with the title, company, city, contract, salary, posting date and link, or switch to the "Skills and requirements" view for the ROME code, occupation, qualification, experience, education and skills. Export the rows as JSON, CSV or Excel, or pull them from the API into your own tools.

How it works

Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it the full context of this scraper:

You have access to the France Travail Scraper on Apify: silentflow/francetravail-scraper
It reads candidat.francetravail.fr (France Travail, formerly Pôle emploi), the French public job board,
including the offers it lists from partner job boards. No login, no API key.
Input (all optional; with nothing given it searches "développeur" across France):
- searchQueries (array of strings): job titles or skills, one search each (développeur, infirmier, comptable).
- location (string): a city (Lyon), a postal code (69002), a département number or name (33, Gironde),
a region (Bretagne) or a France Travail place code (75D, 11R). Empty = all of France. Cities include 10 km around.
- startUrls (array of {url}): candidat.francetravail.fr search pages (filters kept), job pages (/offres/emploi/...)
and offer pages (/offres/recherche/detail/215XBLY).
- jobIds (array of strings): offer numbers (215XBLY, 8449679).
- maxItems (integer, default 50): most offers for the whole run. The site pages through 1,150 offers per search.
- contractTypes (array): CDI | CDD | MIS (temp) | SAI (seasonal) | DIN | LIB (freelance) | CCE | FRA | REP.
- postedWithin (string): "1" | "3" | "7" | "14" | "31" days.
- sort (string, default "relevance"): relevance | date.
- includePartnerOffers (boolean, default true): include offers from partner job boards.
Output, one row per offer:
- id (string), url (string), title (string)
- description (string), romeCode (string), romeLabel (string)
- contractType (string: CDI, CDD, Intérim...), contractDuration (string|null: "12 Mois"), contractNature (string|null)
- workTime (string|null: Temps plein, Temps partiel), workSchedule (array of strings)
- qualification (string|null), experience (string|null), isExperienceRequired (boolean|null)
- education, skills, softSkills, languages, drivingLicences, benefits (arrays of strings, null when absent)
- travel (string|null), sector (string|null)
- companyName, companyDescription, companyUrl, employerPageUrl (string|null)
- salary (string|null, as written), salaryMin, salaryMax (number|null), salaryCurrency ("EUR"|null),
salaryPeriod ("year"|"month"|"week"|"day"|"hour"|null)
- location (string: "31 - Toulouse"), city, departmentCode, region (string|null), countryCode ("FR")
- latitude, longitude (number|null)
- postedAt, updatedAt (RFC 3339, midnight Paris time, null when the site gives no exact day)
- source (string: "France Travail" or the partner board), isPartnerOffer, isDisabilityFriendly, hasFewApplicants (boolean|null)
- applyUrl (string|null)
- position (integer), searchQuery (string|null), scrapedAt (RFC 3339 UTC)
Use apify-client for Python or JavaScript: client.actor("silentflow/francetravail-scraper").call(run_input=...).

How to scrape France Travail job offers

Get the newest offers for one job title

One keyword, sorted by date. The first page comes back in a few seconds with the full offer behind every card.

{
"searchQueries": ["aide-soignant"],
"sort": "date",
"maxItems": 25
}

List permanent nursing jobs in Lyon

A keyword, a city typed in plain words and one contract type. In our test this returned 30 CDI offers in 12 seconds, out of 543 matching offers in Lyon and the towns within 10 km (Villeurbanne, Bron, Craponne, Sainte-Foy-lès-Lyon).

{
"searchQueries": ["infirmier"],
"location": "Lyon",
"contractTypes": ["CDI"],
"maxItems": 30
}

Watch every new offer of a region this week

No keyword at all: a region, the last 7 days, newest first, and only the offers posted on France Travail itself. Our test saved 40 offers from Bretagne in 16 seconds, out of 2,673 published that week.

{
"location": "Bretagne",
"postedWithin": "7",
"sort": "date",
"includePartnerOffers": false,
"maxItems": 40
}

Input parameters

ParameterTypeDefaultWhat it does
searchQueriesarray of strings["développeur"] in the formJob titles or skills to search, one search per line. An offer found by two keywords counts once.
locationstringall of FranceA city, a postal code, a département number or name, a region, or a France Travail place code. A city also covers 10 km around it.
startUrlsarray of linksnoneSearch pages, job pages and offer pages copied from candidat.francetravail.fr.
jobIdsarray of stringsnoneOffer numbers such as 215XBLY or 8449679. One row each, whatever the filters.
maxItemsinteger50The most offers the run returns, all inputs together.
contractTypesarrayevery contractCDI, CDD, MIS (temp work), SAI (seasonal), DIN (CDI intérimaire), LIB (freelance), CCE (sales agent), FRA (franchise), REP (business takeover).
postedWithinstringevery offer1, 3, 7, 14 or 31 days.
sortstringrelevancerelevance puts the best matches first, France Travail's own offers ahead. date puts the newest first.
includePartnerOffersbooleantrueAdds the offers France Travail lists from partner job boards such as HelloWork, APEC, Cadremploi or Meteojob.

Accepted formats

  • Locations: Lyon, Saint-Malo, Aix-en-Provence (city names, accents optional), 69002 or 33000 (postal codes), 33, 2A or 974 (département numbers), Gironde or Seine-Saint-Denis (département names), Bretagne, ile de france or Provence-Alpes-Côte d'Azur (regions), and the site's own codes 75D (département), 11R (region) or a five-digit commune code. France or an empty field searches the whole country.
  • Links: https://candidat.francetravail.fr/offres/recherche?motsCles=comptable&lieux=75D&typeContrat=CDI (a search, its filters kept), https://candidat.francetravail.fr/offres/emploi/infirmier/s36m2 (a job page, read as the full search behind it), https://candidat.francetravail.fr/offres/recherche/detail/215XBLY (one offer). Old candidat.pole-emploi.fr addresses work too.
  • Offer numbers: 215XBLY, 215xbly, Offre n° 215XBLY or 8449679 (partner offers have a number of digits only).
  • Contract types: the codes above, or their names (intérim, saisonnier, freelance, Profession libérale).

What data can you extract from France Travail?

Each row is one job offer, with 45 data fields grouped the same way every time: identity, the job itself, the company, the pay, the place and the dates, then where it comes from and where to apply.

GroupFields
Identityid, url, title
The jobdescription, romeCode, romeLabel, contractType, contractDuration, contractNature, workTime, workSchedule, qualification, experience, isExperienceRequired, education, skills, softSkills, languages, drivingLicences, benefits, travel, sector
The companycompanyName, companyDescription, companyUrl, employerPageUrl
The paysalary, salaryMin, salaryMax, salaryCurrency, salaryPeriod
Place and timelocation, city, departmentCode, region, countryCode, latitude, longitude, postedAt, updatedAt
Origin and linkssource, isPartnerOffer, isDisabilityFriendly, hasFewApplicants, applyUrl
Runposition, searchQuery, scrapedAt

A few facts that help when you use the data:

  • id is France Travail's offer number and url is the offer's permanent page: both are safe keys for a database or a daily diff.
  • romeCode is the code of the French ROME classification of occupations (M1805 is software development, J1506 nursing), the same code France Travail and French labour statistics use, so you can group offers by occupation instead of by free-text title.
  • salary keeps the text exactly as the employer wrote it; salaryMin, salaryMax and salaryPeriod are read from it when it holds amounts. A salary written as "selon expérience" keeps its text and leaves the numbers null.
  • postedAt and updatedAt are RFC 3339 dates at midnight, Paris time (2026-10-31T00:00:00+01:00).
  • applyUrl is the recruiter's own application page when the offer has one, the partner job board's page for partner offers, and the France Travail application page otherwise.
  • The row text is in French, as published.

Output example

One complete row from our default run (the description is shortened here; the dataset holds it in full):

{
"id": "215XBLY",
"url": "https://candidat.francetravail.fr/offres/recherche/detail/215XBLY",
"title": "Commercial Développeur Quart Sud-Ouest (H/F)",
"description": "L'entreprise\nLe client de Triptolème est un acteur majeur de la maintenance des infrastructures électriques critiques. En forte croissance, il ambitionne de devenir une référence nationale sur son marché grâce à une expertise reconnue, des contrats récurrents ...",
"romeCode": "H1102",
"romeLabel": "Ingénieur(e) technico-commercial(e) affaires industrielles",
"contractType": "CDI",
"contractDuration": null,
"contractNature": "Contrat travail",
"workTime": "Temps plein",
"workSchedule": ["35H1/semaine", "Travail en journée"],
"qualification": "Cadre",
"experience": "5 An(s)",
"isExperienceRequired": true,
"education": ["Bac+2 ou équivalents"],
"skills": [
"Négocier des solutions techniques ou financières avec un client",
"Recueillir et analyser les besoins client",
"Cadre réglementaire environnemental"
],
"softSkills": [
"Faire preuve de rigueur et de précision",
"Organiser son travail selon les priorités et les objectifs",
"Faire preuve de persévérance"
],
"languages": null,
"drivingLicences": ["B - Véhicule léger"],
"benefits": ["Primes", "Véhicule", "Téléphone mobile", "Ordinateur portable", "Titres restaurant / Prime de panier"],
"travel": "Fréquents Zone régionale",
"sector": "Conseil pour les affaires et autres conseils de gestion",
"companyName": "TRIPTOLEME RECRUTEMENT",
"companyDescription": "Triptolème Recrutement est un cabinet dédié au monde agricole",
"companyUrl": null,
"employerPageUrl": "https://recrute.francetravail.fr/page-employeur/triptoleme-recrutement-569",
"salary": "Annuel de 45000.0 Euros à 55000.0 Euros",
"salaryMin": 45000,
"salaryMax": 55000,
"salaryCurrency": "EUR",
"salaryPeriod": "year",
"location": "31 - Toulouse",
"city": "Toulouse",
"departmentCode": "31",
"region": "Occitanie",
"countryCode": "FR",
"latitude": 43.63786,
"longitude": 1.464,
"postedAt": "2026-10-31T00:00:00+01:00",
"updatedAt": "2026-10-31T00:00:00+01:00",
"source": "France Travail",
"isPartnerOffer": false,
"isDisabilityFriendly": false,
"hasFewApplicants": false,
"applyUrl": "https://candidat.francetravail.fr/candidature/postulerenligne/215XBLY",
"position": 1,
"searchQuery": "développeur",
"scrapedAt": "2026-11-01T04:04:03Z"
}

Advanced usage

Job pages such as "Commercial à Paris" show only 20 offers on France Travail. Paste the page address: the run reads its heading, finds the job and the place, and pages through the whole search. In our test this page matched 3,911 offers and the first 30 were saved in 13 seconds, from Paris and the Hauts-de-Seine, Seine-Saint-Denis and Val-de-Marne around it.

{
"startUrls": [
{ "url": "https://candidat.francetravail.fr/offres/emploi/commercial/paris/s11m27v1" }
],
"maxItems": 30
}

Check that the offers you track are still open

Schedule a daily run on the offer numbers you follow. Offers that are still online come back with their latest description, salary and update date; offers that have been filled or withdrawn are named in the log and add no row.

{
"jobIds": ["215XBLY", "8449679", "214WBXQ"]
}

Build a lead list of companies hiring sales staff in a département

A keyword, a département number and the last 14 days. Each row carries the company name, its employer page on France Travail when it has one, its website when the offer gives it, the sector and the apply link: enough to qualify the company before you call. Group the rows by companyName to see who is hiring the most.

{
"searchQueries": ["commercial", "technico-commercial"],
"location": "33",
"postedWithin": "14",
"maxItems": 200
}

Benchmark salaries for one occupation across regions

Run one search per region with the same keyword and keep salaryMin, salaryMax, salaryPeriod and region. Rows whose salary is a monthly or hourly figure say so in salaryPeriod, so you can convert before you compare. Leave the partner boards off for a fuller salary column: in our tests, 18 of 20 offers posted on France Travail carried salary amounts, against 9 of 40 partner offers.

{
"searchQueries": ["comptable"],
"location": "Auvergne-Rhône-Alpes",
"includePartnerOffers": false,
"maxItems": 300
}

Feed new seasonal and temp jobs into your own job board

Two contract types, offers of the last 24 hours, newest first, partner boards included. Schedule it every morning and import the rows by id: an offer seen yesterday keeps the same id and url, so your board updates instead of duplicating.

{
"searchQueries": ["serveur", "cuisinier", "réceptionniste"],
"contractTypes": ["SAI", "MIS"],
"postedWithin": "1",
"sort": "date",
"maxItems": 500
}

FAQ

What is France Travail? France Travail is the French public employment service. It was called Pôle emploi until January 2024, and its site candidat.francetravail.fr is one of the largest job boards in France: it carries the offers employers post with France Travail and, next to them, the offers of partner job boards such as HelloWork, APEC, Cadremploi and Meteojob. A search for développeur alone matched 6,167 offers on the day of our test. It plays the role the state job centres play elsewhere, with a public search open to everyone.

What does one row contain? One job offer: the title, the full description, the ROME code and occupation, the contract type, duration and nature, the work time and schedule, the qualification and experience asked, the education, skills, soft skills, languages and driving licences listed, the benefits, the travel, the sector, the company, the salary as written and as numbers, the place down to the city and its coordinates, the posting and update dates, the source and the link to apply. Fields the offer does not state are null.

Do I need a France Travail account or an API key? No. The actor reads the public job search, exactly as any visitor sees it. There is no account to create, no developer key to request and no login to share.

How many offers can one run return? As many as you set in maxItems, across all your keywords, links and offer numbers. One search on France Travail can be paged through up to 1,150 offers, the limit the site applies to every visitor: when a search matches more, the run says so in its log. To reach the others, split the search with a location, a contract type or a date filter, or run several keywords in one run.

Why do partner offers have fewer fields? Offers from partner job boards (HelloWork, APEC, Cadremploi and others) reach France Travail with a shorter record: the title, description, ROME code, contract, salary when given, company, place and dates are there, but the skills, education and benefits lists usually are not. Their row links to the original posting in applyUrl and names the board in source. In our test of 40 partner offers sorted by date, 23 data fields were filled on at least half of the rows. Set includePartnerOffers to false to keep only the offers posted on France Travail itself.

Why is postedAt empty on some rows? France Travail shows the age of an offer in the search results ("Publié il y a 3 jours"), and the run turns it into a date. Offers older than 30 days are only shown as "plus de 30 jours", and offers read by their number do not go through the search results, so those rows have postedAt as null. Every row read from an offer page still has updatedAt, the day the offer was last changed.

Can I combine filters? Yes. Keywords, location, contract types, the publication window and the sort all apply together to every keyword search: infirmier with Lyon, CDI and 7 days returns the permanent nursing offers of the last week in Lyon and around it. Links keep the filters they were copied with, and offer numbers always return their row.

How fresh is the data? Live. Every run reads France Travail at the time it runs, with no cache in between. Schedule the actor hourly or daily to follow new offers; the id of an offer never changes, so you can keep only the ones you have not seen yet.

Are the links permanent? url is the permanent page of the offer on France Travail and stays valid as long as the offer is online. Once an offer is filled or withdrawn, France Travail removes it and its page stops answering; reading it by number then reports it as no longer on the site. applyUrl points to the recruiter's or the partner board's page and follows their own rules.

Which language is the data in? French, as the employers write their offers. Field names are in English and stay the same for every row. Contract types use France Travail's own labels (CDI, CDD, Intérim, Saisonnier, Profession libérale).

More SilentFlow scrapers

🛒 E-commerce

💼 Jobs

🏠 Real estate

📣 Social media

🏢 Business data

✈️ Travel

🎯 Lead generation

🔎 SEO

📈 Marketing

🎬 Video

📰 News

🧰 More tools

Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

This Actor extracts publicly available data from candidat.francetravail.fr, the public job search of France Travail. It does not bypass any login, paywall or CAPTCHA, and it reads only what the site shows to every visitor. Users are responsible for complying with France Travail's terms of use and applicable data protection laws (GDPR, CCPA, and PIPL where relevant). Job offers are published by employers to be read widely, but some descriptions name a recruiter or a contact person: when the output contains such personal data, handle it accordingly and do not use it for unsolicited bulk messaging. The data returned is informational; check the offer on France Travail before applying, as offers can change or close between the run and your use.

France Travail Scraper by SilentFlow: every French public job offer, with its skills, salary and apply link, one clean row per offer.