Lever Jobs Scraper: Global and EU Boards, with Salary
Pricing
from $1.20 / 1,000 jobs
Lever Jobs Scraper: Global and EU Boards, with Salary
Scrape open jobs from any company's Lever job board, on jobs.lever.co and the EU host jobs.eu.lever.co: title, team, department, commitment, remote, hybrid or onsite, every location, country, created date, salary range, apply link and description. Many companies per run. No login.
Pricing
from $1.20 / 1,000 jobs
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
15 days ago
Last modified
Categories
Share
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.
Why choose this actor?
- EU boards included, found on their own. Lever runs two separate hosts,
jobs.lever.coandjobs.eu.lever.co, and a board lives on only one of them. Give a plain slug and the actor tries the global host, then the EU host. Our proof run read 5 boards and returned 651 jobs in 45 seconds, 170 of them from EU boards (OLX given as justolx, and Quantinuum). Asking only the global host gets "not found" for them: OLX answers 404 there. - Salary as numbers on 69% of jobs. Lever lets employers attach a salary range to a posting, and the actor returns it as minimum, maximum, currency and period. Where the range is only written in the description, the actor reads it from there: 452 of 651 jobs (69%) in our proof run, 291 from Lever's own salary field and 161 from descriptions. No extra request, no add-on.
- The real company name, and the whole description. Lever's API carries no company name, so the actor reads it, with the company website, from the board's own page ("Palantir Technologies", not "palantir"). With full descriptions on, every titled section (requirements, responsibilities) is included, not only the opening. Companies that are not found are reported and never charged.
Part of The Mine Works Jobs and hiring family: Foundit Monster India Jobs, Hirist Jobs Scraper, India Jobs MCP, Naukri Jobs Scraper, Shine.com Jobs Scraper, Internshala Scraper.
Try it in one minute
Paste this input and press Start. It returns the 20 newest open jobs at Spotify in a few seconds:
{"companies": ["spotify"],"maxJobsPerCompany": 20}
You can name a company in five ways, and mix them in one list:
- Board link:
https://jobs.lever.co/palantir, or an EU board such ashttps://jobs.eu.lever.co/olx. A single job or apply link such ashttps://jobs.lever.co/zoox/c2256725-2c81-4039-b6dd-03a0d7d7e95f/applyreads that company's whole board. - API link:
https://api.lever.co/v0/postings/zooxorhttps://api.eu.lever.co/v0/postings/olx. - Board slug:
palantir,zoox,spotify,olx. It is the word after the domain in the board link; a slug is tried on the global host, then on the EU host. - Company name: a name with spaces is tried as one word and then with hyphens, on both hosts. Use a link when the slug is something else.
- Your company's careers page:
https://www.palantir.com/careers/. The page is read once and searched for its Lever board link; in our test it led to Palantir's board. A page that loads its jobs later with JavaScript is reported as "no board on page" and never charged.
On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result: https://apify.com/pricing?fpr=ymnoit
Copy to your AI assistant
themineworks/lever-jobs-scraper on Apify. Returns open jobs from companies' Lever job boards on jobs.lever.co and jobs.eu.lever.co, one row per job with company name and website, title, team, department, commitment, workplace type (remote, hybrid or onsite), every location, country code, created date, salary range (min, max, currency, period), job and apply links, and a 500 character description (full text with every section on request). Call ApifyClient("TOKEN").actor("themineworks/lever-jobs-scraper").call(run_input={"companies": ["palantir", "https://jobs.eu.lever.co/olx"], "keywords": ["engineer"], "maxJobsPerCompany": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: companies (Lever board links, slugs, company names or careers page links). Optional: keywords (title words), excludeKeywords, locations, departments, remoteOnly (default false), postedWithinDays, maxJobsPerCompany (default 500, 20 to 5,000), includeDescription (default false), onlyNewJobs (default false). Skip rows that have "_type": "info". Full spec: GET https://api.apify.com/v2/acts/themineworks~lever-jobs-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- 29 fields per job: company name and website, board slug and host (global or EU), job id, title, department, team, commitment as published and as a normalised employment type, workplace type, remote flag, primary and every location, country code, created date, salary range with its source, job and apply links, a short description and, on request, the whole description as plain text.
- Both Lever hosts. EU boards are read from Lever's EU host, found automatically for plain slugs and names.
- Whole boards, newest first. Lever's API lists postings by team, not by date, so the actor reads the whole board (100 postings a request, up to 5,000) and then delivers the newest matching jobs first, up to your cap per company (20 to 5,000).
- Filters that run before you pay: title keywords and exclusions, locations (every location of a job is checked, and United States matches "Palo Alto, CA" and country code US), departments and teams, remote only, and posted within N days. Filtered jobs are never charged.
- Only new jobs on repeat runs, kept in a named key value store in your account, so a daily schedule returns only what was posted since.
- Plain HTTP, no browser, no login. 512 MB of memory, four boards at a time. A run report (status per company, host, pages read, matches, filtered counts, requests, charges) is saved as the
OUTPUTrecord.
How to use it
Basic: every open job at one company
{"companies": ["https://jobs.lever.co/zoox"],"maxJobsPerCompany": 500}
Zoox had 231 open jobs on 5 Oct 2026, so this returns all of them, newest first, most with a salary range. Raise maxJobsPerCompany (up to 5,000) for very large boards.
Several companies at once, on both hosts
{"companies": ["https://jobs.lever.co/palantir","zoox","spotify","olx","https://jobs.eu.lever.co/quantinuum"],"maxJobsPerCompany": 200,"includeDescription": true}
This is the input of our proof run: 651 jobs in 45 seconds, with the whole description of every job. olx was found on the EU host by itself. Up to 1,000 companies per run; a board given twice (for example as zoox and as its link) is read once.
Job: daily alert on new jobs at a watchlist of companies
{"companies": ["palantir", "zoox", "spotify"],"keywords": ["engineer", "scientist"],"onlyNewJobs": true,"maxJobsPerCompany": 500}
Schedule it daily (Console, Schedules, Add schedule). The first run delivers every matching open job; each later run delivers only jobs no earlier run delivered, so each run's dataset is the list of new postings. Send it to Slack or email with a webhook, Make or Zapier.
Job: European hiring map
{"companies": ["olx", "https://jobs.eu.lever.co/quantinuum", "spotify"],"locations": ["Germany", "Poland", "Spain", "London", "Stockholm"],"maxJobsPerCompany": 500}
Every location of a job is checked, not only the first: an OLX job based in Barcelona that also lists Warsaw matches Poland. country_code gives the primary country as a two letter code for grouping.
Job: salary benchmarking for one role
{"companies": ["zoox", "palantir", "spotify"],"keywords": ["software engineer", "machine learning"],"locations": ["United States"],"maxJobsPerCompany": 300}
Rows with pay carry salary_min, salary_max, salary_currency and salary_period (year or hour for most US roles). salary_source tells you whether the range came from Lever's salary field (posting) or was read from the description (description).
Job: internships and fixed term roles
{"companies": ["palantir", "zoox", "spotify", "olx"],"keywords": ["intern", "graduate", "new grad"],"postedWithinDays": 60}
commitment keeps the employer's own wording (Full-time, Internship, Fixed-Term, Permanent) and employment_type normalises it to full-time, part-time, contract, intern or temporary.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
companies | array of strings | ["https://jobs.lever.co/palantir", "zoox", "https://jobs.eu.lever.co/olx"] | Required. Lever board, job, apply or API links on either host, board slugs, company names, or careers page links, one per line. Up to 1,000 per run; repeats are read once. |
keywords | array of strings | none | Keep jobs whose title has a word starting with one of these (engineer also matches Engineering Manager). Not case sensitive. |
excludeKeywords | array of strings | none | Drop jobs whose title has a word starting with one of these, for example senior, intern. |
locations | array of strings | none | Keep jobs with a location containing one of these, for example London, Poland, Remote. Every location of a job is checked, and the country code too. United States, USA and US match each other and US state codes; United Kingdom and UK match each other. |
departments | array of strings | none | Keep jobs whose team or department contains one of these, for example Engineering, Sales. |
remoteOnly | boolean | false | Keep only jobs that are remote or offer a remote location. |
postedWithinDays | integer | none | Keep only jobs created in the last N days, 1 to 365. |
maxJobsPerCompany | integer | 500 (the form starts at 20) | Most jobs delivered per company after the filters, newest first, 20 to 5,000. Also the most you pay for per company. |
includeDescription | boolean | false | Add the whole description as plain text in description: the opening, every titled list and the closing. Costs nothing extra: Lever sends it with the board. |
onlyNewJobs | boolean | false | Skip, and never charge, jobs an earlier run of this actor in your account already delivered. |
What data do you get?
One row per open job. A field with no value (for example no salary published) is left out of the row rather than filled with an empty value.
The company: company (read from the board's own page, such as "Palantir Technologies"; the slug in title case when the page cannot be read), company_website (the home page the board links to), company_slug (the board slug), board_region (global for jobs.lever.co, eu for jobs.eu.lever.co), platform (always lever).
The job: job_id (Lever's posting id, stable across runs), title, team, department (when the board uses departments), commitment (exactly as published), employment_type (full-time, part-time, contract, intern or temporary).
Where: location (primary location), locations (every location of the job), country_code (two letter code Lever publishes), workplace_type (remote, hybrid or onsite as Lever publishes it; remote when only the location says so), is_remote.
When: posted_at (when the posting was created, ISO 8601 UTC; Lever publishes no separate update date).
Pay: salary_min, salary_max, salary_currency, salary_period (year, month, week, day or hour), salary_text (one readable line, for example "USD 165,000 to 199,000 per year"), salary_source (posting for Lever's salary field, description when read from the description).
Links and text: job_url (the posting on Lever), apply_url (the application form), description_short (the start of the description, one line, at most 500 characters), description (the whole description as plain text with every section, only with includeDescription on).
How it was read: input (the company entry as you typed it), scraped_at.
At the end of a run with results, one extra row with "_type": "info" carries scheduling tips. It is never charged; filter it out with _type. A full run report (status per company, host, pages read, matches, filtered counts, requests, charges) is saved as the OUTPUT record of the run's key value store.
Stable fields for automations
These fields were present in every one of the 651 rows of our proof run:
| Field | Meaning |
|---|---|
company | Company name |
company_slug | Lever board slug |
board_region | global or eu |
platform | Always lever |
job_id | Lever posting id; use it to deduplicate |
title | Job title |
team | Team |
location | Primary location |
locations | Every location, as a list |
country_code | Two letter country code |
workplace_type | remote, hybrid or onsite |
is_remote | True when the job is remote or offers a remote location |
posted_at | Created, ISO 8601 UTC |
job_url | Link to the posting |
apply_url | Link to the application form |
These names will not change. New fields may be added, never renamed.
Output examples
A job with Lever's own salary field (Zoox):
{"company": "Zoox","company_website": "http://zoox.com","company_slug": "zoox","platform": "lever","board_region": "global","job_id": "c2256725-2c81-4039-b6dd-03a0d7d7e95f","title": "Senior Program Manager, People Experience","department": "People Experience","team": "PEx","location": "Foster City, CA","locations": ["Foster City, CA"],"country_code": "US","workplace_type": "hybrid","is_remote": false,"employment_type": "full-time","commitment": "Full-time","posted_at": "2026-10-01T19:39:53.311Z","salary_min": 165000,"salary_max": 199000,"salary_currency": "USD","salary_period": "year","salary_text": "USD 165,000 to 199,000 per year","salary_source": "posting","job_url": "https://jobs.lever.co/zoox/c2256725-2c81-4039-b6dd-03a0d7d7e95f","apply_url": "https://jobs.lever.co/zoox/c2256725-2c81-4039-b6dd-03a0d7d7e95f/apply","description_short": "Zoox is seeking an experienced Senior Program Manager to join our People Experience (PEx) team, serving as PEx PMO's strategic partner to our Talent…","input": "zoox","scraped_at": "2026-10-05T19:06:36.553Z"}
A board on the EU host, found from the plain slug olx, with four locations:
{"company": "OLX","company_website": "https://www.olxgroup.com/","company_slug": "olx","platform": "lever","board_region": "eu","job_id": "ed4b40ba-2457-4b1a-ba4c-500d299d3026","title": "Senior Group Brand & Media Director","department": "OLX Group","team": "Marketing","location": "Barcelona, Spain","locations": ["Barcelona, Spain", "Poznań, Poland", "Lisbon, Portugal", "Warsaw, Poland"],"country_code": "ES","workplace_type": "hybrid","is_remote": false,"posted_at": "2026-09-30T14:16:32.069Z","job_url": "https://jobs.eu.lever.co/olx/ed4b40ba-2457-4b1a-ba4c-500d299d3026","apply_url": "https://jobs.eu.lever.co/olx/ed4b40ba-2457-4b1a-ba4c-500d299d3026/apply","description_short": "About OLX OLX is a global leader in facilitating trade. It builds leading marketplace ecosystems enabled by tech, powered by trust, and loved by…","input": "olx"}
A salary read from the description (Palantir Technologies):
{"company": "Palantir Technologies","company_website": "https://www.palantir.com/","company_slug": "palantir","platform": "lever","board_region": "global","job_id": "2a41a2e2-55a4-4641-a3bf-101b7616dd63","title": "Contract Operations","team": "Legal","location": "Palo Alto, CA","country_code": "US","workplace_type": "hybrid","is_remote": false,"employment_type": "full-time","commitment": "Full-time","posted_at": "2026-09-25T15:29:37.738Z","salary_min": 75000,"salary_max": 112000,"salary_currency": "USD","salary_period": "year","salary_text": "USD 75,000 to 112,000 per year","salary_source": "description","job_url": "https://jobs.lever.co/palantir/2a41a2e2-55a4-4641-a3bf-101b7616dd63","input": "https://jobs.lever.co/palantir"}
Pricing
Pay per event: you pay for the job rows you receive, plus a flat $0.005 per run, whatever memory you choose.
| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
job-scraped | Once per job row saved to your dataset | $1.20 per 1,000 | $1.20 per 1,000 | $1.20 per 1,000 | $1.20 per 1,000 |
run-start | Once per run, when it starts | $0.005 | $0.005 | $0.005 | $0.005 |
Free plan runs return up to 10 results each; paid plans have no cap.
The price per single job is the price per 1,000 divided by 1,000. 200 jobs from one company are 200 events.
Never charged:
- companies that are not found on either host, careers pages with no board link, and boards with no open jobs;
- jobs removed by your filters (keywords, exclusions, locations, departments, remote only, posted within);
- jobs above your
maxJobsPerCompanycap, although the whole board is read to find the newest; - a job already delivered in the same run;
- with
onlyNewJobson, jobs an earlier run in your account already delivered; - the full description and the company name lookup (no extra charge);
- retries the actor makes on other IP addresses;
- the information row at the end of the run and the
OUTPUTrun report.
If you set a maximum charge for the run in Apify, the actor stops when it is reached and keeps everything delivered so far.
FAQ
What do I get on the free plan?
On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result with no cap, at the prices in the table above.
What exactly does this actor read?
Lever's public postings API on its global host (api.lever.co) and its EU host (api.eu.lever.co), the same data a company's Lever job board shows to any visitor: every open posting with its description sections, team, department, commitment, workplace type, locations, country and the salary range the employer chose to publish. The board's own page is read once for the company name and website. Everything is read live when you run it; there is no cached index in between.
Why does it matter that a board is on the EU host?
Companies that keep their data in Europe have their Lever board on jobs.eu.lever.co, and Lever's global API answers 404 for them. The actor tries the global host first and the EU host after a 404, so a plain slug works either way. board_region tells you which host a job came from. In our proof run 170 of 651 jobs came from EU boards.
How many jobs can I get?
Every open posting on a board, up to 5,000 per company per run (maxJobsPerCompany), and up to 1,000 companies per run. Palantir's board held 318 postings on 5 Oct 2026, read in four requests.
Where does the salary come from, and why do some jobs have none?
First from the salary range the employer attached to the Lever posting (salary_source: "posting"). When that is empty, the actor reads a range written in the description, and only when a currency, two amounts and a pay word such as salary, pay or compensation appear together (salary_source: "description"). Employers outside US pay transparency states often publish no pay; those rows simply have no salary fields. In our proof run 69% of jobs had one.
Why does a run read the whole board when I ask for 20 jobs?
Lever's API lists postings grouped by team, not by date. To give you the 20 newest, the actor has to see them all first. A page holds 100 postings, so most boards take one to four requests, and you are only charged for the jobs delivered.
How fresh is the data?
As fresh as the board: every run asks Lever at run time, so a job posted a minute ago is included and a job closed a minute ago is not. posted_at is when the posting was created; Lever publishes no separate update date.
How long does a run take?
Four boards at a time. Our five board proof run (651 jobs with full descriptions, 11 postings pages and 5 board pages) took 45 seconds. A slow proxy answer is dropped after 30 seconds and asked again on another IP, which can add half a minute now and then.
What if a company is not found?
The run goes on with the others. The company gets a status in the OUTPUT record (not_found, no_board_on_page or page_unreadable) with the reason, and nothing is charged for it. If no job at all is delivered, the info row in the dataset says why.
Do I need a Lever account, cookies or an API key?
No. Job boards are public, and the actor reads them without logging in. Requests go through Apify's datacenter proxy.
Can I monitor new jobs over time?
Yes. Switch on onlyNewJobs and schedule the actor. The ids of delivered jobs are kept in a named key value store in your Apify account; each run skips, and never charges, jobs a previous run delivered. In our test the second run skipped the 40 jobs the first had delivered and returned the next 40. After a catch up run, each run returns only jobs posted since.
Can I get Greenhouse, Ashby or Workday jobs too?
This actor reads Lever only, so its input and output are built around Lever's data. For several platforms in one run, our Career Site Jobs Scraper reads Greenhouse, Lever, Ashby and Workday together.
Which formats can I download?
JSON, CSV, Excel, XML, RSS and an HTML table, from the run's Storage tab or the dataset API. locations stays a list in JSON and is flattened in CSV and Excel.
Can I use it from Claude, ChatGPT or Cursor (MCP)?
- Connector URL: https://mcp.apify.com/?tools=themineworks/lever-jobs-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http lever-jobs-scraper "https://mcp.apify.com/?tools=themineworks/lever-jobs-scraper"
Is it legal to scrape Lever job boards?
The actor only reads job postings that employers publish for anyone to see, without signing in, and returns no personal contact details. You are responsible for how you use the data, for the terms of the sites involved, and for data protection law such as GDPR and CCPA. If in doubt, ask a lawyer about your use case.
Integrations
- Google Sheets: send each run's rows to a sheet with Apify's Google Sheets integration, or import the CSV link of the dataset.
- Make, Zapier and n8n: start the actor and read its dataset with the Apify apps and nodes, for example "new engineering jobs in Europe at our target accounts to Slack every morning".
- Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
- API and SDKs: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.
More from The Mine Works
Jobs and hiring
- Foundit Monster India Jobs
- Hirist Jobs Scraper
- India Jobs MCP
- Naukri Jobs Scraper
- Shine.com Jobs Scraper
- Internshala Scraper
- Indeed Jobs Scraper
- Instahyre Jobs Scraper
- Apna Jobs Scraper
- CutShort Jobs Scraper
- LinkedIn Jobs Scraper
- Recruiting & Jobs MCP
Social media and video
Leads and business directories
Marketing, SEO and reviews
Real estate
Science, health and government data
Company and business data
E-commerce and marketplaces
Food and local services
Developer and AI tools
More tools
Support
Found a Lever board that should work and does not? Open an issue in the Issues tab with the board link and the run ID, and we will look at it. For a new source or a field you need, email dmineworks@gmail.com.
Paste Lever boards, links or slugs from either host, filter by title, place, team and date, and get every open job back as a clean row with the company's real name, every location and the salary range, newest first.

