Lever Jobs Scraper: Lever Job Board API avatar

Lever Jobs Scraper: Lever Job Board API

Pricing

$2.00 / 1,000 job scrapeds

Go to Apify Store
Lever Jobs Scraper: Lever Job Board API

Lever Jobs Scraper: Lever Job Board API

Lever jobs scraper for any Lever job board (jobs.lever.co). Exports all open Lever jobs: title, location, workplace type, team, department, commitment, posting date, published salary range, description and apply URL. No API key. $2.00 per 1,000 jobs.

Pricing

$2.00 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

PulseData

PulseData

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Features

Limited permissions

Share

Lever Jobs Scraper: Export Any Lever Job Board

Lever Jobs Scraper exports every open posting from one or more Lever job boards (jobs.lever.co) as JSON, CSV or Excel. You give it board URLs or just company names such as spotify, and it returns one record per job with title, all locations, country, workplace type, team, department, commitment, the published salary range, the full description and separate job and apply URLs. It costs $2.00 per 1,000 jobs, so a 500-job board costs about $1.00.

Features

  • Scrape Lever job boards by URL or by company name. A bare name like palantir is expanded to https://jobs.lever.co/palantir.
  • Export jobs.lever.co postings to CSV, JSON or Excel, including the description and every list section (responsibilities, requirements and so on).
  • Get Lever salary ranges. Lever's postings API carries a structured salary range, which many US boards fill in because of pay transparency laws.
  • Scrape EU Lever boards on jobs.eu.lever.co, read from Lever's EU API.
  • Filter Lever jobs by keyword, location, country, remote and posting date.
  • Monitor new Lever job postings of a company: with onlyNewJobs a scheduled run returns and charges only jobs it has not delivered before.
  • Find remote jobs on Lever using Lever's own workplace type (remote, hybrid, on-site).
  • No API key and no login. Lever publishes every board through its public postings API.

Use cases

  • Job board aggregation: refresh openings from a list of Lever companies every morning.
  • Salary benchmarking: collect published ranges for one job family (for example "Data Scientist") across dozens of Lever employers.
  • Recruiting and sourcing: watch which Lever teams a competitor is growing and whether roles are remote, hybrid or on-site.
  • Lead generation: companies opening sales or security roles often buy tooling for those teams; filter by keywords and run weekly.

Input

{
"startUrls": [
"https://jobs.lever.co/spotify",
"palantir",
"https://jobs.eu.lever.co/examplecompany"
],
"keywords": ["data", "machine learning"],
"locations": ["New York", "London", "US"],
"remoteOnly": true,
"postedWithinDays": 30,
"includeDescription": true,
"maxJobsPerCompany": 100
}
FieldTypeDefaultWhat it does
startUrlsarray of strings(required)Lever board URLs or bare company names, one per line.
keywordsarray[]Keep only jobs whose title contains one of these words (case-insensitive).
locationsarray[]Keep only jobs whose location, any of its other locations, or its country code contains one of these strings.
remoteOnlybooleanfalseKeep only jobs Lever marks as remote, or whose location mentions remote.
postedWithinDaysinteger0Keep only jobs created in the last N days. 0 means no limit.
includeDescriptionbooleantrueInclude descriptionHtml and descriptionText. Lever returns them in the same request, so this adds no extra requests.
maxJobsPerCompanyinteger0Cap per board, applied after the filters. 0 means no limit.
onlyNewJobsbooleanfalseMonitor mode: output and charge only jobs not delivered on an earlier run.
monitorStoreNamestringemptyKey-value store that remembers delivered jobs. Empty means a name derived from the board URLs and filters.
proxyConfigurationobject{ "useApifyProxy": false }Optional Apify Proxy.

Accepted Lever URL formats:

  • https://jobs.lever.co/spotify
  • https://jobs.lever.co/spotify/<posting-id> (a single posting URL; the actor still reads the whole board)
  • https://jobs.eu.lever.co/company (EU-hosted boards)
  • spotify (bare company name, always expanded to the US host, so use the full URL for EU boards)
  • https://company.com/careers (a page that links to a Lever board)

Get new jobs from a Lever board every day (monitor mode)

Turn on onlyNewJobs to get only the jobs a company posted since your last run:

{
"startUrls": ["https://jobs.lever.co/spotify"],
"maxJobsPerCompany": 0,
"onlyNewJobs": true
}

The IDs of delivered jobs are kept in a named key-value store in your Apify account, and later runs skip them. For alerts:

  1. Save the input as an Apify task.
  2. Add an Apify schedule, daily or weekly.
  3. Add an integration on the task (email, Slack, Google Sheets, Make, Zapier or a webhook) that fires on a succeeded run. Each run's dataset holds only the new jobs.

