
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Export job listings from HelloWork (hellowork.com), one of France's largest job boards, by keyword, location, contract, date, salary and remote filters, or from search and job links. Get salary ranges, contract, company, address, skills, full description and posting dates. No login needed.
Export job listings from HelloWork (hellowork.com), one of France's largest job boards, into clean JSON, CSV or Excel. Search by keyword and location with contract, date, salary and remote filters, or paste HelloWork search and job links. Every job comes with the salary range, contract, company, full address, skills, posting and expiry dates and the full description. No login, no browser, a few seconds per run.
/fr-fr/emploi/metier_…) and single job pages.comptable) and a Location (e.g. Lyon), or paste HelloWork links into HelloWork links.| Field | What it does |
|---|---|
keyword | Job title, skill or company. Empty = all jobs in the location. |
location | City, postcode, department or region in France. Empty = all of France. |
startUrls | HelloWork search links, category pages or job links. |
results_wanted | Maximum number of jobs (0 = no limit, up to 100,000). |
contractTypes | CDI, CDD, Travail_temp (intérim), Stage, Alternance, Freelance, … |
datePosted | all, 24h, 3d, week, month. |
radiusKm, minSalary, salaryOnly | Radius around the location (0/5/10/20/50 km), minimum yearly salary, only jobs with a salary. |
remote, experience, workTime, companyTypes | Remote work, required experience, full/part time, employer type. |
sortBy | relevance or date (newest first). |
collectDetails | On: open each job page for the full record. Off: result-card fields only. |
max_pages | Optional cap on result pages per search. |
{
"keyword": "comptable",
"location": "Lyon",
"results_wanted": 100,
"contractTypes": ["CDI"],
"datePosted": "week",
"sortBy": "date"
}
| Field | Example |
|---|---|
title, company, url, job_id | Job title, company, job page and id |
location, city, postal_code, region, country | Paris, 75000, Île-de-France, FR |
contract_type, employment_type_raw, remote, work_setting | CDI, FULL_TIME, Télétravail partiel, TELECOMMUTE |
salary, salary_min, salary_max, salary_currency, salary_period, salary_label | 45000 - 55000 EUR / YEAR |
date_posted, valid_through, posted_ago | ISO dates, and "il y a 2 jours" from the result card |
skills, skills_list, education, experience, qualifications | Requirements |
industry, occupational_category, job_family, company_type, tags | Classification |
description_html, description_text | Full description |
company_url, company_logo, reference, list_page_url, scraped_at | Extras |
Example (trimmed):
{
"job_id": "84394964",
"title": "Senior Software Engineer H/F",
"company": "Exemple Conseil",
"location": "Paris, 75000, Île-de-France, FR",
"location_label": "Paris - 75",
"salary": "55000 - 80000 EUR / YEAR",
"salary_label": "55 000 - 80 000 € / an",
"contract_type": "CDI",
"url": "https://www.hellowork.com/fr-fr/emplois/84394964.html",
"company_type": "Cabinet de recrutement",
"city": "Paris",
"postal_code": "75000",
"region": "Île-de-France",
"country": "FR",
"salary_min": 55000,
"salary_max": 80000,
"salary_currency": "EUR",
"salary_period": "YEAR",
"employment_type_raw": "FULL_TIME",
"date_posted": "2026-10-13T16:45:34Z",
"valid_through": "2026-11-12T16:45:34Z",
"skills": "Anglais, API, AWS, Angular, Kubernetes, Python, Java, Docker",
"education": "postgraduate degree, bachelor degree, associate degree",
"experience": "12",
"industry": "Services aux Entreprises",
"occupational_category": "Informatique",
"tags": ["55 000 - 80 000 € / an", "Cabinet de recrutement", "Bac +5", "Exp. 5 ans min."],
"description_text": "Détail du poste\n\nSenior Software Engineer (H/F)\n\nInformations pratiques…",
"scraped_at": "2026-10-15T23:41:47Z"
}
With Open each job page off, rows hold the result-card fields: title, company, location, contract, salary label, remote label, logo, posted_ago and the job link.
You pay $0.75 per 1,000 jobs saved ($0.00075 per job), plus a small amount of platform usage (compute and datacenter proxy traffic, about $0.06 per 1,000 full jobs). Example: 1,000 jobs with full details ≈ $0.81 in total. Jobs that are skipped (removed from the site, invalid links) are never charged, and the run stops cleanly at your maximum total charge.
Is it legal? The actor reads public job pages that anyone can open without an account. You are responsible for how you use the data (for example GDPR rules on any personal data inside descriptions).
Do I need a HelloWork account or my own proxy? No. Datacenter proxies are included and work well; residential exits (pinned to France) are available if you ever need them.
How many jobs can I get? As many as HelloWork lists for your search (shown in the status message), up to 100,000 per run. Several keywords can be scraped by pasting several search links.
Why is a field empty? Employers don't always publish a salary, skills or remote-work policy. Empty fields mean the job page doesn't show them.
Can I schedule it or use the API? Yes. Schedule daily runs with "Newest first" and "Posted within: Last 24 hours" for an alert feed, and read results through the API or integrations.
Moving from another HelloWork scraper? The main input fields (keyword, location, startUrl, results_wanted, collectDetails, max_pages) and output field names match the common HelloWork scraper format, so most setups work unchanged.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
keywordstringOptionalKeyword
Job title, skill or company, e.g. 'développeur', 'comptable', 'infirmier'. Leave empty to list all jobs in the location.
locationstringOptionalLocation
City, postcode, department or region in France, e.g. 'Paris', '69001', 'Bretagne'. Leave empty for all of France.
startUrlsarrayOptionalHelloWork links
Optional. Search result links (hellowork.com/fr-fr/emploi/recherche.html?... or category pages like /fr-fr/emploi/metier_...html) and single job links (hellowork.com/fr-fr/emplois/12345678.html). Filters below are added to pasted search links.
results_wantedintegerOptionaldefault 20Maximum jobs
How many jobs to save in total. 0 = no limit (up to 100,000).
contractTypesarrayOptionalContract type
Only jobs with one of these contracts.
datePostedenumOptionalPosted within
Only jobs published within this period.
radiusKmintegerOptionalRadius (km)
Distance around the location. HelloWork supports 0, 5, 10, 20 (site default) and 50 km; other values are rounded to the nearest.
minSalaryintegerOptionalMinimum yearly salary (€)
Only jobs paying at least this gross yearly salary (rounded down to the nearest 1,000 €).
salaryOnlybooleanOptionalOnly jobs with a salary
Skip jobs that don't show a salary.
remotearrayOptionalRemote work
Only jobs with these remote-work options.
experiencearrayOptionalExperience
Required experience.
workTimearrayOptionalWorking time
Full-time or part-time.
companyTypesarrayOptionalEmployer type
Type of recruiter.
sortByenumOptionalSort by
Relevance (site default) or newest first.
collectDetailsbooleanOptionaldefault trueOpen each job page
On (recommended): full description, exact salary range, posting and expiry dates, address, skills, education and experience. Off: only the fields on the result cards (faster, same price per job).
max_pagesintegerOptionalMaximum result pages per search
Optional cap on result pages read per search (30 jobs per page on keyword searches, 20 on category pages). Empty or 0 = as many as needed.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are the default and work well for HelloWork. Residential exits are pinned to France unless you choose a country.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| job_id | string | null | HelloWork job id |
| title | string | null | Job title |
| company | string | null | Company name |
| location | string | null | City, postcode, region, country |
| location_label | string | null | Location as shown on HelloWork |
| salary | string | null | Salary range, e.g. '45000 - 55000 EUR / YEAR' |
| salary_label | string | null | Salary as shown on HelloWork |
| contract_type | string | null | Contract type(s), e.g. CDI |
| url | string | null | Job page |
| list_page_url | string | null | Search page the job was found on |
| company_url | string | null | Company page on HelloWork |
| company_logo | string | null | Company logo |
| company_type | string | null | Employer type, e.g. Cabinet de recrutement |
| city | string | null | City |
| postal_code | string | null | Postcode |
| region | string | null | Region |
| country | string | null | Country code |
| salary_min | number | null | Minimum salary |
| salary_max | number | null | Maximum salary |
| salary_currency | string | null | Salary currency |
| salary_period | string | null | YEAR, MONTH, HOUR... |
| employment_type_raw | string | null | FULL_TIME, PART_TIME... |
| work_setting | string | null | TELECOMMUTE when remote work is possible |
| remote | string | null | Remote-work label |
| date_posted | string | null | Publication date (ISO) |
| posted_ago | string | null | Relative age shown on the result card |
| valid_through | string | null | Expiry date (ISO) |
| skills | string | null | Skills, comma-separated |
| skills_list | array | null | Skills as a list |
| qualifications | string | null | Candidate profile (HTML) |
| education | string | null | Education requirements |
| experience | string | null | Months of experience required, or 'no requirements' |
| industry | string | null | Industry |
| occupational_category | string | null | Occupational category |
| job_family | string | null | Job family slug |
| direct_apply | boolean | null | Apply directly on HelloWork |
| tags | array | null | Tags shown on the job page |
| description_html | string | null | Full description (HTML) |
| description_text | string | null | Full description (plain text) |
| reference | string | null | Recruiter's own job reference |
| scraped_at | string | null | When the job was saved |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Job | One saved job listing. | $0.00075 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/hellowork-scraper').call({
"keyword": "software engineer",
"location": "Paris",
"results_wanted": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/hellowork-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/hellowork-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
HelloWork jobs by keyword and city with full details.
Jobs posted this week, newest first.
Only jobs that show a salary.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.