HelloWork Jobs Scraper — Salaries & Company Data avatar

HelloWork Jobs Scraper — Salaries & Company Data

Pricing

from $1.00 / 1,000 results

Go to Apify Store
HelloWork Jobs Scraper — Salaries & Company Data

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

19 hours ago

Last modified

Features

Limited permissions

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.

Actor Country Salary Full description Output Pagination Maintenance


⚡ At a glance

FeatureDetails & Support
Target Websitehellowork.com (France-wide national and regional listings)
Target DataJob postings, verified employers, compensation bands, required skills, full text descriptions
Search StrategiesKeyword combinations, Location filters (city/department/region), Direct HelloWork URLs
Contract FiltersCDI, CDD, Intérim (Travail temporaire), Stage, Alternance, Freelance, Indépendant
Pagination DepthContinuous automated pagination unlocked for 1,000+ jobs
DeduplicationAutomatic de-duplication across queries by canonical jobId
Enrichment ModeOptional deep parsing for full qualifications, salary percentiles, and employer data
Export FormatsJSON, CSV, XLSX, XML, RSS, HTML Table, Apify Dataset API
AutomationScheduled 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/salaryMax in 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

CapabilityHelloWork Jobs ScraperGeneric 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=3 pagination 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:

ParameterTypeDefaultDescription
searchKeywordsArray["développeur"]Target job keywords, professions, or technologies.
locationsArray["Paris"]Target cities, departments, or regions (leave empty for all France).
startUrlsArray[]Direct search or individual job URLs to scrape.
contractTypesArray[]Filter by CDI, CDD, Travail_temp, Stage, Alternance, Freelance.
remoteOnlyBooleanfalseRestrict extraction to remote or hybrid opportunities.
postedWithinDaysInteger0Filter listings published within the last N days (0 = disabled).
minSalaryInteger0Minimum annual salary threshold in EUR (0 = disabled).
includeDetailsBooleanfalseVisit individual job pages to extract full text, skills, and requirements.
includeDescriptionHtmlBooleanfalseInclude formatted raw HTML alongside clean description text.
maxPagesPerQueryInteger0Maximum pages per keyword/location query (0 = unlimited pagination).
maxItemsInteger50Maximum total listings to collect across the entire run.
maxConcurrencyInteger8Parallel request concurrency for detail page fetching.
proxyConfigurationObject{ "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 CategoryField NameTypeCoverageDescription
Core IdentifiersjobIdString🟢 High (100%)Unique HelloWork listing ID (used for deduplication).
titleString🟢 High (100%)Published vacancy title.
urlString🟢 High (100%)Canonical URL to the listing on hellowork.com.
referenceString🟢 High (92%)Employer or agency job requisition reference code.
Employer ProfilecompanyString🟢 High (99%)Employer name (null when confidential).
companyConfidentialBoolean🟢 High (100%)Indicates whether employer name is intentionally hidden.
companyUrlString🟢 High (94%)Direct link to employer profile on HelloWork.
companyLogoUrlString🟡 ConditionalOfficial company logo image link when hosted.
industryArray🟢 High (95%)Primary industry sectors of the hiring entity.
Location & DatelocationString🟢 High (100%)Human-readable location string (City - Postal Code).
city / postalCodeString🟢 High (88%)Parsed French city and 5-digit postal code.
region / countryCodeString🟢 High (98%)French administrative region and ISO country code (FR).
datePostedString🟢 High (100%)ISO publication timestamp.
validThroughString🟢 High (95%)Application expiration deadline.
Contract & CompcontractTypeString🟢 High (100%)Contract type (CDI, CDD, Intérim, Alternance, Stage).
remoteWorkString🟡 ConditionalRemote work specification (Télétravail partiel / complet).
salaryTextString🟡 ConditionalPublished raw salary text label.
salaryMin / salaryMaxNumber🟡 ConditionalParsed minimum and maximum compensation in EUR.
salaryCurrencyString🟡 ConditionalCurrency code (typically EUR).
salaryPeriodString🟡 ConditionalCadence of compensation (year, month, hour).
estimatedSalaryMedianNumber🟡 ConditionalHelloWork algorithmic market benchmark estimate.
QualificationsskillsArray🟢 High (96% detail)Normalized technology and competency tags.
requirementsString🟢 High (85% detail)Extracted candidate requirement summary.
educationRequirementsArray🟢 High (93% detail)Educational qualifications (Master, Bac+3, etc.).
experienceMonthsInteger🟡 ConditionalExplicit required professional experience in months.
descriptionString🟢 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 until maxItems is satisfied.
  • Zero Page Bottlenecks: Set maxPagesPerQuery: 0 to 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

  1. Configure Parameters: Navigate to the Input tab on the Apify Console. Enter your target keywords and French locations.
  2. Select Collection Mode: Keep includeDetails turned off for lightning-fast overview scraping, or enable it for complete job descriptions and skill arrays.
  3. Execute Run: Click Start. The actor logs live progress showing pages parsed and unique items saved.
  4. 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 ApifyClient
import pandas as pd
client = 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().items
print(f"Retrieved {len(dataset_items)} French job listings.")
# Convert directly into Pandas DataFrame
df = 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 locations to perform an exhaustive nationwide search, or specify exact cities for local recruitment sourcing.
  • ⚡ Optimize Execution Speed: Keep includeDetails: false when 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.
⌂ 换网址