Details:

  • maxJobsPerCompany counts new jobs only. Leave it at 0 on the first run so that run remembers every open job.
  • Jobs seen before are neither output nor charged.
  • Without monitorStoreName the store name is derived from the board URLs and filters, so each input keeps its own history. Set a name to share history between inputs, or a new one to start over.
  • A job cut off by maxJobsPerCompany, the run timeout or the run's maximum cost is not remembered and comes on the next run. Schedule one run per store, since two parallel runs can deliver the same new job.

Output

One item per job:

{
"title": "Data Scientist - Music Mission",
"company": "spotify",
"location": "New York",
"locations": ["New York", "Boston"],
"country": "US",
"remote": true,
"workplaceType": "remote",
"department": "Data",
"team": "Music Mission",
"employmentType": "Permanent",
"seniority": null,
"salary": "116994-167135 USD per-year-salary",
"postedAt": "2026-06-23T11:29:45.805Z",
"updatedAt": null,
"url": "https://jobs.lever.co/spotify/2193db3f-77c5-43b8-b030-8f92c9882bf1",
"applyUrl": "https://jobs.lever.co/spotify/2193db3f-77c5-43b8-b030-8f92c9882bf1/apply",
"descriptionHtml": "<div>The Music Mission team…</div>\n<h3>What you'll do</h3><ul><li>…</li></ul>",
"descriptionText": "The Music Mission team…\n\nWhat you'll do\n…",
"ats": "lever",
"atsJobId": "2193db3f-77c5-43b8-b030-8f92c9882bf1",
"sourceUrl": "https://jobs.lever.co/spotify",
"scrapedAt": "2026-09-25T08:20:44.000Z"
}

What Lever exposes, and how it maps:

  • company is the Lever company name from the URL (for example spotify).
  • location is the primary location; locations is Lever's full list of locations for the posting.
  • country is the ISO country code Lever stores on the posting.
  • workplaceType is Lever's value as published (remote, hybrid, on-site or unspecified). remote is true when it is remote or the location text says remote.
  • department and team are Lever's two category levels; employmentType is Lever's "commitment" (for example Full-time, Permanent, Intern).
  • salary is built from Lever's salary range as min-max currency interval. When a board does not publish a range, the actor looks for one near the start of the description.
  • descriptionHtml joins the opening text, each list section (with its heading) and the closing text.
  • postedAt is the posting's creation date in Lever. Lever has no separate update date, so updatedAt is null; seniority is also not published.

If a company name does not exist on Lever, the dataset gets one row with sourceUrl, ats, slug and an error message. Error rows are not charged.

Pricing

Pay per event: $0.002 per job saved to the dataset ($2.00 per 1,000 jobs). There is no start fee.

Worked example: a salary study across 60 Lever companies with around 80 postings each is 4,800 jobs, or $9.60 for a full export. If you only need engineering roles and set keywords: ["engineer", "developer"], you might keep 1,500 jobs and pay $3.00. Jobs removed by filters and error rows are not charged.

In monitor mode only new jobs are charged: a daily run over the same 60 companies that finds 30 new jobs costs 30 x $0.002 = $0.06, and a run with nothing new costs nothing in result events.

Example pages

Each of these opens a ready-made run with a real input:

FAQ

Does every job include a salary? No. The range is filled only when the company publishes one in Lever, or when a range appears near the start of the description. US boards publish it more often than European ones.

How many jobs can it get from one board? The whole board. Lever returns all published postings in one response; maxJobsPerCompany limits the output if you want less.

What can it not do? It only sees postings the company lists publicly. Unlisted or internal postings, application forms and candidate data are out of reach. It does not render JavaScript, so if your careers page loads Lever through a script, paste the jobs.lever.co URL instead.

Do I need proxies? Normally no. The actor backs off and retries on rate limits and server errors. Enable proxyConfiguration only if a very large list starts returning HTTP 429.

Can I mix Lever with other ATS in one run? Use the Career Page Jobs Scraper for that. It auto-detects Lever, Greenhouse, Ashby, Workday and eight other systems.

Use it from Claude, ChatGPT or Cursor (Apify MCP server)

Add the Apify MCP server to Claude, ChatGPT, Cursor or any other MCP client with this URL, which loads only this actor as a tool:

https://mcp.apify.com?tools=pulsedata/lever-jobs-scraper

Then ask, for example, "list the Spotify jobs on Lever that are open in Stockholm", and the assistant fills the input, runs the actor and reads the jobs back as JSON. Billing is the same as a normal run.

Paying from an AI agent without an Apify account (x402 and Skyfire)

An agent can buy a prepaid, spend-capped Apify token at Apify AGI, paid in USDC through x402 or from a Skyfire wallet, and use it for both the API and the MCP server. This actor runs with limited permissions, so it works with these tokens. The smallest token is $1, tokens expire 14 days after purchase, and Apify marks agentic payments as experimental.