Lever Jobs API: Postings from Any Lever Board (Global + EU) avatar

Lever Jobs API: Postings from Any Lever Board (Global + EU)

Pricing

from $1.50 / 1,000 job postings

Go to Apify Store
Lever Jobs API: Postings from Any Lever Board (Global + EU)

Lever Jobs API: Postings from Any Lever Board (Global + EU)

Lever jobs API: every posting on any Lever board, global (jobs.lever.co) and EU (jobs.eu.lever.co), with full description and salary range when published. Bulk board URLs or slugs; keyword, location, team, commitment, remote and date filters.

Pricing

from $1.50 / 1,000 job postings

Rating

0.0

(0)

Developer

Ailu Studio

Ailu Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Lever Jobs API: every posting from any Lever job board, global (jobs.lever.co) and EU (jobs.eu.lever.co), with description and salary

Palantir, Spotify, OLX, Siteimprove and many other companies publish their openings on Lever at jobs.lever.co/<slug> or, for EU-hosted accounts, jobs.eu.lever.co/<slug>. This Actor reads Lever's public postings API on both instances and returns every open posting as a clean row: title, team, department, commitment, all locations, country, workplace type, creation date, the full description (plain text and HTML) and the salary when the company publishes it, either Lever's structured salary range or, as a fallback, a pay range written in the posting text (salarySource tells you which). A bare slug is tried on the global instance first and then on the EU instance, so EU boards that look "dead" on api.lever.co are found automatically. No API key, bulk board input, and $1.50 per 1,000 postings versus $2.00–$3.00 for the most-used Lever Actors in the Store.

Use cases

  • Job aggregation: pull postings from many Lever boards (US and EU) into one job board or newsletter.
  • Salary research: published ranges by team, commitment and country.
  • Hiring signals: watch which teams and countries a target company is expanding.
  • Candidate alerts: daily run with postedWithinDays: 1, team and remoteOnly.
  • AI matching: plain-text descriptions ready for embeddings.

Input

FieldDefaultMeaning
boards["palantir", "spotify"]Lever board URLs (jobs.lever.co/<slug>, jobs.eu.lever.co/<slug>, posting URLs), lever-eu:<slug>, or bare slugs.
keywords–Keep postings whose title or description contains any of these words.
locations–Keep postings whose location or country code contains any of these strings.
team–Keep postings whose team or department contains any of these strings.
commitment–Keep postings whose commitment contains any of these strings (e.g. Full-time, Intern).
remoteOnlyfalseOnly remote postings.
postedWithinDays0Only postings created in the last N days (0 = off).
maxItems200Cap on returned postings for the whole run.
{ "boards": ["https://jobs.lever.co/spotify", "https://jobs.eu.lever.co/siteimprove", "olx"], "team": ["Engineering"], "commitment": ["Full-time", "Permanent"], "postedWithinDays": 30, "maxItems": 500 }

Output

FieldTypeMeaning
id, sourceId, sourcestringlever:<slug>:<postingId>, the posting UUID, lever or lever-eu.
company, companySlugstringCompany name from the board page and the board slug.
title, team, department, commitment, levelstringPosting title and Lever categories.
locations, countrystring[], stringAll locations and ISO country code.
isRemote, workplaceType, employmentTypeboolean, string, stringremote/hybrid/onsite; employmentType mirrors commitment.
salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryRawnumber, number, string, string, stringPublished salary; null when none.
salarySource, salaryDescriptionstringsalaryRange or description; Lever's salary note.
postedAtISO 8601Posting creation time (UTC).
url, applyUrlstringPosting and application page. The Actor never applies.
descriptionText, descriptionHtmlstringFull description: intro, requirement lists and closing text.
fetchedAtISO 8601Run time.
{
"id": "lever:siteimprove:0e1585af-dc06-4cc7-93a9-cae389ace737", "sourceId": "0e1585af-dc06-4cc7-93a9-cae389ace737", "source": "lever-eu",
"companySlug": "siteimprove", "company": "Siteimprove", "title": "Account Executive (DACH) - German Speaking",
"department": "GTM", "team": "Enterprise Sales", "commitment": "Full-Time", "level": null, "locations": ["Germany"], "country": "DE",
"isRemote": true, "workplaceType": "remote", "employmentType": "Full-Time", "postedAt": "2026-05-20T15:22:03.742Z", "updatedAt": null,
"url": "https://jobs.eu.lever.co/siteimprove/0e1585af-dc06-4cc7-93a9-cae389ace737", "applyUrl": "https://jobs.eu.lever.co/siteimprove/0e1585af-dc06-4cc7-93a9-cae389ace737/apply",
"salaryMin": 76200, "salaryMax": 95250, "salaryCurrency": "EUR", "salaryInterval": "year", "salaryRaw": "EUR 76,200–95,250 per year", "salarySource": "salaryRange",
"salaryDescription": "The base salary for this role will fall within the posted range …",
"descriptionText": "Siteimprove is a global leader in digital accessibility, content optimization, …", "descriptionHtml": "<div>\n<p>Siteimprove is a global leader …", "fetchedAt": "2026-11-04T11:40:04.984Z"
}

How it works and limits

  • Per board: GET api.lever.co/v0/postings/<slug>?mode=json (or api.eu.lever.co for EU accounts) returns all postings with descriptions in one response, plus one request to the public board page for the company display name. Requests are spaced 300 ms per host and retried on 429/5xx. Large boards answer slowly (Palantir, 300+ postings and about 6 MB, takes roughly 5 seconds).
  • Salary: Lever's structured salaryRange is used when present (Siteimprove: 11 of 12 postings on 2026-11-04). Otherwise the Actor looks for a currency range next to words such as "salary", "base" or "pay" in the posting text (Palantir: 203 of 307, Spotify: 21 of 84). A bare $ is read as USD only for US postings. Postings without either stay null.
  • Lever's public API has no "updated" timestamp; postedAt is the posting creation time.
  • Boards are read in the order given; once maxItems is reached the remaining boards are skipped and listed in the run summary (OUTPUT record).
  • Not covered: internal/confidential postings, application forms, candidate data.

Pricing

Pay per result: $1.50 per 1,000 rows (job event). Platform usage is billed separately by Apify. Removed/free rows are not charged.

Not affiliated with Lever (Employ Inc.) or the employers. Uses the public Lever Postings API only. Data licence/terms: https://github.com/lever/postings-api. Job content belongs to the employers who published it.

FAQ

How do I know if a board is on the EU instance? You do not need to: pass the slug and the Actor tries both. URLs starting with jobs.eu.lever.co go straight to the EU API.

Why is salary sometimes taken from the description? Many companies (for example Palantir and Spotify) write the pay range in the posting text instead of Lever's salary field. salarySource: "description" marks those rows and salaryRaw shows the sentence it came from.

Can I get only new postings? Use postedWithinDays: 1 on a daily schedule, or the Job Change Tracker Actor for new/updated/removed detection.

Does it include closed postings? No. Lever's public API only lists currently open postings.