
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Export job offers from France Travail (formerly Pôle emploi), France's public job board with 700,000+ offers. Search by keyword, city, department or region with contract, experience, salary, working time and date filters, or paste search and offer links. Get salary ranges, contract, ROME code, skills, education, geo coordinates, apply links and the full description. No login needed.
Export job offers from France Travail (formerly Pôle emploi), France's public job board with 700,000+ live offers. Search by keyword and place with contract, experience, salary and date filters, and get clean rows with salary ranges, ROME codes, skills, education, geo coordinates, apply links and the full description. No login, no API key, no account.
développeur, comptable, aide-soignant) and a location (Paris, Lyon, Gironde, Bretagne, 75015 or France). Or paste France Travail search or offer links.| Field | What it does |
|---|---|
keywords | Job titles, skills or companies, one search each |
location | City, department, region, postcode or France (site location codes like 75D work too) |
startUrls | France Travail search links, landing pages, offer links or offer numbers |
maxResults | Offers to save in total (0 = no limit) |
contractType, experience, qualification, workingTime | Contract, experience, cadre status and working-time filters |
postedSince, minSalary + salaryPeriod, radiusKm | Date, pay and distance filters |
includeDetails, includeApplyInfo | Open each offer (full data) and fetch apply links (both on by default) |
{
"keywords": ["comptable"],
"location": "Lyon",
"maxResults": 50,
"contractType": ["CDI"],
"postedSince": "7",
"sortBy": "date"
}
| Field | Example |
|---|---|
id, url | 215KSZS, offer link |
title, company | Job title and employer |
location, city, department, latitude, longitude | Work place |
contract_type, contract_type_label, contract_duration, alternance | CDI, Intérim, 6 Mois, false |
salary, salary_min, salary_max, salary_period, salary_parsed | Raw text plus parsed numbers and a yearly figure |
rome_code, appellation, sector, qualification_label | Occupation code, job title, sector, level |
experience_required, experience_years, education_level, formations | Requirements; education_level falls back to the first diploma named in the description (Bac+2, BTS (Bac+2), CAP, Master (Bac+5), Diplôme d'État) |
competences, skills_detected, qualites_professionnelles, langues, permis | Skills, soft skills, languages, licences; skills_detected adds the tools, certifications, licences and languages named in the description (Excel, SAP, CACES, Permis B, Anglais...) |
work_hours, work_hours_converted, benefits, travel | Schedule, full or part time, benefits |
apply_url, apply_partner, partner_source, managing_agency, recruiter_email, recruiter_phone | How to apply |
posted_date, updated_date, description | Dates and the full text |
{
"id": "215KGNY",
"title": "Développeur Risques de marchés (H/F)",
"company": "QUANTEAM",
"company_description": null,
"company_url": "https://www.quanteam.fr",
"company_size": "250 à 499 salariés",
"company_address": null,
"employer_page_url": null,
"location": "NEUILLY SUR SEINE (92)",
"city": "NEUILLY SUR SEINE",
"department": "92",
"postal_code": null,
"geo": {
"lat": 48.884789,
"lon": 2.269688
},
"latitude": 48.884789,
"longitude": 2.269688,
"contract_type": "CDI",
"contract_type_label": "CDI",
"contract_duration": null,
"contract_nature": "Contrat travail",
"alternance": false,
"work_hours": "38H30/semaine\nTravail en journée",
"work_hours_converted": "Temps plein",
"rome_code": "C1301",
"appellation": "Négociateur / Négociatrice salle des marchés",
"sector": "Conseil en systèmes et logiciels informatiques",
"qualification_label": "Cadre",
"salary": "Annuel de 40000.0 Euros à 42000.0 Euros",
"salary_parsed": {
"raw": "Annuel de 40000.0 Euros à 42000.0 Euros",
"min": 40000,
"max": 42000,
"currency": "EUR",
"period": "year",
"months": null,
"is_range": true,
"annualized_min": 40000,
"annualized_max": 42000
},
"salary_min": 40000,
"salary_max": 42000,
"salary_period": "year",
"benefits": [
"Intéressement / participation",
"Titres restaurant / Prime de panier",
"CSE"
],
"experience_required": "Débutant accepté",
"experience_years": 0,
"experience_mandatory": false,
"education_level": "Bac+5 et plus ou équivalents",
"formations": [
{
"niveauLibelle": "Bac+5 et plus ou équivalents",
"domaineLibelle": "Master 2 Ingénierie du Risque",
"libelle": "Bac+5 et plus ou équivalents - Master 2 Ingénierie du Risque",
"exigence": "E"
}
],
"competences": [
{
"libelle": "Analyser les marchés financiers",
"exigence": "S"
},
{
"libelle": "Emettre des ordres d'achat ou de vente",
"exigence": "S"
},
{
"libelle": "Proposer une stratégie d'investissement",
"exigence": "S"
}
],
"skills_detected": [
"Analyser les marchés financiers",
"Emettre des ordres d'achat ou de vente",
"Proposer une stratégie d'investissement"
],
"qualites_professionnelles": [
{
"libelle": "Faire preuve de réactivité"
},
{
"libelle": "Faire preuve de rigueur et de précision"
},
{
"libelle": "Organiser son travail selon les priorités et les objectifs"
}
],
"langues": [
{
"libelle": "Anglais",
"niveau": "Courant",
"exigence": "E"
}
],
"permis": [],
"travel": null,
"accessible_th": false,
"adapted_company": false,
"few_applicants": false,
"national_programs": [
"Plan \"1 jeune, 1 solution\""
],
"partner_source": null,
"is_partner_offer": false,
"apply_url": "https://candidat.francetravail.fr/offres/recherche/detail/215KGNY",
"apply_partner": null,
"recruiter_name": null,
"recruiter_email": null,
"recruiter_phone": null,
"managing_agency": null,
"posted_date": "2026-10-19",
"posted_label": "Publié il y a 2 jours",
"updated_date": "2026-10-19",
"description": "Au sein d'une banque d'investissement vous interviendrez sur :\n- le développement et la mise en production d'outils dédiés au suivi et au calcul des risques de marchés,\n- recueil des besoins,\n- traitement des demandes …",
"url": "https://candidat.francetravail.fr/offres/recherche/detail/215KGNY",
"source": "France Travail",
"search_keyword": "développeur",
"search_location": "75056",
"scraped_at": "2026-10-21T04:46:08Z"
}
You pay $1.25 per 1,000 saved offers ($0.00125 per offer), whether or not you open each offer. Searches that find nothing, offers that are no longer online and links that are not France Travail pages cost nothing.
Platform usage (compute and proxy traffic) is billed on top and is small: our test runs used about $0.021 for 1,000 offers and $0.12 for 10,000 offers (10,000 offers took about 4.5 minutes).
| Job | Offers | Approximate total |
|---|---|---|
| One city, one keyword | 100 | ≈ $0.13 |
| Weekly market scan | 1,000 | ≈ $1.25 + ~$0.02 usage |
| Large export | 10,000 | ≈ $12.50 + ~$0.12 usage |
Set Maximum offers or a maximum charge per run to stay in budget; the run stops cleanly when it is reached.
Is it legal to scrape France Travail? The scraper only reads public job offers that anyone can see without an account. You are responsible for how you use the data, including GDPR rules for any recruiter contact details.
Do I need a login, an API key or a proxy? No login and no France Travail API key. The default datacenter proxy works; residential proxies are pinned to France if you pick them.
How many offers can I get? As many as match. France Travail shows at most 1,150 offers per search, so large searches are split by status, working time and region automatically ("Go past 1,150 offers per search"). Several keywords or locations also add up.
Why is a field empty? Each offer only has what the employer filled in. Salary, skills, education or company details are often missing, especially on partner offers. Latitude and longitude come from the site's map and are missing for a few offers.
How exact is posted_date?
The site shows "published N days ago"; the date is computed from that in French time. updated_date is the exact last-update date.
Can I schedule it or use the API? Yes. Schedule runs (for example daily with "Posted within: last 24 hours" and "Newest first") and fetch results through the API or integrations.
posted_date is derived from "published N days ago" and is empty for offers older than the site's last label.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
keywordsarrayOptionalKeywords
Job titles, skills or company names to search, one per line, e.g. 'développeur', 'comptable', 'aide-soignant'. Each keyword is its own search. Leave empty to list every offer in the location.
locationstringOptionalLocation
City, department, region or postcode in France, e.g. 'Paris', 'Lyon', 'Gironde', 'Bretagne', '75015'. France Travail location codes work too ('75D', '69123', '53R'). Use 'France' for the whole country. Leave empty to search all locations.
startUrlsarrayOptionalFrance Travail links
Optional. Search links (candidat.francetravail.fr/offres/recherche?motsCles=...), landing pages (candidat.francetravail.fr/offres/emploi/...) and offer links (candidat.francetravail.fr/offres/recherche/detail/215HFTC) or bare offer numbers. Filters below are added to pasted search links.
maxResultsintegerOptionaldefault 20Maximum offers
How many offers to save in total across all searches. 0 = no limit (up to 100,000).
contractTypearrayOptionalContract type
Only offers with one of these contracts. Apprenticeship, professionalisation and POEI are contract natures: combined with a contract type, both must match.
experiencearrayOptionalExperience
Experience the employer asks for.
qualificationarrayOptionalStatus
Executive (cadre) or not.
workingTimearrayOptionalWorking time
Full-time or part-time.
postedSinceenumOptionalPosted within
Only offers published within this period.
minSalaryintegerOptionalMinimum salary (€)
Only offers paying at least this gross amount, in the period below (e.g. 30000 per year or 2000 per month). Offers whose stated salary is lower are skipped and not charged; offers that give no figure (e.g. 'selon profil') are kept.
salaryPeriodenumOptionalSalary period
Period of the minimum salary. Empty: guessed from the amount (5,000 and above = yearly, 100 and above = monthly, else hourly).
radiusKmintegerOptionalRadius (km)
Distance around the location (0–100 km). The site default is 10 km.
contractMonthsMinintegerOptionalContract length from (months)
For fixed-term and temporary contracts: minimum length in months.
contractMonthsMaxintegerOptionalContract length to (months)
For fixed-term and temporary contracts: maximum length in months.
professionalDomainarrayOptionalProfessional domain
Only offers in these job families.
includePartnersbooleanOptionaldefault trueInclude partner offers
Also return offers France Travail shows from partner job boards (HelloWork, APEC, Indeed, ...). Off: only offers posted on France Travail itself.
fewApplicantsOnlybooleanOptionalFew applicants only
Only offers flagged by France Travail as receiving few applications.
adaptedCompaniesOnlybooleanOptionalAdapted companies only
Only offers from 'entreprises adaptées' (companies employing mostly disabled workers).
disabilityFriendlyOnlybooleanOptionalDisability-committed employers only
Only offers from employers committed to hiring disabled workers.
sortByenumOptionalSort by
Relevance (site default) or newest first.
maxResultsPerSearchintegerOptionalMaximum offers per search
Optional cap per keyword or pasted link, so one big search cannot use the whole limit. Empty or 0 = no cap.
includeDetailsbooleanOptionaldefault trueOpen each offer
On (recommended): full description, salary, ROME code, skills, education, languages, licences, working hours and company details. Off: only the search-card fields (faster, same price).
includeApplyInfobooleanOptionaldefault trueGet apply links and recruiter contact
Adds the external apply link (recruiter or partner site), the partner name, the managing France Travail agency and any public recruiter email or phone. Needs 'Open each offer'.
splitLargeSearchesbooleanOptionaldefault trueGo past 1,150 offers per search
France Travail shows at most 1,150 offers per search. On: large searches are split by status, working time and region behind the scenes so you can get more. Off: stop at 1,150 per search.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are the default and work well for France Travail. Residential exits are pinned to France unless you choose a country.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | null | France Travail offer number |
| title | string | null | Job title |
| company | string | null | Employer name (empty when the employer is anonymous) |
| company_description | string | null | Employer presentation |
| company_url | string | null | Employer website |
| company_size | string | null | Headcount range |
| company_address | string | null | Employer address when published |
| employer_page_url | string | null | Employer page on France Travail |
| location | string | null | Work place as shown, e.g. 'Lyon (69)' |
| city | string | null | City or area |
| department | string | null | Department number, e.g. 69 |
| postal_code | string | null | Postcode when published |
| geo | object | null | {lat, lon} of the work place (the town centre when France Travail's backup site gives no map position) |
| latitude | number | null | Latitude |
| longitude | number | null | Longitude |
| contract_type | string | null | Contract code: CDI, CDD, MIS, SAI, DIN, LIB, ... |
| contract_type_label | string | null | Contract as shown |
| contract_duration | string | null | Contract length, e.g. '6 Mois' |
| contract_nature | string | null | Contract nature, e.g. 'Contrat travail', 'Contrat apprentissage' |
| alternance | boolean | null | Apprenticeship or professionalisation contract |
| work_hours | string | null | Working hours and schedule |
| work_hours_converted | string | null | Temps plein / Temps partiel |
| rome_code | string | null | ROME occupation code |
| appellation | string | null | ROME job title |
| sector | string | null | Business sector |
| qualification_label | string | null | Qualification level, e.g. Cadre, Technicien, Employé qualifié |
| salary | string | null | Salary as shown |
| salary_parsed | object | null | {min, max, currency, period, months, is_range, annualized_min, annualized_max} |
| salary_min | number | null | Minimum salary |
| salary_max | number | null | Maximum salary |
| salary_period | string | null | year, month, hour or day |
| benefits | array | null | Benefits, e.g. 13th month, meal vouchers |
| experience_required | string | null | Experience asked, e.g. '2 An(s)', 'Débutant accepté' |
| experience_years | number | null | Minimum years of experience |
| experience_mandatory | boolean | null | Experience is required |
| education_level | string | null | Education level asked: the structured requirement, else the first diploma named in the description (Bac+2, BTS, CAP, Master, Diplôme d'État...) |
| formations | array | null | Education: {niveauLibelle, domaineLibelle, libelle, exigence} |
| competences | array | null | Skills: {libelle, exigence} (E = required, S = desired) |
| skills_detected | array | null | Skill names: the offer's listed skills, then tools, certifications, licences and languages named in the description |
| qualites_professionnelles | array | null | Soft skills: {libelle} |
| langues | array | null | Languages: {libelle, niveau, exigence} |
| permis | array | null | Driving licences: {libelle, exigence} |
| travel | string | null | Travel |
| accessible_th | boolean | null | Open to disabled workers |
| adapted_company | boolean | null | Employer is an 'entreprise adaptée' |
| few_applicants | boolean | null | Flagged as receiving few applications |
| national_programs | array | null | National hiring programmes |
| partner_source | string | null | Partner job board the offer comes from |
| is_partner_offer | boolean | null | Offer comes from a partner job board |
| apply_url | string | null | Where to apply |
| apply_partner | string | null | Partner site to apply on |
| recruiter_name | string | null | Recruiter contact name when public |
| recruiter_email | string | null | Recruiter email when public |
| recruiter_phone | string | null | Recruiter phone when public |
| managing_agency | string | null | France Travail agency managing the offer |
| posted_date | string | null | Publication date (YYYY-MM-DD, from the site's 'published N days ago') |
| posted_label | string | null | Publication as shown |
| updated_date | string | null | Last update (YYYY-MM-DD) |
| description | string | null | Full job description |
| url | string | null | Offer link |
| source | string | null | France Travail |
| search_keyword | string | null | Keyword of the search that found the offer |
| search_location | string | null | Location code of the search |
| scraped_at | string | null | When the offer was saved (UTC) |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Job offer | One saved France Travail job offer. | $0.0013 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/france-travail-scraper').call({
"keywords": [
"développeur"
],
"location": "Paris",
"maxResults": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/france-travail-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/france-travail-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Keyword + city with a 30 km radius, fixed-term full-time contracts, full offer details.
Every CDI offer in a department, using a France Travail location code.
Paste any candidat.francetravail.fr search link; its filters are kept.
Newest offers first, search-card fields only for speed.
Region name with partner job-board offers excluded.
Minimum yearly salary, more than 3 years of experience, posted within a month.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.