Search HelloWork jobs
TL;DR
About
Give it what you would type into HelloWork's two search boxes, say "data engineer" and "Lyon", and you get the 30 cards from that results page back as rows, each with a numeric jobId you can key a spreadsheet on. A business developer at a Lyon agency that places freelance data engineers could pull every page each morning (77 offers meant three runs when we checked) and diff the jobIds against yesterday's sheet. Any new jobId is a company hiring now and worth a call. The code sends no sort option, so the order is whatever HelloWork serves by default, and a new offer can land on any page. Text comes back as HelloWork prints it, in French, so postedAgo reads "il y a 4 jours" and salary is a raw string you parse yourself. It stops at the search cards: no full description and no applying.
Input
query requiredFree-text job search query, same as HelloWork's own search box (e.g. "data engineer").
page optional1-based page, 30 offers per page (HelloWork's own ?p= param).
Default: 1location optionalFree-text location (e.g. "Paris", "Lyon"). Omit to search all of France.
Output
jobs requiredpage requiredtotal requiredMatching offer count reported by HelloWork's own results header. 0 with empty jobs[] = no matching offers (first-class outcome, not an error).
Example output
Shape only: placeholder values generated from the output schema, not a real run.
{
"jobs": [
{
"url": "https://example.com/item/123",
"jobId": "abc123",
"title": "Example",
"salary": "…",
"company": "…",
"contract": "…",
"location": "…",
"postedAgo": "…",
"remoteTag": "…",
"superRecruiter": true
}
],
"page": 1,
"total": 3
}