HelloWork Scraper — Offres d'emploi France avatar

HelloWork Scraper — Offres d'emploi France

Pricing

from $2.00 / 1,000 jobs

Go to Apify Store
HelloWork Scraper — Offres d'emploi France

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

Noah Adler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

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=N until maxItems. 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

  1. What this Actor does
  2. What you get
  3. Features
  4. Input
  5. Output example
  6. Output fields
  7. Quick start (API)
  8. Use cases
  9. Limitations
  10. FAQ
  11. Keywords

What this Actor does

StepAction
1Accept keyword + city + optional contractType / telework, or paste searchUrls
2Optional offerUrls — GET each offre (open vs offre fermée)
3GET HelloWork search HTML
4Parse each card (title, company, city, salary, CDI, télétravail, URL)
5Paginate ?p=N until maxItems
6If 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, url
  • city, department, contractType (CDI, CDD, …), remote

Pay / company

  • companyName, companyUrl (when enriched)
  • salary when HelloWork shows salaire hellowork on the card (otherwise null)

Offres fermées

  • closed + status=closed when the public offer page is 410/404 (page n’existe plus)

Meta

  • publishedLabel (il y a N jours), publishedAt / validThrough if enriched
  • keyword, cityQuery, searchUrl, scrapedAt

Features

CapabilityDetail
Query + citySame boxes as the HelloWork search bar
CDI / télétravailSite filters c= and t=
Search URLsPaste the offres hellowork results link from the browser
Offres ferméesPublic offer URL → open or closed (no login)
No browsercurl_cffi impersonate chrome124 + browserforge headers
Proxy-awareApify RESIDENTIAL + FR if antibot kicks in
PPE-friendlyOne Job event per row

Input

FieldRequiredDescription
keywordNo*e.g. développeur, comptable
cityNo*e.g. Paris, Lyon
contractTypeNoCDI, CDD, Stage, Alternance, Freelance, Travail_temp (intérim)
teleworkNoComplet, Partiel, Occasionnel, Pas_teletravail
searchUrlsNo*hellowork.com emploi search pages
offerUrlsNo/fr-fr/emplois/{id}.html for closed checks
enrichDetailsNoOpen each offre (slower)
maxItemsNoCap (default 40, max 500)
proxyConfigurationNoDefault 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

FieldNotes
title, companyNameRole ≠ employer
cityCity label from the card (not a salary string)
salaryPresent when HelloWork publishes pay on the listing
contractTypeCDI / CDD / Stage / …
remoteTélétravail tag when shown
urlAbsolute https://www.hellowork.com/fr-fr/emplois/{id}.html
closed / statusopen on search; closed on public 410/404 offer pages
error, errorMessageHard 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).
  • salary is 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