Search Indeed jobs
TL;DR
About
Say you're hunting for a data analyst job in Austin. Run query "data analyst", location "Austin, TX" and sortBy "date" each morning, compare the jobKey values with yesterday's list, and open only new ones with a salary. Each run returns one results page of job cards, with salary as raw text when Indeed shows one and postedAgo as a phrase like "3 days ago". Outside the US, set country to "fr", "de" or "uk" so the location belongs to that country's Indeed site. If outOfCountry comes back true, Indeed swapped your location for generic results and total means nothing. Two limits apply. Anonymous search only works for page 1, so narrow the query instead of paging. And Indeed can bounce datacenter traffic to a login page, so a hosted run needs an in-country residential proxy, while your own Chrome sends the search from your home connection. You get the viewjob link, not the job description.
Input
query requiredFree-text job search query, same as Indeed's search box (e.g. "data engineer"). Must be non-empty — an empty query redirects Indeed to its homepage instead of a results page.
page optional1-based page. Only page=1 is reliably supported anonymously — Indeed shows a sign-in wall for further pages, which the script surfaces as a thrown error.
Default: 1radius optionalDistance around `location`, from Indeed's distance menu: miles on www.indeed.com, kilometres on most other country sites; 0 = exact location only. Omit for Indeed's default (25).
sortBy optionalSort order. Default: relevance (Indeed's own default).
Default: "relevance"country optionalIndeed country site to search, as its subdomain code (e.g. "us", "fr", "de", "uk", "ca"). Lowercased; "us" maps to www.indeed.com, others to "<country>.indeed.com".
Default: "us"location optionalFree-text location (e.g. "Paris", "Berlin"). Must match the chosen country site or Indeed marks the result outOfCountry and returns unrelated jobs.
jobTypeId optionalIndeed's id for one job type, as its own job-type filter puts it in the URL (`sc=0kf:attr(<id>);`), e.g. "CF3CP" = full-time. Omit for every job type.
postedWithinDays optionalOnly jobs posted in the last 1, 3, 7 or 14 days (Indeed's date-posted menu). Omit for any date.
Output
jobs requiredpage requiredtotal requiredMatching job count reported by Indeed for this query/location.
outOfCountry requiredIndeed's own flag, as it sends it: true when Indeed treats this browser as visiting the country site from outside that country. Indeed judges it from the browser's network, not from the location searched. null when this run could not read it (e.g. a search with no jobs, where Indeed sends no job-card data).
Example output
Shape only: placeholder values generated from the output schema, not a real run.
{
"jobs": [
{
"url": "https://example.com/item/123",
"title": "Example",
"jobKey": "…",
"remote": true,
"salary": "…",
"company": "…",
"jobTypes": [
"…"
],
"location": "…",
"postedAgo": "…",
"sponsored": true
}
],
"page": 1,
"total": 3,
"outOfCountry": true
}