France Travail Scraper — 961k+ French Jobs avatar

France Travail Scraper — 961k+ French Jobs

Pricing

from $0.49 / 1,000 results

Go to Apify Store
France Travail Scraper — 961k+ French Jobs

France Travail Scraper — 961k+ French Jobs

Scrape francetravail.fr — 961,000+ active listings. ROME code filter, city + GPS radius, incremental change-detection mode, server-side recency filter. Structured salary, ROME codes, skills & full descriptions. No API key required.

Pricing

from $0.49 / 1,000 results

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

10

Total users

6

Monthly active users

17 hours ago

Last modified

Share

France Travail Scraper

france-travail-scraper

Scrape structured job listings from France Travail (formerly Pôle Emploi) — France's official national employment service. 961,000+ active listings. No API key or proxy required.


Why this scraper?

🏛️ France's largest job database — 961,000+ listings

France Travail is the French government's national employment agency. Every employer posting a job vacancy in France is required to register it here — giving you the most complete picture of the French labour market.

🔍 ROME code targeting

Filter by France's official occupational classification (ROME). Instead of guessing keywords, target an entire profession: all software developers (M1861), all nurses (J1303), all accountants (M1607). No other scraper on Apify supports this.

Enter a city name and radius in km. The scraper resolves the city via the French government's geo API, then filters each listing by exact GPS coordinates — not just department. Lyon + 30km returns only listings physically within 30km.

🔄 Incremental mode

changedOnly: true emits only listings that are new or changed since your last run. Run daily and receive only the delta — no reprocessing of 961k records. Ideal for ATS feeds, alerting pipelines, and monitoring workflows.

📅 Server-side recency filter

publieeDepuis applies a date filter at the API level (1/3/7/14/31 days), reducing pages scanned before any post-processing. For daily feeds of new listings this cuts compute cost by 95%+ versus scanning the full index.

💰 Structured salary data

Three salary formats: salaryMin/salaryMax/salaryPeriod (structured numbers), salaryText (human-readable label), and salaryBenefits (bonus, profit sharing, transport). Salary comments auto-parsed for listings where the employer used free text.

🏷️ ROME codes + skills + formations in output

Every listing includes ROME occupational code, required competences, required formation level, languages, and driving licences — structured arrays, not just a text blob.

⚙️ No API key required

Runs without any third-party credentials. Uses France Travail's public search API.


Input parameters

ParameterTypeDefaultDescription
keywordsstring""Job title, skill, or sector keywords.
romeCodestring""ROME occupation code (e.g. M1861, J1303). Targets an entire profession.
citystring""City name (e.g. Paris, Lyon). Auto-resolves to department.
radiusinteger0Expand search to departments within N km of city centre (GPS-precise).
departmentsarray[]French department codes (e.g. 75, 69).
regionsarray[]French region codes (e.g. 11 for Île-de-France).
contractTypesarray[]CDI, CDD, Interim / Temporary, Freelance / Liberal, Seasonal, Franchise, Commercial contract.
experiencearray[]No experience required, 1-3 years, 3-5 years, 5+ years.
qualificationLevelstring""Qualification level from Manoeuvre to Cadre (director level).
fullTimeOnlybooleanfalseFull-time positions only.
partTimeOnlybooleanfalsePart-time positions only.
teleworkOnlybooleanfalseRemote / telework positions only.
handicapFriendlybooleanfalseDisability-friendly employers only.
alternanceOnlybooleanfalseApprenticeship / work-study only.
sortBystringpertinencepertinence (relevance) or date (most recent first).
publieeDepuisinteger0Server-side recency filter in days (1/3/7/14/31). Faster than post-filtering.
daysOldinteger0Post-filter precision: only listings within N days old.
skipRepostsbooleanfalseSkip listings already seen in a previous run (90-day dedup window).
changedOnlybooleanfalseIncremental mode — only emit new or changed listings since last run.
maxResultsinteger100Maximum listings to save.
startUrlsarray[]Specific offer URLs to scrape directly.

Output schema

Each result contains the following fields.

Always present:

