French Jobs Scraper: France, Québec, Africa, from $0.90/1K avatar

French Jobs Scraper: France, Québec, Africa, from $0.90/1K

Pricing

from $0.90 / 1,000 public agency listings

Go to Apify Store
French Jobs Scraper: France, Québec, Africa, from $0.90/1K

French Jobs Scraper: France, Québec, Africa, from $0.90/1K

Scrape job offers from 42 French-language sources in one schema: career sites (16 ATS), job boards, public employment services, VIE, service civique, volunteering and freelance missions. City, department, region and country parsed, contract normalized, new-jobs-only mode.

Pricing

from $0.90 / 1,000 public agency listings

Rating

0.0

(0)

Developer

Alexis Morain

Alexis Morain

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

7 days ago

Last modified

Share

French Jobs Scraper collects job offers from 42 French-language sources and returns them in one schema: company career sites, job boards, public employment services, VIE, service civique, volunteering and freelance missions, in France, Belgium, Switzerland, Luxembourg, Monaco, Canada and Québec, the Maghreb and West and Central Africa. Use it as a French jobs API for a job board, a market study, a lead list or a daily alert.

Version française complète plus bas : Scraper d'offres d'emploi francophones.

What does French Jobs Scraper do?

It reads the public job listings of 42 sources, normalizes every offer into the same 34 fields, removes duplicates across sources, applies your filters, and pushes the result to an Apify dataset you can download as JSON, CSV or Excel, or read through the API.

  • One schema for every source. City, postal code, French department, region and country parsed from the location text. Contract normalized to CDI, CDD, Stage, Alternance, Intérim, Freelance, VIE, VIA, Service civique, Volontariat, Fonction publique. Remote type (full, partial, none). Salary and daily rate (TJM) as numbers.
  • Sources nobody else covers on the Apify Store. On 12 October 2026 we searched the Store and found no dedicated actor for Service Civique, JeVeuxAider, France Volontaires, the Monaco Employment Service, the European Solidarity Corps, Québec emploi, Taleez, Collective, ProfilCulture, Livres Hebdo, the French regional book agencies, Educarriere, Africarrieres, Senjob or MediaCongo. They are all here, next to the big ones (Welcome to the Jungle, HelloWork, Meteojob, EURES, Job Bank, jobup.ch).
  • About 2.2 million listings counted at the sources in October 2026 (each source's own count, before cross-source duplicates), plus any company career site on 15 ATS.
  • New jobs only. A delta mode remembers what earlier runs returned and outputs only what is new, across sources and across days.
  • You pay for what you keep. Filtered-out jobs and duplicates are never charged. Every run stops at a per-source cap and respects the spending limit you set on the run.

It does not log in anywhere, does not scrape candidate profiles, and does not return personal emails or phone numbers of recruiters (see Is it legal to scrape job offers?).

Why use a French jobs scraper?

French-language hiring is spread over dozens of sites with different formats, and most store actors cover one board each. This one is a France job scraper, a source of Québec jobs, Morocco jobs and West African jobs, and a feed of freelance missions in France, all in one run and one table.

Common uses:

  • Job boards and aggregators: feed a niche board (culture, tech, public sector, Africa) with fresh offers in one format.
  • Job seekers and coaches: one daily alert for CDI, alternance, VIE or service civique offers matching a few keywords.
  • Recruiting and sales teams: find companies hiring for a role in a region, then reach them through their public career page.
  • Market studies: count offers by department, region, contract or remote type; compare salaries where published.
  • Freelancers and agencies: watch freelance missions (Collective, Free-Work, Codeur) with their daily rate.

What the Apify platform adds: schedules (daily delta runs), the API and webhooks, integrations with Make, Zapier, n8n and Google Sheets, monitoring, and run history.

What makes it different

French Jobs ScraperTypical store actor
Sources42, in four families1
Countries24 in the country filter1
Schemaone, with normalized contract and parsed department and regionthe source's own fields
Language filterdetected offline, French by defaultnone
Delta modeacross sources and daysrare
Cross-source duplicatesremoved before chargenot applicable
Contactspersonal emails and phones removedoften returned
Spendingper-source cap, time cap, run spending limitvaries

Sources covered

Each source is a value of the Sources input. Volumes are the source's own count when we built the connector (October 2026).

Source (input value)FamilyCountriesVolumeWhat it covers
Company career sites (ats)ATSanyyour list, or up to 200 boards from ready-made listsGreenhouse, Ashby, Lever, Workday, SmartRecruiters, Workable, Personio, Rippling, Recruitee. A domain, a board URL or ats:slug
Teamtailor (teamtailor)ATSanyabout 12,000 jobs on 333 career sitesbuilt-in list of employers with jobs in French-speaking countries, or your own
Taleez (taleez)ATSFR, LUabout 11,000 jobsevery public job of the French ATS Taleez
Softy (softy)ATSFR, CD, ES, CH...about 3,300 jobs on 77 career sitesFrench ATS: built-in list of employers, or your own
Flatchr (flatchr)ATSanyabout 3,700 jobs on 264 career sitesFrench ATS: built-in list of employers (mostly France), or your own
DigitalRecruiters / Cegid (digitalrecruiters)ATSanyup to 45,000 jobs on 283 career sitesCegid HR Talent Acquisition: built-in list of employers (mostly France), or your own
Breezy HR (breezy)ATSanyabout 2,200 jobs on 76 career sitesemployers with jobs in French or in French-speaking countries (Québec, France, Switzerland, Africa), or your own
JOIN (join)ATSanyabout 2,500 jobs at 853 companiescompany pages on join.com, mostly France; a full read takes about 42 minutes
Welcome to the Jungle (wttj)job board24about 67,000 jobsevery job posted in the French-speaking countries
HelloWork (hellowork)job boardFRabout 800,000 jobsmajor French job board, France and overseas
Meteojob (meteojob)job boardFRabout 300,000 jobsFrench job board, full description included
Free-Work jobs (free_work_jobs)job boardFR, BE, CH, LU, MC, GBabout 2,600 jobsIT jobs: CDI, CDD, internships, apprenticeships
jobup.ch (jobup)job boardCHabout 34,000 jobsleading French-speaking Swiss job board
Jobillico (jobillico)job boardCAabout 17,500 jobsQuébec job board, offers with a French version
ProfilCulture (profilculture)job boardFR, BE, LU, CHabout 1,100 jobsculture sector
Livres Hebdo (livreshebdo)job boardFRa handfulbook trade
French book agencies (agences_livre)job boardFRa few dozenFILL, ALCA, Bretagne, Auvergne-Rhône-Alpes
ReKrute (rekrute)job boardMA, TN, SNabout 1,800 jobsleading Moroccan board for professionals
Tanitjobs (tanitjobs)job boardTNabout 3,100 jobslargest Tunisian board, last 30 days
Emploitic (emploitic)job boardDZabout 4,400 jobsleading Algerian board
Educarriere (educarriere)job boardCIabout 2,000 jobshistoric Ivorian board
Africarrieres (africarrieres)job board16 African countriesabout 1,600 jobsCôte d'Ivoire, Senegal, Morocco, Burkina Faso, Cameroon...
Senjob (senjob)job boardSN, CIabout 185 jobsSenegalese board
Emploi.cm (emploi_cm)job boardCMabout 360 jobsCameroonian board. Opt-in, residential proxy needed (see limitations)
MediaCongo (mediacongo)job boardCDabout 80 jobsDR Congo
EURES (eures)publicFR, BE, LU, CHabout 740,000 jobsEuropean public employment services portal; French offers come from France Travail
Le Forem (forem)publicBE, LU, FR, CAabout 26,000 jobsWalloon public employment service, open data (CC BY-SA 4.0)
Job Bank / Guichet-Emplois (job_bank)publicCAabout 18,000 jobsGovernment of Canada board: every Québec offer, French or bilingual offers elsewhere
Québec emploi (quebec_emploi)publicCAabout 7,400 jobsQuébec government job platform
Choisir le service public (choisir_service_public)publicFRabout 54,000 jobsthe three French civil services (State, local, hospitals)
Emploi territorial (emploi_territorial)publicFRabout 28,000 jobsFrench local government
FHF emploi (fhf)publicFRabout 12,000 jobsFrench public hospitals and care homes (Fédération hospitalière de France)
La bonne alternance (la_bonne_alternance)publicFRabout 11,000 jobsapprenticeship jobs of the French Ministry of Labour platform and its partners (France Travail, APEC, OPCO...)
Service Civique (service_civique)publicanyabout 13,000 missionsevery mission, in France and abroad
European Solidarity Corps (corps_europeen_solidarite)publicanyabout 1,000 open placementsvolunteering in every host country
JeVeuxAider (jeveuxaider)publicFRabout 33,000 missionsvolunteering, on site or remote
France Volontaires (france_volontaires)publicanyabout 60 missionsinternational volunteering: VSI, international civic service, solidarity leave
Monaco Employment Service (monaco_emploi)publicMCabout 240 jobsMonServicePublic.mc, CDI and CDD in Monaco
Collective (collective)freelanceFR, BE, CH, LU, MC, MAabout 1,500 missionsfreelance missions
Free-Work missions (free_work)freelanceFR, BE, CH, LU, MC, GBabout 7,800 missionsfreelance IT missions with daily rate
Codeur (codeur)freelanceFRabout 35 projects a dayfreelance projects with fixed budgets
Freelance-Informatique (freelance_informatique)freelanceFR, BE, LUabout 500 missionsfreelance IT missions; client never named, daily rate only when written in the description

Not covered yet: Civiweb (the official VIE site), France Travail direct, APEC, Indeed (France Travail and APEC apprenticeship jobs come in through La bonne alternance). VIE offers still come in from the boards and career sites that publish them.

What data can you extract?

Every item has the same 34 fields. The most useful ones:

FieldTypeDescription
titlestringJob title as published
companystringEmployer
url, apply_urlstringListing and application links
locationstringLocation text as served by the source
location_city, location_postal_codestringCity and postal code
location_department_code, location_departmentstringFrench department (75, Paris)
location_regionstringFrench region, Belgian region, Swiss canton or Canadian province
location_countrystringISO country code (FR, BE, CA, MA...)
contract_typestringCDI, CDD, STAGE, ALTERNANCE, INTERIM, FREELANCE, VIE, VIA, SERVICE_CIVIQUE, VOLONTARIAT, FONCTION_PUBLIQUE, AUTRE
remote_typestringfull, partial or none
salary_min, salary_max, salary_currency, salary_periodnumber, stringSalary as numbers, when published
daily_rate_min, daily_rate_maxnumberDaily rate (TJM) of freelance missions
posted_at, expires_atstringPublication date and deadline, ISO 8601
languagestringLanguage of the offer (fr, en, nl, de...)
source, source_typestringWhere the job comes from, and its family
source_licensestringAttribution to keep when you republish (Le Forem)

Every field can be null: a source that does not publish a salary leaves it null rather than guessing. The dataset has three views in the console: Overview, Location, Contract and salary.

How to scrape French job offers

  1. Open the Actor and click Try for free.
  2. In Sources, leave the list empty to read every source, or pick a few (for example wttj, eures, service_civique).
  3. Add filters: Keywords (marketing, développeur), Title keywords for words the job title must contain (Notion, Airtable), Countries, Locations (Lyon, 69, Île-de-France), Contract types, Posted within (days).
  4. Keep Languages on French, or add English for the English-language tech jobs in Paris, Brussels, Geneva or Luxembourg.
  5. Click Start. Each source stops at 100 jobs or 15 minutes by default.
  6. Download the dataset as JSON, CSV or Excel, or read it through the API.
  7. For a daily feed, set Mode to New jobs only and add a schedule.

How much does it cost to scrape French jobs?

You pay per job pushed to your dataset, at a price that depends on the source family and on your Apify plan. Filtered-out and duplicate jobs are never charged.

EventFree planBronzeSilverGold and above
Public agency listing (EURES, Le Forem, Job Bank, civil service, Service Civique, volunteering)$1.50 / 1,000$1.30$1.10$0.90
Job board listing (WTTJ, HelloWork, Meteojob, jobup.ch, African boards...)$2.00 / 1,000$1.70$1.40$1.20
Company job (career sites, 16 ATS)$2.00 / 1,000$1.70$1.50$1.50
Freelance mission (Collective, Free-Work, Codeur)$3.00 / 1,000$2.60$2.30$2.00
Actor start$0.01 per run (per GB of memory, 512 MB by default)

Worked example: one run returning 100 Welcome to the Jungle jobs, 100 EURES offers and 50 freelance missions costs, on the free plan, $0.01 + 100 × $0.002 + 100 × $0.0015 + 50 × $0.003 = $0.51. On a Gold plan, the same run costs $0.32.

A daily New jobs only run on a quiet day costs the $0.01 start fee and nothing else. The Apify free plan gives you $5 of usage every month, enough for about 2,500 job board listings.

To control spending, set Max results per source, Max minutes per source, and the maximum cost per run in the run options: when the run reaches it, every source stops at its next job.

Input

See the Input tab for every option. Three ready-to-use examples:

Tech jobs in Paris, CDI, in English and French

{
"keywords": ["développeur", "developer", "data engineer", "product manager"],
"locations": ["Paris"],
"countries": ["FR"],
"contractTypes": ["CDI"],
"languages": ["fr", "en"],
"presetLists": ["french-unicorns"],
"postedWithinDays": 14,
"maxResultsPerSource": 200
}

Sources left empty: every source that covers France runs, and ats reads the career sites of the French Tech unicorns.

Every VIE, VIA, service civique and volunteering offer, France and abroad

{
"sources": ["service_civique", "corps_europeen_solidarite", "jeveuxaider", "france_volontaires", "wttj", "hellowork", "meteojob"],
"contractTypes": ["VIE", "VIA", "SERVICE_CIVIQUE", "VOLONTARIAT"],
"languages": [],
"maxResultsPerSource": 500,
"maxMinutesPerSource": 30
}

languages is empty to keep offers in every language. To keep only missions abroad, filter location_country on your side: the Actor has no "exclude a country" filter.

Growth and marketing freelance missions, new ones only, every morning

{
"sources": ["collective", "free_work", "codeur"],
"keywords": ["growth", "acquisition", "SEO", "marketing"],
"mode": "new-only",
"webhookUrl": "https://example.com/hooks/new-missions"
}

Schedule it daily. The webhook receives a short JSON summary only when there is something new.

Notion and Airtable jobs and missions, by title only

{
"titleKeywords": ["Notion", "Airtable"],
"excludeTitleKeywords": ["notion de"],
"postedWithinDays": 30,
"maxResultsPerSource": 50
}

Only jobs that name one of the tools in their title come out: an office manager offer that lists Notion among its tools stays out. In French, « notion » is also a common word (« notion de comptabilité », some knowledge of accounting): Exclude title keywords drops those titles. Put the same words in Keywords instead to search titles and descriptions. A title-only search uses the site's own title search where it misses no title (EURES, Emploitic, Free-Work), or skips a job before opening its page; Choisir le service public has no title search and reads its list from the newest job, so keep Posted within days set there.

Input fields that need a word

  • Companies (ats source): a domain (example.fr), a board URL (https://jobs.lever.co/example) or an ats:slug pair (greenhouse:example). Teamtailor sites: teamtailor:example; the other career-site sources the same way (softy:, flatchr:, breezy:, join:, digitalrecruiters:, or their URL).
  • Countries: a job whose country cannot be established is left out when this filter is set. Remote missions of a French platform count as French.
  • Title keywords: at least one of them in the job title, whole words, case and accents ignored. With Keywords set too, a job must match both lists.
  • Exclude title keywords: one of them in the title drops the job (notion de, stage, senior). Same matching rules, never charged.
  • Contract types: a job whose contract cannot be established is left out when this filter is set. A source that cannot offer any of the requested types (service civique for a freelance search) is skipped before any request.
  • Languages: French only by default. Clear the list to keep every language.
  • Max results per source: 100 by default; 0 means no cap (EURES alone serves over 400,000 French offers).
  • Max minutes per source: 15 by default; 0 means no limit.

Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. One item, anonymized:

{
"id": "3f2a9c1d7e5b4a60",
"source": "wttj",
"source_type": "jobboard",
"company": "Example Company",
"job_id": "0b1c2d3e-4f50-6172-8394-a5b6c7d8e9f0",
"title": "Chargé de marketing digital (H/F)",
"url": "https://www.welcometothejungle.com/fr/companies/example-company/jobs/charge-de-marketing-digital_paris",
"apply_url": "https://www.welcometothejungle.com/fr/companies/example-company/jobs/charge-de-marketing-digital_paris",
"location": "Paris, France",
"location_city": "Paris",
"location_postal_code": null,
"location_department_code": "75",
"location_department": "Paris",
"location_region": "Île-de-France",
"location_country": "FR",
"remote": false,
"remote_type": "partial",
"department": "Marketing",
"employment_type": "full_time",
"contract_type": "CDI",
"part_time": null,
"posted_at": "2026-10-12T09:00:00+00:00",
"expires_at": null,
"salary_min": 45000,
"salary_max": 55000,
"salary_currency": "EUR",
"salary_period": "year",
"daily_rate_min": null,
"daily_rate_max": null,
"description": "Example Company recrute un ou une chargée de marketing digital...",
"language": "fr",
"source_license": null,
"scraped_at": "2026-10-12T16:38:00+00:00"
}

A public offer from EURES has the same shape, with source_type set to public, company often null, and the department and region filled from the source's region codes.

Each run also writes a per-source report to its default key-value store under the key RUN_STATS: for every requested source, the counts of jobs pushed, filtered, deduplicated, already seen and unreadable, the error if it failed, whether it hit its time budget, and its duration in seconds. Read it with GET /v2/key-value-stores/{defaultKeyValueStoreId}/records/RUN_STATS to check each source without parsing the status message.

Use the French jobs API from Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("alexmorain/francophone-jobs-scraper").call(run_input={
"sources": ["wttj", "eures", "service_civique"],
"keywords": ["marketing"],
"countries": ["FR"],
"postedWithinDays": 14,
"maxResultsPerSource": 50,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["company"], job["location_city"], job["contract_type"])

The same call works from any language through the Apify API, and the API tab of this page shows ready-made snippets.

Tips

  • Start small. Pick a few sources and set Max results per source to 10 to see the output before a large run.
  • Slow sources. Taleez, Softy, DigitalRecruiters, JOIN, ReKrute, Africarrieres, Jobillico, Monaco, FHF and Choisir le service public read one page per job; HelloWork does too when you use keywords or full descriptions. Raise Max minutes per source to read them further.
  • Freshness. Use New jobs only rather than Posted within (days) for a daily feed: some sources publish no date (Workday career sites), and EURES receives France Travail offers about a week late.
  • Belgium. EURES offers for Belgium are mostly in Dutch (VDAB). Use forem for French-language Belgian offers, or add nl to Languages.
  • Several schedules, one memory. Give them the same Delta registry key to share the New jobs only memory.

FAQ

How does deduplication work?

Within a source, a job is identified by its source id. Across sources, two offers with the same employer, title and city are one job, and some sources share a reference (Emploi territorial and Choisir le service public, Le Forem and EURES). The first one pushed wins; the other is counted as a cross-source duplicate and never charged. In New jobs only mode the memory keeps these keys too, so a job seen yesterday on one board is not charged today on another.

How is the language detected?

From the words of the title and description, without any external service. Short titles with no description stay null and always pass the filter.

Why did I get fewer jobs than expected?

Check four things: the language filter (French only by default), the country and contract filters (unknown values are left out), the per-source cap (100), and the status message, which lists for each source how many jobs were pushed, filtered and deduplicated, and how long it ran.

The Actor reads job offers that employers and agencies publish publicly, without logging in. It removes personal emails and phone numbers of recruiters from titles, departments and descriptions, keeps generic mailboxes (recrutement@, jobs@), and returns no candidate data. It does not detect people's names inside free text. You are responsible for how you use the data, including the terms of each source and data protection law (GDPR in the European Union). If you are unsure, ask a lawyer.

Le Forem offers come from Le Forem's open data (« Offres d'emploi diffusées par le Forem », ODWB) under the CC BY-SA 4.0 licence. Each Le Forem item carries this attribution in source_license: keep it when you republish, and share derived data under the same licence.

What are the limitations?

  • Emploi.cm blocks Apify datacenter IPs. It is not in the default set: select emploi_cm explicitly and turn on a residential proxy. Only the sources that need it use the proxy (today: Emploi.cm); every other source of the run always connects directly.
  • Other sites can block cloud IPs from time to time. A blocked source shows as failed in the status message and the other sources go on. Jobs it returned before the block are kept; a source blocked from the start returns nothing and charges nothing.
  • EURES Belgium is mostly Dutch, and EURES France lags France Travail by about a week.
  • Languages default to French: English, Dutch or German offers are left out until you add them.
  • No date on some sources (Workday career sites): they are left out when Posted within (days) is set.
  • Locations are parsed conservatively: a location the Actor cannot read with confidence stays null rather than wrong.
  • Civiweb, France Travail direct, APEC and Indeed are not covered yet (except their apprenticeship jobs, through La bonne alternance).

Where do I report a problem?

Open an issue in the Issues tab with the run link. Requests for new sources are welcome there too.


Scraper d'offres d'emploi francophones (en français)

French Jobs Scraper collecte les offres d'emploi de 42 sources francophones et les rend dans un seul schéma : sites carrières d'entreprises, jobboards, services publics de l'emploi, VIE, service civique, volontariat et missions freelance, en France, Belgique, Suisse, Luxembourg, Monaco, au Canada et au Québec, au Maghreb et en Afrique de l'Ouest et centrale. C'est une API d'offres d'emploi pour un jobboard, une étude de marché, une liste de prospects ou une alerte quotidienne.

Que fait ce scraper d'offres d'emploi ?

Il lit les offres publiques de 42 sources, ramène chaque offre aux mêmes 34 champs, retire les doublons entre sources, applique vos filtres et pousse le résultat dans un dataset Apify, téléchargeable en JSON, CSV ou Excel, ou lisible par l'API.

  • Un schéma pour toutes les sources. Ville, code postal, département, région et pays lus dans le lieu. Contrat normalisé : CDI, CDD, Stage, Alternance, Intérim, Freelance, VIE, VIA, Service civique, Volontariat, Fonction publique. Télétravail complet, partiel ou non. Salaire et TJM en nombres.
  • Des sources que personne d'autre ne couvre sur le store Apify. Le 12 octobre 2026, aucun actor dédié n'existait pour Service Civique, JeVeuxAider, France Volontaires, le Service de l'Emploi de Monaco, le Corps européen de solidarité, Québec emploi, Taleez, Collective, ProfilCulture, Livres Hebdo, les agences régionales du livre, Educarriere, Africarrieres, Senjob ou MediaCongo. Elles sont toutes ici, à côté des grandes (Welcome to the Jungle, HelloWork, Meteojob, EURES, Guichet-Emplois, jobup.ch).
  • Environ 2,2 millions d'offres comptées par les sources en octobre 2026 (le compte de chaque source, avant doublons entre sources), plus tout site carrières sur 15 ATS.
  • Nouvelles offres seulement. Le mode delta retient ce que les runs précédents ont rendu et ne sort que le nouveau, d'une source à l'autre et d'un jour à l'autre.
  • Vous payez ce que vous gardez. Une offre filtrée ou en doublon n'est jamais facturée. Chaque run s'arrête à un plafond par source et respecte la limite de dépense posée sur le run.

L'actor ne se connecte à aucun compte, ne lit aucun profil candidat et ne rend ni e-mail personnel ni téléphone de recruteur.

Pourquoi utiliser un scraper d'offres d'emploi francophones ?

Le recrutement francophone est éparpillé sur des dizaines de sites aux formats différents, et la plupart des actors du store couvrent un seul site. Celui-ci rend les offres d'emploi en France, au Québec, au Maroc et en Afrique de l'Ouest, l'alternance, les VIE, le service civique et les missions freelance, en un run et une table.

Usages courants :

  • Jobboards et agrégateurs : alimenter un site de niche (culture, tech, secteur public, Afrique) en offres fraîches au même format.
  • Candidats et coachs : une alerte quotidienne sur les CDI, l'alternance, les VIE ou le service civique qui contiennent quelques mots-clés.
  • Recrutement et prospection : trouver les entreprises qui recrutent sur un métier dans une région, puis les joindre par leur page carrières.
  • Études de marché : compter les offres par département, région, contrat ou télétravail, comparer les salaires publiés.
  • Freelances et agences : suivre les missions freelance (Collective, Free-Work, Codeur) avec leur TJM.

Ce qu'apporte la plateforme Apify : planification (run delta quotidien), API et webhooks, intégrations Make, Zapier, n8n et Google Sheets, supervision et historique des runs.

Les sources

Chaque source est une valeur du champ Sources. Les volumes sont ceux du tableau de la section anglaise, comptés par chaque source en octobre 2026.

  • Sites carrières (ATS) : ats (Greenhouse, Ashby, Lever, Workday, SmartRecruiters, Workable, Personio, Rippling, Recruitee, avec un annuaire de plus de 15 000 sites et des listes prêtes à l'emploi), teamtailor (333 employeurs, environ 12 000 offres), taleez (environ 11 000 offres), softy (77 employeurs, environ 3 300 offres), flatchr (264 employeurs, environ 3 700 offres), digitalrecruiters (Cegid HR, 283 employeurs, jusqu'à 45 000 offres), breezy (76 employeurs, environ 2 200 offres), join (853 entreprises, environ 2 500 offres).
  • Jobboards France : wttj (environ 67 000 offres), hellowork (environ 800 000), meteojob (environ 300 000), free_work_jobs, profilculture, livreshebdo, agences_livre.
  • Jobboards Suisse et Québec : jobup (environ 34 000), jobillico (environ 17 500).
  • Jobboards Maghreb et Afrique : rekrute (Maroc), tanitjobs (Tunisie), emploitic (Algérie), educarriere (Côte d'Ivoire), africarrieres (16 pays), senjob (Sénégal), emploi_cm (Cameroun, sur demande), mediacongo (RD Congo).
  • Sources publiques : eures (France, Belgique, Luxembourg, Suisse, environ 740 000 offres, celles de France viennent de France Travail), forem (Le Forem, données ouvertes), job_bank (Guichet-Emplois du Canada), quebec_emploi, choisir_service_public (les trois fonctions publiques), emploi_territorial, fhf (hôpitaux publics et établissements médico-sociaux, Fédération hospitalière de France), la_bonne_alternance (offres en alternance de la plateforme du ministère du Travail et de ses partenaires), service_civique (France et étranger), corps_europeen_solidarite, jeveuxaider, france_volontaires (volontariat international : VSI, service civique international, congés de solidarité), monaco_emploi (Service de l'Emploi de Monaco, MonServicePublic.mc).
  • Missions freelance : collective, free_work, codeur, freelance_informatique.

Pas encore couverts : Civiweb (le site officiel des VIE), France Travail en direct, l'APEC, Indeed (leurs offres en alternance arrivent par La bonne alternance). Les VIE arrivent quand même par les jobboards et les sites carrières qui les publient.

Quelles données ?

Chaque offre a les mêmes 34 champs, dont : intitulé (title), employeur (company), liens (url, apply_url), lieu brut (location), ville, code postal, code et nom du département, région, pays (location_*), contrat normalisé (contract_type), télétravail (remote_type), salaire (salary_min, salary_max, salary_currency, salary_period), TJM (daily_rate_min, daily_rate_max), dates de publication et de clôture (posted_at, expires_at), langue (language), source et famille (source, source_type), attribution de licence (source_license). Un champ que la source ne publie pas reste à null, jamais deviné.

Comment récupérer des offres d'emploi francophones

  1. Ouvrez l'actor et cliquez sur Try for free.
  2. Dans Sources, laissez la liste vide pour tout lire, ou choisissez-en quelques-unes (wttj, eures, service_civique).
  3. Ajoutez des filtres : Keywords (marketing, développeur), Title keywords pour les mots que le titre de l'offre doit contenir (Notion, Airtable), Countries, Locations (Lyon, 69, Île-de-France), Contract types, Posted within (days).
  4. Gardez Languages sur le français, ou ajoutez l'anglais pour les offres tech rédigées en anglais à Paris, Bruxelles, Genève ou Luxembourg.
  5. Cliquez sur Start. Chaque source s'arrête à 100 offres ou 15 minutes par défaut.
  6. Téléchargez le dataset en JSON, CSV ou Excel, ou lisez-le par l'API.
  7. Pour un flux quotidien, passez Mode sur New jobs only et ajoutez une planification.

Combien coûte le scraping d'offres d'emploi ?

Vous payez chaque offre poussée dans votre dataset, à un prix qui dépend de la famille de la source et de votre plan Apify. Une offre filtrée ou en doublon n'est jamais facturée.

ÉvénementPlan gratuitBronzeSilverGold et plus
Offre publique (EURES, Le Forem, Guichet-Emplois, fonction publique, Service Civique, volontariat)1,50 $ / 1 0001,30 $1,10 $0,90 $
Offre de jobboard (WTTJ, HelloWork, Meteojob, jobup.ch, jobboards africains...)2,00 $ / 1 0001,70 $1,40 $1,20 $
Offre de site carrières (16 ATS)2,00 $ / 1 0001,70 $1,50 $1,50 $
Mission freelance (Collective, Free-Work, Codeur)3,00 $ / 1 0002,60 $2,30 $2,00 $
Démarrage0,01 $ par run (par Go de mémoire, 512 Mo par défaut)

Exemple : un run qui rend 100 offres Welcome to the Jungle, 100 offres EURES et 50 missions freelance coûte, en plan gratuit, 0,01 + 100 × 0,002 + 100 × 0,0015 + 50 × 0,003 = 0,51 $. En plan Gold : 0,32 $.

Un run quotidien New jobs only un jour sans nouveauté coûte les 0,01 $ du démarrage. Le plan gratuit d'Apify donne 5 $ d'usage par mois, de quoi lire environ 2 500 offres de jobboard.

Pour maîtriser la dépense : Max results per source, Max minutes per source et le coût maximal par run dans les options du run. Quand il est atteint, toutes les sources s'arrêtent à leur offre suivante.

Exemples d'input

Offres tech à Paris, en CDI, en anglais et en français

{
"keywords": ["développeur", "developer", "data engineer", "product manager"],
"locations": ["Paris"],
"countries": ["FR"],
"contractTypes": ["CDI"],
"languages": ["fr", "en"],
"presetLists": ["french-unicorns"],
"postedWithinDays": 14,
"maxResultsPerSource": 200
}

Tous les VIE, VIA, services civiques et volontariats, en France et à l'étranger

{
"sources": ["service_civique", "corps_europeen_solidarite", "jeveuxaider", "france_volontaires", "wttj", "hellowork", "meteojob"],
"contractTypes": ["VIE", "VIA", "SERVICE_CIVIQUE", "VOLONTARIAT"],
"languages": [],
"maxResultsPerSource": 500,
"maxMinutesPerSource": 30
}

Pour ne garder que l'étranger, filtrez location_country de votre côté : l'actor n'a pas de filtre d'exclusion de pays.

Missions freelance growth et marketing, nouvelles seulement, chaque matin

{
"sources": ["collective", "free_work", "codeur"],
"keywords": ["growth", "acquisition", "SEO", "marketing"],
"mode": "new-only",
"webhookUrl": "https://example.com/hooks/nouvelles-missions"
}

Offres et missions Notion ou Airtable, dans le titre seulement

{
"titleKeywords": ["Notion", "Airtable"],
"excludeTitleKeywords": ["notion de"],
"postedWithinDays": 30,
"maxResultsPerSource": 50
}

Seules sortent les offres dont le titre nomme l'un des outils : une offre d'office manager qui cite Notion parmi ses outils reste dehors. Exclude title keywords écarte les titres où « notion » est un mot courant (« Assistant avec notion de comptabilité ») ; un seul de ces mots dans le titre suffit à écarter l'offre. Mettez les mêmes mots dans Keywords pour chercher dans les titres et les descriptions. Une recherche dans le titre seul passe par la recherche du site quand elle ne rate aucun titre (EURES, Emploitic, Free-Work), sinon saute l'offre avant d'ouvrir sa page ; Choisir le service public n'a pas de recherche sur le titre et lit sa liste depuis l'offre la plus récente : gardez Posted within days rempli. Avec les deux champs remplis, une offre doit satisfaire les deux listes. Un type de contrat que la source ne peut pas offrir la fait sauter avant tout appel : une recherche freelance ne lit pas le service civique.

Sortie

Le dataset se télécharge en JSON, HTML, CSV ou Excel. Une offre a la forme de l'exemple de la section anglaise. Trois vues dans la console : Overview, Location, Contract and salary.

Intégration en Python

L'exemple apify-client de la section anglaise fonctionne tel quel. L'onglet API de la page donne les extraits prêts à copier pour les autres langages.

Conseils

  • Commencer petit : quelques sources et Max results per source à 10 pour voir la sortie.
  • Sources lentes : Taleez, Softy, DigitalRecruiters, JOIN, ReKrute, Africarrieres, Jobillico, Monaco, FHF et Choisir le service public lisent une page par offre, HelloWork aussi avec des mots-clés ou les descriptions complètes. Montez Max minutes per source pour aller plus loin.
  • Fraîcheur : préférez New jobs only à Posted within (days) pour un flux quotidien. Certaines sources ne publient pas de date (sites Workday) et EURES reçoit les offres de France Travail avec environ une semaine de retard.
  • Belgique : les offres EURES de Belgique sont surtout en néerlandais (VDAB). Prenez forem pour les offres belges en français, ou ajoutez nl dans Languages.

Questions fréquentes

Comment les doublons sont-ils retirés ?

Dans une source, une offre est identifiée par son identifiant. Entre sources, deux offres au même employeur, même intitulé et même ville sont une seule offre, et certaines sources partagent une référence (Emploi territorial et Choisir le service public, Le Forem et EURES). La première poussée gagne, l'autre compte en doublon et n'est jamais facturée. En mode New jobs only, la mémoire garde aussi ces clés : une offre vue hier sur un site n'est pas facturée aujourd'hui sur un autre.

L'actor lit des offres que les employeurs et les organismes publient en accès libre, sans connexion. Il retire des intitulés, services et descriptions les e-mails personnels et les téléphones des recruteurs, garde les boîtes génériques (recrutement@, jobs@) et ne rend aucune donnée de candidat. Il ne détecte pas les noms de personnes dans le texte libre. L'usage des données relève de votre responsabilité, conditions de chaque source et RGPD compris. En cas de doute, demandez à un juriste.

Les offres du Forem viennent des données ouvertes du Forem (« Offres d'emploi diffusées par le Forem », ODWB), sous licence CC BY-SA 4.0. Chaque offre du Forem porte cette attribution dans source_license : gardez-la si vous republiez, et partagez les données dérivées sous la même licence.

Quelles sont les limites ?

  • Emploi.cm bloque les IP des datacenters Apify. La source n'est pas dans le jeu par défaut : choisissez emploi_cm et activez un proxy résidentiel. Seules les sources qui en ont besoin passent par le proxy (aujourd'hui : Emploi.cm) ; toutes les autres sources du run se connectent toujours en direct.
  • D'autres sites peuvent bloquer les IP cloud de temps en temps. Une source bloquée apparaît en échec dans le message de statut et les autres continuent. Les offres rendues avant le blocage sont gardées ; une source bloquée dès le départ ne rend rien et ne facture rien.
  • EURES Belgique est surtout en néerlandais, et EURES France a environ une semaine de retard sur France Travail.
  • Langues : français seul par défaut, les offres en anglais, néerlandais ou allemand sont écartées tant que vous ne les ajoutez pas.
  • Sans date sur certaines sources (sites Workday) : écartées quand Posted within (days) est rempli.
  • Lieux lus avec prudence : un lieu illisible reste à null plutôt que faux.
  • Civiweb, France Travail en direct, l'APEC et Indeed ne sont pas encore couverts, sauf leurs offres en alternance (par La bonne alternance).

Où signaler un problème ?

Ouvrez une issue dans l'onglet Issues avec le lien du run. Les demandes de nouvelles sources sont les bienvenues au même endroit.