HelloWork Jobs Scraper avatar

HelloWork Jobs Scraper

Pricing

Pay per usage

Go to Apify Store
HelloWork Jobs Scraper

HelloWork Jobs Scraper

Scrape job offers from HelloWork.com (France's largest job board) by keyword, location and advanced filters. Outputs rich job data including salary, remote policy, company info and full HTML description.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Osamih

Osamih

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Scrapes job offers from HelloWork, France's largest job board (800,000+ offers). Search by keyword and location, apply the same filters as the website (contract type, publication date, remote policy, company type, experience, salary), and get rich, structured job data — including the full HTML description, salary range, remote policy and company details.

Features

  • 🆓 Free — no rental fee and no per-result charge; you only pay your own Apify platform usage
  • 📄 39 structured fields per job — full HTML description and a clean plain-text version, salary parsed into min/max/currency/period, remote policy, contract duration, company details, requirements, skills and tags
  • 🎛️ All the site's filters — contract, publication date, remote (télétravail), distance, company type, experience level, job function, industry sector, full/part-time, CSR labels (RSE), super-recruiter badge, minimum salary — each verified against the live site
  • 🔎 Multiple searches per run — one search per keyword, merged and de-duplicated by job id, with maxItems split evenly so a broad keyword cannot starve the others
  • 🔗 Direct search URLs — paste any recherche.html?... URL from the website and every filter in it is respected
  • 🛟 Expired offers are never lost — when a detail page is gone (HTTP 410), the search-card data is still saved and flagged partial_data: true
  • HTTP-only crawling — no browser, fast and cheap to run

Input example

{
"keywords": ["développeur web", "data engineer"],
"location": "Paris",
"contractTypes": ["CDI"],
"publishedSince": "7d",
"remotePolicy": ["Complet", "Partiel"],
"maxItems": 200
}

Or with a direct URL instead of keywords:

{
"startUrls": [{ "url": "https://www.hellowork.com/fr-fr/emploi/recherche.html?k=comptable&l=Lyon&c=CDI&d=w" }],
"maxItems": 100
}

Output example (abridged)

{
"job_id": "80817007",
"job_title": "Comptable H/F",
"link": "https://www.hellowork.com/fr-fr/emplois/80817007.html",
"company": "Harry Hope",
"company_id": "88047",
"company_link": "https://www.hellowork.com/fr-fr/entreprises/harry-hope-88047.html",
"company_logo": "https://f.hellowork.com/img/entreprises/160_160/197317.png",
"company_type": "cabinet-recr",
"location": "Lyon 3e - 69",
"city": "Lyon",
"postal_code": "69000",
"department": "69",
"region": "Auvergne-Rhône-Alpes",
"country": "FR",
"contract": "CDI",
"employment_type": "temps plein",
"salary": "35 000 - 40 000 € / an",
"salary_min": 35000,
"salary_max": 40000,
"salary_currency": "EUR",
"salary_period": "year",
"remote": null,
"experiences": ["Exp. 1 à 7 ans"],
"educations": ["Bac +2"],
"industries": ["Services aux Entreprises"],
"skills": ["Établissement des déclarations fiscales", "Accompagnement du client"],
"description": "<h2>Les missions du poste</h2><p>…</p>",
"description_text": "Les missions du poste\n…",
"list_tags": ["montagne", "cdi", "stable", "conseil", "junior"],
"is_recruiting_firm": true,
"published_at": "2026-07-01T01:07:28Z",
"valid_through": "2026-07-31T01:07:28Z",
"time": "il y a 2 jours",
"reference": "30024685 EC-DCO-61435",
"direct_apply": true,
"source_query": "comptable",
"extraction_date": "2026-07-03T12:00:00.000Z"
}

Notes & limits

  • ~2,010 offers max per search: HelloWork stops serving results after ~67 pages per query. To collect more, split your run into several narrower searches (more specific keywords, filters, or locations) — the actor de-duplicates overlapping results automatically.
  • No geo coordinates: HelloWork does not expose latitude/longitude anywhere in its job pages, so the output has no coordinate fields. Use city / postal_code / region for geocoding.
  • maxItems is split evenly across searches: with several keywords (or start URLs), each search gets maxItems / number of searches so one broad keyword cannot consume the whole budget. A search that runs out of offers early simply returns fewer items.
  • partial_data: true marks jobs whose detail page was unavailable (expired offers); those items only contain the search-card fields.

Proxy & keeping runs cheap

The actor defaults to Apify residential proxies — the lowest chance of being blocked. Country is left at "Anywhere"; HelloWork does not require French IPs.

Residential traffic is billed per GB on your own account, which adds up on large runs and can eat a free plan's allowance quickly. For bulk scraping, switch to datacenter proxies:

{
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["DATACENTER"] }
}

Two more ways to cut cost:

  • Turn off detail pages. With fetchJobDetails: false the actor reads only search pages, which carry ~30 offers each — about 1 request per 30 jobs instead of 31. You lose the description, structured salary, requirements and tags, but keep title, company, location, contract, salary text and link.
  • Lower maxConcurrency (default 10) if you are hitting proxy errors; the crawler retries automatically, but fewer parallel requests means fewer retries to pay for.

Disclaimer

This is an unofficial scraper. It is not affiliated with, endorsed by, or sponsored by HelloWork or its operators. "HelloWork" is a trademark of its respective owner and is referenced here only to describe the public website this actor collects data from.

Job listings can contain personal data. You are responsible for using the output lawfully, including under the GDPR, and in line with HelloWork's terms of use.

Running locally

npm install
apify run --purge # reads storage/key_value_stores/default/INPUT.json

Deployment

apify login
apify push