Company careers jobs
A company's open jobs, normalized, from its own ATS.
Pass the careers page or the job-board URL; the API finds the applicant-tracking system (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Workday, Recruitee, Personio) and reads that ATS's public job-board API — the same JSON its embeddable board uses, no browser. A board URL is parsed without fetching anything; a careers page is read (plus at most two linked careers pages) to find the board, and a page that names none falls back to the board named after the company's domain on Greenhouse or Ashby, taken only when that ATS says the board belongs to the same company (meta.detected_by: domain).
One call is one board. Greenhouse, Lever, Ashby, Workable, Recruitee and Personio answer the whole board in one upstream request; SmartRecruiters is paged 100 at a time (at most 20 pages) and Workday 20 at a time (at most 50 pages) until limit jobs match. include_description on SmartRecruiters and Workday costs one detail request per returned job, at most 100. total is the ATS's own count before filters; truncated says more jobs matched than were returned (or paging stopped at its bound). Each job carries posted_at / updated_at only from the ATS field that means that, employment_type verbatim, and compensation only when the ATS publishes a range.
No supported board found is a 422 that lists the supported ATSs; a board the ATS says does not exist is a 404. An empty board is not charged.
Request
https://api.scrapercompany.com/v1/careers/jobsAuthenticate with your API key in the x-api-key header (see Authentication).
Body
JSON object. Unknown fields are rejected with 422.
- urlstringrequiredmin length 4, max length 2048
The company's careers page or its job-board URL. Paste
https://www.figma.com/careers/orhttps://boards.greenhouse.io/figmaalike: the API finds the applicant-tracking system (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Workday, Recruitee, Personio) and the board internally; there is no ATS selector. - qstring | nullmax length 200
Keep jobs whose title contains this text (case-insensitive).
- locationstring | nullmax length 200
Keep jobs with a location containing this text (case-insensitive), e.g.
LondonorRemote. - departmentstring | nullmax length 200
Keep jobs whose department or team contains this text (case-insensitive).
- remote_onlybooleandefault
falseKeep only jobs the ATS itself labels remote (
workplace_type: remote). - include_descriptionbooleandefault
falseAdd each job's
description_text(the posting as readable text). Off by default: descriptions are most of the payload. On SmartRecruiters and Workday it costs one upstream request per job, at most 100 per call. - limitintegerdefault
100min 1, max 1000Most jobs to return (1-1000). The ATS is paged internally up to a bounded number of requests;
truncatedsays when more matched.
Example request
curl -X POST "https://api.scrapercompany.com/v1/careers/jobs" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.figma.com/careers/"
}'Response
200 — A company's open jobs, read from its applicant-tracking system. Metered responses carry x-credits-charged and x-credits-remaining headers (see credit headers).
{
"search_parameters": {
"engine": "careers_jobs",
"url": "https://www.figma.com/careers/",
"q": "engineer",
"remote_only": false,
"include_description": false,
"limit": 2
},
"company": {
"name": "Figma",
"ats": "greenhouse",
"board": "figma",
"board_url": "https://boards.greenhouse.io/figma"
},
"jobs": [
{
"job_id": "6201407004",
"title": "Data Platform Engineer",
"department": "Engineering",
"locations": [
"San Francisco, CA • New York, NY • United States"
],
"posted_at": "2026-09-21T12:13:46-04:00",
"updated_at": "2026-09-21T16:21:17-04:00",
"url": "https://boards.greenhouse.io/figma/jobs/6201407004?gh_jid=6201407004",
"compensation": {
"min": 153000,
"max": 376000,
"currency": "USD",
"text": "Annual Base Salary Range:"
},
"ats": "greenhouse"
},
{
"job_id": "6158162004",
"title": "Forward Deployed Engineer",
"department": "Engineering",
"locations": [
"San Francisco, CA • New York, NY • United States"
],
"posted_at": "2026-08-25T17:42:20-04:00",
"updated_at": "2026-08-27T13:21:25-04:00",
"url": "https://boards.greenhouse.io/figma/jobs/6158162004?gh_jid=6158162004",
"compensation": {
"min": 153000,
"max": 376000,
"currency": "USD",
"text": "Annual Base Salary Range:"
},
"ats": "greenhouse"
}
],
"total": 155,
"returned": 2,
"truncated": true,
"meta": {
"source": "greenhouse",
"upstream_requests": 1,
"wire_bytes": 1909764,
"elapsed_s": 0.512,
"scanned": 155,
"matched": 31,
"detected_by": "page",
"pages_fetched": 1
}
}Errors
Errors return a JSON body with a detail field. Failed requests are not charged. See Errors for the full list and retry advice.
| Status | Meaning | Retry? |
|---|---|---|
401Unauthorized | Missing or invalid API key. {"detail":"missing or invalid API key"} | No, fix the request |
402Payment Required | Not enough credits for this request. Only returned once credit enforcement is switched on; during the beta metering runs in shadow mode and never blocks. {"detail":"insufficient credits: this request costs 5, 0 available. Credits renew 2026-11-01."} | No, fix the request |
404Not Found | The property, stay, job or record was not found. {"detail":"job not found"} | No, fix the request |
422Unprocessable Content | Request validation failed. {"detail":[{"loc":["body","name"],"msg":"Field required","type":"missing"}]} | No, fix the request |
429Too Many Requests | Too many requests: the key's requests-per-minute limit was exceeded, or (once credit enforcement is on) the plan's concurrent-request limit. No rate-limit or Retry-After headers are sent; back off and retry. {"detail":"rate limit 60/min exceeded"} | Yes, with backoff |
502Bad Gateway | The upstream source failed, blocked the request or returned an unusable answer. Safe to retry later; failed requests are not charged. {"detail":"RuntimeError"} | Yes, with backoff |
503Service Unavailable | Temporarily unavailable: a dependency of this endpoint is down, or the upstream source changed its contract. Retry later. {"detail":"database unavailable: OperationalError"} | Yes, with backoff |
Try it
The quickest way: open this endpoint in Try it. It runs on your account with the example request filled in, shows the cost before you run, and shows the answer as a readable table next to the JSON and the code. Signed out? You sign in first and come straight back.
- Export your key:
export SCRAPERCOMPANY_API_KEY=sk_...(no key yet? request access). - Copy the cURL example above and run it in a terminal.
- Or open the interactive playground on api.scrapercompany.com, paste your key and pick this endpoint.
Questions about this page?
Send the page link and your question, and the team will answer.