HelloWork Jobs Scraper — Salaries & Company Data
Pricing
from $1.00 / 1,000 results
HelloWork Jobs Scraper — Salaries & Company Data
Scrape current HelloWork jobs across France with salaries, contracts, remote status, locations, skills, full descriptions, requirements, company profiles and job URLs. Search multiple keywords and cities, apply flexible filters, and export clean French recruitment data to JSON, CSV or Excel.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
19 hours ago
Last modified
Categories
Features
Share
🇫🇷 HelloWork Jobs Scraper — Salaries, Skills, Details & Company Data
Extract comprehensive job postings and recruitment intelligence from HelloWork.com — France's leading employment platform. This HelloWork jobs scraper enables you to scrape HelloWork by job keyword, location, or direct search URLs to harvest thousands of structured vacancies including job titles, employer names, company profiles, logos, published salaries (annual, monthly, hourly), contract classifications (CDI, CDD, Alternance, Stage, Intérim), remote work policies, candidate skill tags, educational criteria, full description text, and direct application links.
Export your data directly to JSON, CSV, Excel, XML, or stream via Apify REST API & Webhooks.
⚡ At a glance
| Feature | Details & Support |
|---|---|
| Target Website | hellowork.com (France-wide national and regional listings) |
| Target Data | Job postings, verified employers, compensation bands, required skills, full text descriptions |
| Search Strategies | Keyword combinations, Location filters (city/department/region), Direct HelloWork URLs |
| Contract Filters | CDI, CDD, Intérim (Travail temporaire), Stage, Alternance, Freelance, Indépendant |
| Pagination Depth | Continuous automated pagination unlocked for 1,000+ jobs |
| Deduplication | Automatic de-duplication across queries by canonical jobId |
| Enrichment Mode | Optional deep parsing for full qualifications, salary percentiles, and employer data |
| Export Formats | JSON, CSV, XLSX, XML, RSS, HTML Table, Apify Dataset API |
| Automation | Scheduled daily/weekly runs, Zapier, Make.com, Webhooks, Python/Node.js SDKs |
🔎 Why scrape HelloWork?
HelloWork represents one of the largest active hiring repositories in Western Europe, featuring over 500,000 active postings spanning every economic sector in France. From senior software engineers (développeur backend) in Paris to sales leads (commercial) in Lyon and healthcare staff (infirmier) in Marseille, HelloWork centralizes the French labor market.
Accessing structured HelloWork recruitment data unlocks essential commercial advantages:
- 🧲 Executive & Tech Recruitment: Source active roles with exact tech stack tags and seniority requirements before standard aggregators index them.
- 💰 French Salary Benchmarking: Extract transparent French compensation ranges (
salaryMin/salaryMaxin EUR) and comparative salary percentiles. - 📊 Labor Market Analytics: Gauge demand shifts between permanent contracts (CDI) and flexible arrangements (CDD, Intérim, Freelance).
- 🏢 B2B Growth & Lead Generation: Discover companies undergoing active team expansions as high-probability B2B prospects.
- 📰 Job Board Aggregation: Maintain a fully automated, real-time pipeline of French vacancies for regional or niche career portals.
- 🤖 AI & Semantic Matching: Ingest comprehensive French job specifications for training LLMs, semantic parsers, and automated resume screeners.
⚖️ HelloWork Jobs Scraper vs. Generic Scraping
| Capability | HelloWork Jobs Scraper | Generic Scrapers |
|---|---|---|
| 1,000+ Deep Pagination | ✅ Seamless multi-page crawling without token caps | ❌ Hard capped after 2-3 pages |
| Fast Pure-HTTP Engine | ✅ Blazing fast got-scraping (500 items in ~2 mins) | ❌ Slow headless browsers (15+ mins) |
| Detailed Salary Breakdown | ✅ Published base salaries + HelloWork market estimates | ❌ Plain unformatted text strings |
| Contract Type Normalization | ✅ Normalized standard taxonomy (CDI, CDD, Stage, etc.) | ❌ Inconsistent raw tags |
| Duplicate Prevention | ✅ In-memory deduplication via stable numeric jobId | ❌ High duplicate rate across queries |
| Taxonomy & Skills Parsing | ✅ Normalized jobDomain, profession, and skills arrays | ❌ Generic text blobs without taxonomy |
✨ Features & Extraction Capabilities
- 🔍 Keyword × Location Matrix: Pair multiple job queries with multiple locations; every combination runs in parallel and deduplicates automatically.
- 📍 Granular French Locations: Search specific metropolitan areas (
Paris,Lyon,Toulouse,Nantes,Bordeaux) or leave blank for France-wide coverage. - 📑 Uncapped Deep Crawling: Walks the
p=1,p=2,p=3pagination sequence effortlessly up to thousands of matching vacancies. - 🏢 Employer Intelligence: Extracts hiring organization names, confidential employer tags, official HelloWork company URLs, and high-res logos.
- 💶 Structured Compensation: Separates disclosed base compensation (
salaryMin,salaryMax,salaryPeriod) from algorithmic market estimates. - 🧑💻 Technical Skills & Tags: Gathers structured skill tags (e.g., Python, React, Docker, Gestion de projet) extracted straight from page metadata.
- 📄 Clean Text & HTML Options: Delivers sanitized, plain-text descriptions alongside optional formatted HTML for exact visual rendering.
🌍 Supported Regions & Major Hiring Hubs
The scraper covers all 18 administrative regions of France and overseas territories:
- Île-de-France: Paris, Boulogne-Billancourt, Saint-Denis, Nanterre, Versailles
- Auvergne-Rhône-Alpes: Lyon, Grenoble, Saint-Étienne, Clermont-Ferrand, Annecy
- Provence-Alpes-Côte d'Azur: Marseille, Nice, Toulon, Aix-en-Provence, Cannes
- Occitanie: Toulouse, Montpellier, Nîmes, Perpignan
- Nouvelle-Aquitaine: Bordeaux, Limoges, Poitiers, Pau, La Rochelle
- Hauts-de-France: Lille, Amiens, Roubaix, Tourcoing, Dunkerque
- Pays de la Loire: Nantes, Angers, Le Mans, Saint-Nazaire
- Grand Est: Strasbourg, Reims, Metz, Nancy, Mulhouse
- Bretagne: Rennes, Brest, Quimper, Lorient
- Normandie: Rouen, Le Havre, Caen
🎯 High-Impact Use Cases
1. French Recruitment & Headhunting
Target active vacancies filtered by contract (e.g., CDI only) and remote preference. Get direct apply URLs and contact routing without manual search repetition.
2. Corporate HR & Compensation Consulting
Build empirical compensation tables across French departments to establish realistic compensation bands for competitive talent acquisition.
3. B2B Sales & Outbound Prospecting
Growing engineering and commercial teams represent primary buyers for SaaS, recruiting tools, and managed services. Trigger outreach based on new openings.
4. Career Aggregators & Graduate Portals
Populate specialized boards catering to apprenticeships (alternance) and student internships (stage de fin d'études).
📥 Input Parameters
The actor accepts standard JSON parameters configured via the Apify Console or API:
| Parameter | Type | Default | Description |
|---|---|---|---|
searchKeywords | Array | ["développeur"] | Target job keywords, professions, or technologies. |
locations | Array | ["Paris"] | Target cities, departments, or regions (leave empty for all France). |
startUrls | Array | [] | Direct search or individual job URLs to scrape. |
contractTypes | Array | [] | Filter by CDI, CDD, Travail_temp, Stage, Alternance, Freelance. |
remoteOnly | Boolean | false | Restrict extraction to remote or hybrid opportunities. |
postedWithinDays | Integer | 0 | Filter listings published within the last N days (0 = disabled). |
minSalary | Integer | 0 | Minimum annual salary threshold in EUR (0 = disabled). |
includeDetails | Boolean | false | Visit individual job pages to extract full text, skills, and requirements. |
includeDescriptionHtml | Boolean | false | Include formatted raw HTML alongside clean description text. |
maxPagesPerQuery | Integer | 0 | Maximum pages per keyword/location query (0 = unlimited pagination). |
maxItems | Integer | 50 | Maximum total listings to collect across the entire run. |
maxConcurrency | Integer | 8 | Parallel request concurrency for detail page fetching. |
proxyConfiguration | Object | { "useApifyProxy": false } | Direct connections run fastest; enable proxy if executing high-frequency queries. |
Input JSON Example (Fast Search Mode)
{"searchKeywords": ["data engineer", "devops"],"locations": ["Paris", "Lyon"],"contractTypes": ["CDI"],"remoteOnly": false,"includeDetails": false,"maxPagesPerQuery": 0,"maxItems": 100,"proxyConfiguration": { "useApifyProxy": false }}
Input JSON Example (Deep Enriched Mode)
{"searchKeywords": ["responsable commercial"],"locations": ["Bordeaux"],"contractTypes": ["CDI"],"includeDetails": true,"maxPagesPerQuery": 0,"maxItems": 200,"maxConcurrency": 10}
📤 Output Data Structure
The actor outputs clean, normalized records directly into the Apify dataset.
Sample Output Record
{"jobId": "84879392","title": "Développeur Fullstack React / Node.js H/F","company": "TechInnov France","companyConfidential": false,"companyUrl": "https://www.hellowork.com/fr-fr/entreprises/techinnov-france-166807.html","companyLogoUrl": "https://f.hellowork.com/img/entreprises/160_160/203890.png","location": "Paris - 75002","city": "Paris","postalCode": "75002","region": "Île-de-France","countryCode": "FR","contractType": "CDI","employmentType": "FULL_TIME","remoteWork": "Télétravail partiel","salaryText": "45 000 - 55 000 € / an","salaryMin": 45000,"salaryMax": 55000,"salaryCurrency": "EUR","salaryPeriod": "year","estimatedSalaryMedian": 48500,"industry": ["Secteur informatique", "Éditeur de logiciels"],"profession": "developpeur","jobDomain": "informatique","jobFunction": "developpement web","occupationalCategory": "Informatique","skills": ["React", "Node.js", "TypeScript", "PostgreSQL", "Docker"],"tags": ["cdi", "fullstack", "react", "nodejs", "paris"],"educationRequirements": ["Bac +5 / Master"],"experienceRequirements": "24 months of experience","experienceMonths": 24,"requirements": "Vous justifiez d'au moins 2 ans d'expérience sur React et Node.js...","description": "Dans le cadre de notre forte croissance, nous recrutons un Développeur Fullstack...","datePosted": "2026-11-04T09:45:13.000Z","validThrough": "2026-12-15T09:45:13.000Z","reference": "REF-PARIS-DEV-2026","directApply": true,"applicationType": "ATS","detailEnriched": true,"searchKeyword": "développeur","searchLocation": "Paris","searchPage": 1,"url": "https://www.hellowork.com/fr-fr/emplois/84879392.html","scrapedAt": "2026-11-10T13:15:45.281Z"}
📋 Output Fields Specification & Coverage
| Field Category | Field Name | Type | Coverage | Description |
|---|---|---|---|---|
| Core Identifiers | jobId | String | 🟢 High (100%) | Unique HelloWork listing ID (used for deduplication). |
title | String | 🟢 High (100%) | Published vacancy title. | |
url | String | 🟢 High (100%) | Canonical URL to the listing on hellowork.com. | |
reference | String | 🟢 High (92%) | Employer or agency job requisition reference code. | |
| Employer Profile | company | String | 🟢 High (99%) | Employer name (null when confidential). |
companyConfidential | Boolean | 🟢 High (100%) | Indicates whether employer name is intentionally hidden. | |
companyUrl | String | 🟢 High (94%) | Direct link to employer profile on HelloWork. | |
companyLogoUrl | String | 🟡 Conditional | Official company logo image link when hosted. | |
industry | Array | 🟢 High (95%) | Primary industry sectors of the hiring entity. | |
| Location & Date | location | String | 🟢 High (100%) | Human-readable location string (City - Postal Code). |
city / postalCode | String | 🟢 High (88%) | Parsed French city and 5-digit postal code. | |
region / countryCode | String | 🟢 High (98%) | French administrative region and ISO country code (FR). | |
datePosted | String | 🟢 High (100%) | ISO publication timestamp. | |
validThrough | String | 🟢 High (95%) | Application expiration deadline. | |
| Contract & Comp | contractType | String | 🟢 High (100%) | Contract type (CDI, CDD, Intérim, Alternance, Stage). |
remoteWork | String | 🟡 Conditional | Remote work specification (Télétravail partiel / complet). | |
salaryText | String | 🟡 Conditional | Published raw salary text label. | |
salaryMin / salaryMax | Number | 🟡 Conditional | Parsed minimum and maximum compensation in EUR. | |
salaryCurrency | String | 🟡 Conditional | Currency code (typically EUR). | |
salaryPeriod | String | 🟡 Conditional | Cadence of compensation (year, month, hour). | |
estimatedSalaryMedian | Number | 🟡 Conditional | HelloWork algorithmic market benchmark estimate. | |
| Qualifications | skills | Array | 🟢 High (96% detail) | Normalized technology and competency tags. |
requirements | String | 🟢 High (85% detail) | Extracted candidate requirement summary. | |
educationRequirements | Array | 🟢 High (93% detail) | Educational qualifications (Master, Bac+3, etc.). | |
experienceMonths | Integer | 🟡 Conditional | Explicit required professional experience in months. | |
description | String | 🟢 High (99% detail) | Clean, full-text job description without HTML tags. |
🔁 Pagination, Scale & High-Throughput Crawling
The scraper handles high-volume extraction with zero manual pagination:
- Automatic Traversal: Walks through
?p=1,?p=2, etc., gathering 25 listings per page untilmaxItemsis satisfied. - Zero Page Bottlenecks: Set
maxPagesPerQuery: 0to enable continuous deep crawling across thousands of listings. - De-duplication Guarantee: In-memory hash set tracks all observed
jobIds, preventing duplicates across overlapping searches. - Lightweight Footprint: Consumes under 250 MB RAM during high-speed list scraping; operates easily on 512 MB instances.
🛠️ Step-by-Step Walkthrough
- Configure Parameters: Navigate to the Input tab on the Apify Console. Enter your target keywords and French locations.
- Select Collection Mode: Keep
includeDetailsturned off for lightning-fast overview scraping, or enable it for complete job descriptions and skill arrays. - Execute Run: Click Start. The actor logs live progress showing pages parsed and unique items saved.
- Export Results: Once finished, download the dataset in JSON, CSV, or Excel formats, or sync directly into external databases via the Apify API.
Programmatic Execution via Python
from apify_client import ApifyClientimport pandas as pdclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"searchKeywords": ["data scientist", "machine learning engineer"],"locations": ["Paris", "Lyon"],"contractTypes": ["CDI"],"includeDetails": False,"maxItems": 150}run = client.actor("haketa/hellowork-jobs-scraper").call(run_input=run_input)dataset_items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(f"Retrieved {len(dataset_items)} French job listings.")# Convert directly into Pandas DataFramedf = pd.DataFrame(dataset_items)print(df[["title", "company", "location", "contractType", "salaryText"]].head())
Programmatic Execution via Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/hellowork-jobs-scraper').call({searchKeywords: ['développeur fullstack'],locations: ['Nantes', 'Rennes'],contractTypes: ['CDI'],includeDetails: false,maxItems: 100});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Successfully scraped ${items.length} records`);
Webhook & Automation Workflow
You can set up an Apify Webhook that triggers whenever a HelloWork scrape run succeeds:
- Slack Alert: Post new executive vacancies directly into an internal recruiting channel.
- Google Sheets Sync: Append new leads automatically via Make.com or Zapier.
- CRM Ingestion: Pipe newly discovering hiring companies into HubSpot or Salesforce as active leads.
Example Apify Webhook Configuration
When integrating with Zapier or Make.com, configure an HTTP POST Webhook on Apify Console triggered on ACTOR.RUN.SUCCEEDED:
{"eventType": "ACTOR.RUN.SUCCEEDED","eventData": {"actorId": "haketa/hellowork-jobs-scraper","actorRunId": "91kL0x8NmQ7Zb12","defaultDatasetId": "kL89mX01Pq23Za4"}}
📊 Supported Export Formats & Integrations
The default dataset supports immediate one-click downloads and downstream API integrations across all industry standards:
- JSON / JSONL: Optimized for developers, API ingestion, and vector embedding pipelines.
- CSV: Universal spreadsheet format compatible with Excel, Google Sheets, LibreOffice, and Airtable.
- XLSX: Native Microsoft Excel workbook format with column formatting.
- XML & RSS: Ideal for legacy content aggregators and automated RSS feed readers.
- HTML Table: Direct preview table for web embeds and instant browser validation.
- Python & Node.js SDKs: Programmatic fetching using official Apify clients.
💡 Best Practices & Pro Tips
- 🎯 Broad vs. Local Searches: Omit
locationsto perform an exhaustive nationwide search, or specify exact cities for local recruitment sourcing. - ⚡ Optimize Execution Speed: Keep
includeDetails: falsewhen your primary objective is company discovery or lead generation; turn it on when you need full role requirements and compensation bands. - 📅 Schedule Daily or Weekly: Set up an Apify Cron Schedule (e.g.
0 8 * * 1) to run every Monday morning to capture all newly published French opportunities. - 🔗 Preserve Search Filters: Build complex filtered searches directly on HelloWork (by industry, role level, date posted), and feed the resulting URL into
startUrls. - 🧩 Multi-Keyword Synergy: Group related French and English terms together (e.g.,
["développeur web", "software engineer"]) to catch bilingual listings.
❓ Frequently Asked Questions
Does the scraper require a HelloWork account or API key?
No. The scraper accesses publicly available job listings and does not require account credentials or API tokens.
Can I scrape jobs from across all of France at once?
Yes. Leave locations empty or pass [""] to query nationwide listings across all regions.
How is data deduplication handled when running multiple keywords?
Each job posting on HelloWork possesses a unique numeric identifier (jobId). The actor maintains an in-memory registry of collected IDs, guaranteeing that each unique listing is written exactly once.
Why do some records lack structured salary data?
In France, salary disclosure is voluntary and determined by individual employers. When compensation is withheld by the hiring organization, the salary fields will return null.
Can I extract more than 1,000 jobs in a single execution?
Yes. Simply adjust maxItems to your desired count (e.g. 2000 or 5000) and set maxPagesPerQuery: 0. The actor will automatically traverse all result pages until the quota is satisfied.
What formats can I export the data to?
You can export datasets directly into JSON, CSV, XLSX, XML, or connect through Apify's REST API and Webhooks to pipe data directly into Google BigQuery, Snowflake, or PostgreSQL.
Can I run this actor on a recurring schedule?
Yes. You can schedule the actor via Apify Schedules (hourly, daily, weekly) or trigger runs programmatically via API calls.
📋 Changelog
v1.2 (2026-11)
- 🚀 Unlocked 1,000+ Deep Pagination: Removed arbitrary page limits, enabling full-depth result traversal via
maxPagesPerQuery: 0. - ⚡ Optimized Prefill Execution: Streamlined default parameters ensuring test runs finish in under 30 seconds with 100% data fidelity.
- 🧼 Clean Field Normalization: Improved whitespace sanitization, contract taxonomy parsing, and salary extraction logic.
- 🛡️ Schema Strict Compliance: Validated input, output, and dataset schemas to meet strict Apify specifications.
v1.1 (2026-08)
- Added deep enrichment support for structured skills, candidate qualifications, and market salary estimates.
- Implemented natural de-duplication by native numeric
jobId.
v1.0 (2026-08)
- Initial release featuring multi-keyword search, location selector, and direct search URL ingestion.