Job data guides · Updated 2026-10-04
Lever postings API: get all jobs from a Lever job board
Lever publishes every company's open jobs through a public Postings API. You can read it as JSON without logging in and without an API key.
GET https://api.lever.co/v0/postings/{company}?mode=json. {company} is the part after jobs.lever.co/ in the company's job links. For Spotify, https://api.lever.co/v0/postings/spotify?mode=json returned 82 open jobs when we checked on 2026-10-04.Step by step
- Find the slug. Click any job on the company's careers page. If the link looks like
jobs.lever.co/spotify/..., the slug isspotify. Companies on Lever's EU instance usejobs.eu.lever.co/{company}; callapi.eu.lever.cofor those. - Call
https://api.lever.co/v0/postings/{company}?mode=json. Withoutmode=json(or anAccept: application/jsonheader) you get HTML. - Read the array. Each posting has
id,text(the title),categories(location,commitment,team,department,allLocations),workplaceType,createdAt,hostedUrl,applyUrland the description indescriptionPlainandlists. salaryRange(min,max,currency,interval) appears only when the company publishes pay on the posting. Many do not.
Filters and paging
| Need | Parameter |
|---|---|
| Page through results | skip=0&limit=50 |
| One or more locations | location=London&location=Stockholm |
| Team or department | team=Engineering, department=Product |
| Full time, intern and so on | commitment=Permanent (the exact words come from the company) |
| Grouped output | group=team (or location, commitment) |
Filter values are case sensitive when you pass several of them, and they must match the company's own labels. Download once without filters to see the labels.
Common problems
- 404 "Document not found": the slug is wrong, the company moved to another ATS, or it is on the EU instance.
- Empty array: the board exists but has no published jobs right now, or your filter value does not match a label exactly.
- Remote jobs:
workplaceTypecannot be used as a URL filter. Lever's docs liston-site, but the API returnedonsitein our test, so match both. - Dates:
createdAtis a Unix time in milliseconds, not an ISO string. - Many companies: you need a loop, error handling, a list of slugs and a way to keep only new jobs.
Free script for Lever, Greenhouse and Ashby
We made ats-jobs, an MIT-licensed Node.js 18+ script with no dependencies. It reads many boards at once and maps Lever, Greenhouse and Ashby to the same fields: node cli.mjs jobs.lever.co/spotify greenhouse:stripe --keyword engineer --csv > jobs.csv. Use lever:eu:{company} or a jobs.eu.lever.co link for EU boards.
Lever plus 12 other ATS in one dataset
We also run the ATS Jobs Scraper on Apify, a paid hosted version of the same idea. It takes Lever slugs, career page URLs or company names and returns the same fields for Lever, Greenhouse, Ashby, Workday and 9 more ATS, with keyword, location and date filters and a new-jobs-only mode for daily alerts. It costs $1.50 per 1,000 jobs.
Open ATS Jobs Scraper Endpoints for all 13 ATS
FAQ
Does the Lever postings API need an API key?
No. Reading published postings with GET is public. Only the POST endpoint that submits applications needs a key from the company.
Why does the Lever API return 404 Document not found?
The company slug is wrong, the company left Lever, or it uses Lever's EU instance. Try api.eu.lever.co with the same slug.
How do I get only remote Lever jobs?
Filter on the workplaceType field after you download the list. It cannot be used as a URL filter.
Sources: Lever Postings API documentation; our own requests on 2026-10-04.