curl --request POST \
--url https://api.scrapeunblocker.com/jobs/career-site \
--header 'x-scrapeunblocker-key: <api-key>'import requests
url = "https://api.scrapeunblocker.com/jobs/career-site"
headers = {"x-scrapeunblocker-key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'x-scrapeunblocker-key': '<api-key>'}};
fetch('https://api.scrapeunblocker.com/jobs/career-site', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Scrape company career sites (Greenhouse, Lever, Ashby, Workday and more)
Every open job on a company’s career site hosted on Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable or Recruitee, from its career page url (or provider + company). Each job (jobs) has id, title, company, provider, url, applyUrl, location and locations, country, remote, workplaceType (remote / hybrid / onsite), department, team, employmentType, postedAt, updatedAt, requisitionId, salary and salaryRanges (min, max, currency, interval) where the ATS publishes pay, customFields (the ATS’s extra fields) and, with include_description=true, descriptionText and descriptionHtml. A field the ATS does not expose is null. Filter with keyword (title words), location, department and remote; limit caps the jobs returned. The answer also carries the detected provider, company, companyName, boardUrl, totalJobs on the board and matchedJobs. A link to one posting returns just that posting with its description. Billed one unit per upstream request that returned data (pagesFetched): one for a whole Greenhouse, Ashby, Workable or Recruitee board, one per Lever (100 jobs), Workday (20 jobs) or SmartRecruiters (100 jobs) listing page, plus one per Workday / SmartRecruiters posting whose description is read.
curl --request POST \
--url https://api.scrapeunblocker.com/jobs/career-site \
--header 'x-scrapeunblocker-key: <api-key>'import requests
url = "https://api.scrapeunblocker.com/jobs/career-site"
headers = {"x-scrapeunblocker-key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'x-scrapeunblocker-key': '<api-key>'}};
fetch('https://api.scrapeunblocker.com/jobs/career-site', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Your ScrapeUnblocker API key. Apply on every request.
Query Parameters
The company's career page on its ATS, e.g. 'https://job-boards.greenhouse.io/stripe', 'https://jobs.lever.co/palantir', 'https://jobs.ashbyhq.com/ramp', 'https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite', 'https://jobs.smartrecruiters.com/Ubisoft2', 'https://apply.workable.com/huggingface', 'https://bunq.recruitee.com'. A link to one posting returns just that posting.
Instead of url: the ATS (greenhouse, lever, ashby, workday, smartrecruiters, workable, recruitee), with company.
Instead of url: the company's board name on that ATS, as in its career URL: Greenhouse token ('stripe'), Lever / Ashby / Workable / Recruitee slug, SmartRecruiters company id ('Ubisoft2'), Workday '.wd/' ('nvidia.wd5/NVIDIAExternalCareerSite').
Only jobs whose title contains every word, e.g. 'software engineer'.
Only jobs in this place (city, region or country as the company writes it, e.g. 'London', 'Germany', 'Remote'); case-insensitive.
Only jobs in this department or team, e.g. 'Engineering'.
Only remote jobs.
How many jobs to return (1-2000).
Add each job's full description (descriptionText, descriptionHtml). On Workday and SmartRecruiters this reads every posting separately (one billed request each, at most 300 per call).
Proxy country the requests are sent from (ISO-2, e.g. 'US', 'DE'). Leave blank to let the API pick.
Response
JSON with a jobs array plus the detected board and totals. A board with no open jobs (or none matching the filters) answers 200 with an empty jobs list.