FieldTypeDescription
idstringUnique offer ID from France Travail.
urlstringDirect URL to the listing.
titlestringJob title as published.
companyNamestringEmployer name.
locationstringFull location string (e.g. 38 - GRENOBLE).
citystringCity of work location.
departmentstringDepartment name (e.g. Isère).
departmentCodestringDepartment code (e.g. 38).
regionstringRegion name.
regionCodestringRegion code.
postalCodestringPostal code.
latitudenumberGPS latitude of work location.
longitudenumberGPS longitude of work location.
contractTypestringContract type (e.g. CDI, Contrat travail).
contractCodestringAPI contract code (CDI, CDD, MIS…).
workSchedulestringWork hours string (e.g. 37H30/semaine).
isFullTimebooleanTrue for full-time positions.
isAlternancebooleanTrue for apprenticeship contracts.
isHandicapFriendlybooleanTrue for disability-inclusive employers.
publishDateISOstringPublication date (ISO 8601).
updatedDateISOstringLast update date (ISO 8601).
romeCodestringROME occupation code (e.g. M1861).
romeLabelstringROME occupation label.
sectorstringNAF sector label.
sectorCodestringNAF sector code.
qualificationstringQualification level label.
experienceRequiredstringExperience requirement label.
experienceCodestringExperience code (D, 1, 2, 3).
skillsarrayRequired competences (structured list).
formationsarrayRequired formation levels.
languagesarrayRequired languages.
drivingLicensesarrayRequired driving licences.
nbPositionsintegerNumber of positions available.
descriptionstringFull job description (HTML).
descriptionTextstringFull job description (plain text).
descriptionMarkdownstringFull job description (Markdown).
applyUrlstringDirect application URL (where provided, ~30% of listings).
sourcestringAlways francetravail.fr.
scrapedAtstringScrape timestamp (ISO 8601).
contentHashstringMD5 fingerprint of title + description (used for change detection).
isRepostbooleanTrue if seen in a previous run.
isChangedbooleanTrue if listing content changed since last run.
originalPublishDatestringDate first seen (if repost).

Salary fields (populated where employer provided data):

FieldTypeDescription
salaryMinnumberMinimum salary.
salaryMaxnumberMaximum salary.
salaryPeriodstringMensuel, Annuel, or Horaire.
salaryCurrencystringAlways EUR when salary is present.
salaryTextstringHuman-readable salary label.
salaryBenefitsarraySalary supplements (bonus, profit sharing, transport…).
salaryMonthsnumberMonths of salary per year (e.g. 13).

Company fields (where available):

FieldTypeDescription
companyDescriptionstringCompany description text.
companyUrlstringCompany website URL.

Example input configurations

1. Daily feed of new developer jobs in Paris

{
"keywords": "développeur",
"departments": ["75"],
"sortBy": "date",
"publieeDepuis": 1,
"daysOld": 1,
"skipReposts": true,
"maxResults": 500
}

2. All nurses within 50km of Lyon (incremental)

{
"romeCode": "J1303",
"city": "Lyon",
"radius": 50,
"changedOnly": true,
"maxResults": 1000
}

3. Executive CDI jobs in Île-de-France

{
"keywords": "directeur",
"regions": ["11"],
"contractTypes": ["CDI"],
"qualificationLevel": "Cadre (director level)",
"maxResults": 200
}

4. Recent alternance listings nationwide

{
"alternanceOnly": true,
"sortBy": "date",
"publieeDepuis": 7,
"maxResults": 500
}

Scheduling for daily feeds

France Travail receives tens of thousands of new listings every day. For monitoring pipelines:

  1. Set publieeDepuis: 1 — filters at the API level to yesterday's listings only.
  2. Set sortBy: date — most recent first.
  3. Set skipReposts: true or changedOnly: true — skip anything seen in a prior run.
  4. Schedule via Apify Schedules at your preferred cadence (daily, hourly).

This pattern scans only ~8,000–15,000 listings instead of 961,000 — dramatically lower compute and PPE cost.

Other scrapers in our Jobs — France collection:


Need a custom scraper?

Unfenced Group builds pay-per-result scrapers for any job board, real estate platform, or directory worldwide. You only pay for results — we absorb compute and proxy costs.

Request a custom scraper →