Skip to the content.

Job Board APIs: get jobs from Greenhouse, Lever, Ashby, Workday & more (free, no API key)

Most companies host their careers page on an applicant tracking system (ATS). Seven of the most common ones expose public, keyless JSON endpoints that power those careers pages, so you can pull every open job straight from the employer, live, without scraping HTML.

This guide documents each endpoint with copy-paste examples, pagination rules, and the gotchas we hit while running them against thousands of real companies.

ATS Find the slug in Endpoint Pagination Salary
Greenhouse boards.greenhouse.io/{slug} GET boards-api.greenhouse.io/v1/boards/{slug}/jobs none (all jobs) rarely
Lever jobs.lever.co/{slug} GET api.lever.co/v0/postings/{slug}?mode=json none sometimes
Ashby jobs.ashbyhq.com/{slug} GET api.ashbyhq.com/posting-api/job-board/{slug} none often
Workday {tenant}.wd{N}.myworkdayjobs.com/{site} POST …/wday/cxs/{tenant}/{site}/jobs 20/page, max 2,000 no
SmartRecruiters jobs.smartrecruiters.com/{slug} GET api.smartrecruiters.com/v1/companies/{slug}/postings 100/page no
Recruitee {slug}.recruitee.com GET {slug}.recruitee.com/api/offers/ none sometimes
Workable apply.workable.com/{slug} POST apply.workable.com/api/v3/accounts/{slug}/jobs token no

Be a good citizen: these endpoints exist so careers pages and job boards can display postings. Cache results, keep request rates modest, link back to the original posting, and don’t collect personal data.


Greenhouse

curl "https://boards-api.greenhouse.io/v1/boards/airbnb/jobs?content=true"
import html, httpx
jobs = httpx.get("https://boards-api.greenhouse.io/v1/boards/airbnb/jobs", params={"content": "true"}).json()["jobs"]
for j in jobs:
    print(j["title"], "|", j["location"]["name"], "|", j["absolute_url"])
    description_html = html.unescape(j["content"])  # content is entity-escaped HTML

Gotchas

Lever

curl "https://api.lever.co/v0/postings/palantir?mode=json"

Gotchas

Ashby

curl "https://api.ashbyhq.com/posting-api/job-board/ramp?includeCompensation=true"

Gotchas

Workday

curl -X POST "https://nvidia.wd5.myworkdayjobs.com/wday/cxs/nvidia/NVIDIAExternalCareerSite/jobs" \
  -H "content-type: application/json" \
  -d '{"appliedFacets":{},"limit":20,"offset":0,"searchText":""}'

Gotchas

SmartRecruiters

curl "https://api.smartrecruiters.com/v1/companies/BoschGroup/postings?limit=100&offset=0"

Gotchas

Recruitee

curl "https://bunq.recruitee.com/api/offers/"

Gotcha: dates look like 2026-10-27 12:11:34 UTC, which isn’t ISO 8601. Most date parsers reject them unless you normalize first.

Workable

curl -X POST "https://apply.workable.com/api/v3/accounts/huggingface/jobs" \
  -H "content-type: application/json" -d '{"query":"","location":[],"department":[],"worktype":[],"remote":[]}'

Gotchas


Finding which ATS a company uses

Open the company’s careers page and click a job. The URL usually reveals the ATS and slug (job-boards.greenhouse.io/stripe/…, jobs.lever.co/palantir/…). With only a name, try the slug against each endpoint above and keep the board with the most open jobs: the same slug can exist on several platforms as a stale or test board.

Don’t want to build and maintain this?

Every gotcha above is handled in ready-made tools (disclosure: built by the author of this guide):

Apify has a free plan with monthly credit. (Some links may be affiliate links; using them supports this guide at no cost to you.)

License

Text: CC BY 4.0. Code snippets: MIT. Corrections welcome via pull request.