Adderley Data Apify Store

Adderley Data / Guides

Lever job board API: the Postings API on its two hosts, measured

Lever's public job board API is the Postings API. A company's board is GET https://api.lever.co/v0/postings/{site}, or the same path on api.eu.lever.co for a company on Lever's EU instance. Reading needs no key, and one request returns every published posting with its full text. This page covers the request, the parameters and fields Lever documents, what we measured against the live API, and what is left to build once you watch boards over time.

The request

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

employ is the board of Employ, the company Lever is part of. Lever documents the API in its postings-api README on GitHub, which gives a base URL for each instance, global and EU. The mode parameter chooses JSON, HTML or an iframe, so ask for mode=json. The README asks for a key only to submit applications; our reads carry none.

The site name is the first part of the path in every link Lever serves for a company: jobs.lever.co/{site} and jobs.lever.co/{site}/{posting id}, or jobs.eu.lever.co/{site} for an EU board. Checked against the live API on 23 September 2026:

  • Case counts. employ answers; Employ answers HTTP 404, on the API and on the job site alike.
  • An unknown site answers HTTP 404 with {"ok":false,"error":"Document not found"}, never an empty list.
  • The two hosts are separate. One site name can be two different boards, and a site that exists only on the global host answers 404 on the EU host. Read the host the company's own links use.
  • No paging needed. Without skip and limit, the largest board we tried returned all 922 postings in one response (13 MB, 3 seconds), the same set in the same order as paging through it.

Parameters and endpoints

As the README documents them (read 6 October 2026):

  • skip and limit: paging. The README states no default and no maximum.
  • location, commitment and team: filters, and several values of one filter are OR'ed together. department (where a company uses departments) and level filter too.
  • group: location, commitment or team, to return the postings grouped by that category.
  • GET /v0/postings/{site}/{posting id}: one posting, with the same fields as the list.
  • POST /v0/postings/{site}/{posting id}?key=…: an application. This is the one call that needs a key, generated by a Super Admin of the company's Lever account, and Lever answers 429 above two application posts a second.

What a posting holds

The README's fields: id; text, the title; categories, holding location, commitment, team, department and allLocations; country, an ISO 3166-1 alpha-2 code or null; workplaceType; opening, description and descriptionBody as HTML, each with a plain-text twin ending in Plain; lists; additional; salaryRange, with currency, interval, min and max; salaryDescription; hostedUrl and applyUrl.

What the README leaves out, from 2,376 postings on eight boards read on 23 September 2026:

  • The date. Every posting carries createdAt in epoch milliseconds, and it is the only date there is. Nothing records when a posting was last edited.
  • The spelling. The README lists workplaceType as unspecified, on-site, remote or hybrid. The postings we read said remote, hybrid and onsite, without the hyphen.
  • Pay. salaryRange was set on 26% of postings, with intervals per-year-salary, per-hour-wage and per-month-salary. salaryDescription is the company's own note on pay: some notes restate the range and some do not.
  • The plain text can lag. Between two reads of one board 25 minutes apart, a posting's descriptionPlain went from empty to its text while its description HTML stayed the same. Read the HTML.
  • No company name. No field names the company. A board is known only by its site name.

Measured on Employ's boards

On Tuesday 6 October 2026 Employ had a board on each host: 4 postings on api.lever.co and 2 different ones on api.eu.lever.co, both read in two requests in 3 seconds (run NJ2NQL1Zf5fSWfZwC). How often each fact was there:

Employ's two Lever boards, 6 postings, 6 October 2026
FactPostings with itNotes
Country6 of 6Lever's own code: the United States 3, India 2, Canada 1
Work arrangement6 of 6Remote 4, hybrid 2
Pay range3 of 6All three from salaryRange, yearly: two in US dollars, one in Canadian dollars. Neither EU posting had one
City1 of 6The four remote postings' labels name a country only, such as "Remote, USA"
Created date6 of 6From createdAt. Both EU postings were created in late August 2025

Six postings show the shape, not the spread. The 23 September figures above are the wider sample.

Where the API stops

For one board read once, call the API directly: it is one request. Watching boards is where the work starts:

  • Change detection. With no edit time, the only way to see that a posting changed is to keep it and compare it on the next read, field by field and word by word.
  • Two hosts. A list of companies has to record which host each board is on, because the same name can be a different board on the other one.
  • Many boards. Each company is its own site name and its own request, and a company that moves to another applicant tracking system changes shape completely.

Lever Jobs Scraper does those three things on top of this API: any number of site names or Lever links, global or EU, one row per posting in a fixed schema, and in incremental mode it returns, and charges for, only postings that are new, changed, back or gone. Because Lever publishes no edit time, it compares each posting's title, locations, team, employment type, workplace type, pay and full text with the last run. Its page has the price and every field. For Lever beside Greenhouse, Ashby, Workday and eleven more systems in one table, use the Career Site Jobs Scraper.

The same reference for other systems

Published 2026-10-06.