HelloWork Scraper — Offres d'emploi France
Pricing
from $2.00 / 1,000 jobs
HelloWork Scraper — Offres d'emploi France
Scrape HelloWork offres d'emploi France: titre, entreprise, ville, type de contrat and offer URL. Salaire and télétravail only when HelloWork displays them on the card. HTTP + FR proxy — not a multi-board dump.
Pricing
from $2.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Noah Adler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
HelloWork scraper for France’s job board (hellowork.com). Export offres hellowork / hellowork emploi as one Dataset row per listing: title, company, city, salaire hellowork when published, CDI/CDD, télétravail, offer URL, and offres fermées status when you check a public offer page.
HTTP-only (no Playwright): search pages are SSR HTML (recherche.html?k=&l=&c=&t=&p=). Cards already carry salaire + contrat. Optional enrichDetails opens the offre for JobPosting JSON-LD. hellowork api-style export — not a multi-board dump.
HelloWork returns ~30 offres per search page. Paginate with
?p=NuntilmaxItems. FR residential proxy is optional locally; enable it on Apify if you hit 403/captcha.
Why this Actor: salaire + CDI/télétravail on the card · offres fermées via 410/404 on public /emplois/{id}.html · search like a job seeker (query + city + contract) · cheap PPE per Job
Table of contents
- What this Actor does
- What you get
- Features
- Input
- Output example
- Output fields
- Quick start (API)
- Use cases
- Limitations
- FAQ
- Keywords
What this Actor does
| Step | Action |
|---|---|
| 1 | Accept keyword + city + optional contractType / telework, or paste searchUrls |
| 2 | Optional offerUrls — GET each offre (open vs offre fermée) |
| 3 | GET HelloWork search HTML |
| 4 | Parse each card (title, company, city, salary, CDI, télétravail, URL) |
| 5 | Paginate ?p=N until maxItems |
| 6 | If enrichDetails, merge JobPosting (description, validThrough, extra salary) |
Input: mot-clé, ville, CDI/télétravail, search URLs, offer URLs, max items, proxy.
Output: one Dataset row per job.
What you get
Job
title,offerId,urlcity,department,contractType(CDI, CDD, …),remote
Pay / company
companyName,companyUrl(when enriched)salarywhen HelloWork shows salaire hellowork on the card (otherwisenull)
Offres fermées
closed+status=closedwhen the public offer page is 410/404 (page n’existe plus)
Meta
publishedLabel(il y a N jours),publishedAt/validThroughif enrichedkeyword,cityQuery,searchUrl,scrapedAt
Features
| Capability | Detail |
|---|---|
| Query + city | Same boxes as the HelloWork search bar |
| CDI / télétravail | Site filters c= and t= |
| Search URLs | Paste the offres hellowork results link from the browser |
| Offres fermées | Public offer URL → open or closed (no login) |
| No browser | curl_cffi impersonate chrome124 + browserforge headers |
| Proxy-aware | Apify RESIDENTIAL + FR if antibot kicks in |
| PPE-friendly | One Job event per row |
Input
| Field | Required | Description |
|---|---|---|
keyword | No* | e.g. développeur, comptable |
city | No* | e.g. Paris, Lyon |
contractType | No | CDI, CDD, Stage, Alternance, Freelance, Travail_temp (intérim) |
telework | No | Complet, Partiel, Occasionnel, Pas_teletravail |
searchUrls | No* | hellowork.com emploi search pages |
offerUrls | No | /fr-fr/emplois/{id}.html for closed checks |
enrichDetails | No | Open each offre (slower) |
maxItems | No | Cap (default 40, max 500) |
proxyConfiguration | No | Default RESIDENTIAL + FR on Store Try it |
*Provide keyword/city, searchUrls, and/or offerUrls.
Example — développeur Paris CDI
{"keyword": "développeur","city": "Paris","contractType": "CDI","maxItems": 20,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "FR"}}
Example — paste an offres hellowork URL
{"searchUrls": ["https://www.hellowork.com/fr-fr/emploi/recherche.html?k=developpeur&l=Paris"],"maxItems": 40}
Example — check offres fermées
{"offerUrls": ["https://www.hellowork.com/fr-fr/emplois/75605607.html","https://www.hellowork.com/fr-fr/emplois/10000000.html"]}
Output example
{"title": "Développeur H/F","companyName": "W Hunt","city": "Paris 8e","department": "75","salary": "50 000 - 55 000 € / an","contractType": "CDI","remote": null,"url": "https://www.hellowork.com/fr-fr/emplois/75605607.html","offerId": "75605607","closed": false,"status": "open","keyword": "développeur","cityQuery": "Paris","scrapedAt": "2026-09-25T00:00:00Z","error": false,"errorMessage": null}
Output fields
| Field | Notes |
|---|---|
title, companyName | Role ≠ employer |
city | City label from the card (not a salary string) |
salary | Present when HelloWork publishes pay on the listing |
contractType | CDI / CDD / Stage / … |
remote | Télétravail tag when shown |
url | Absolute https://www.hellowork.com/fr-fr/emplois/{id}.html |
closed / status | open on search; closed on public 410/404 offer pages |
error, errorMessage | Hard failure vs empty search |
Quick start (API)
curl "https://api.apify.com/v2/acts/noahadler~hellowork-france-jobs/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword": "développeur","city": "Paris","contractType": "CDI","maxItems": 20}'
Then fetch the default Dataset items URL from the run object.
Use cases
- HelloWork scraper pipelines for aggregators who already pull InfoJobs / France Travail.
- Salaire hellowork / CDI / télétravail research (fields the factory listing often skips).
- Offres fermées monitoring from a list of offer URLs (ABSENCE / closed check).
- hellowork emploi lead lists: company + offer URL (no email scrape).
Limitations
- Search list is live offres — HelloWork does not list expired jobs in
recherche.html. Closed status is a public offer-page check (410/404). salaryis null when HelloWork hides pay.- Does not harvest emails, phones, or CVs.
- 403/captcha → use Apify RESIDENTIAL + FR. After repeated WAF, the run fails honestly (no fake rows).
- France HelloWork only. Not LinkedIn, not Indeed.
FAQ
Do I need Playwright?
No. v0.1 is HTTP + Chrome TLS impersonation against the public search HTML.
Can I paste the URL from my browser?
Yes. searchUrls must be hellowork.com emploi pages.
How do I filter CDI + télétravail?
Set contractType=CDI and telework=Complet (or Partiel). Same as the site checkboxes.
Why is salary null?
Many offres hide pay. The field is filled only when the card (or JobPosting if enrichDetails) includes it.
What is an offre fermée?
A public /emplois/{id}.html that returns 410/404 (“la page n’existe plus”). Search results are open jobs.
What happens on hard failure?
One Dataset row with error: true and an actionable errorMessage (often “enable RESIDENTIAL + FR”).
Keywords
hellowork scraper, offres hellowork, hellowork emploi, salaire hellowork, offres fermées, hellowork api, hellowork jobs, emploi France scraper, CDI télétravail, Paris offres