Lever Jobs Scraper & API — Salaries + New-Job Alerts
Pricing
from $1.80 / 1,000 results
Lever Jobs Scraper & API — Salaries + New-Job Alerts
Get every open job from any Lever careers page (US and EU): title, team, location, workplace type, description and salary ranges. Paste company names, URLs or websites (auto-detected) or pick a built-in list. Filter by keyword, location, remote or date; track new, updated and removed jobs. No login.
Pricing
from $1.80 / 1,000 results
Rating
0.0
(0)
Developer
Erwinbooze Ricardo
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Security
Limited permissionsShare
Lever Jobs Scraper is a Lever jobs scraper and Lever job board API: it extracts every open job from any careers page hosted on Lever (jobs.lever.co and EU-hosted jobs.eu.lever.co), such as Spotify, Palantir or Zoox. It reads Lever's official public Postings API - no login, no proxy, no browser. Paste Lever company names, careers URLs, or just company names and websites (auto-detected), filter by keyword, location, remote and date, and get salary ranges plus new / updated / removed job alerts for scheduled monitoring.
Each job includes title, location (and all additional locations), country, workplace type (remote / hybrid / on-site), team, department, commitment (full-time, contract...), creation date, apply link, the full description (text and/or HTML, including the "Responsibilities" / "Requirements" lists) and salary ranges: Lever's structured salary range when the company sets one, otherwise the range parsed from the job text, with currency and pay period.
What can you use it for?
- Job boards and aggregators: feed fresh Lever jobs into your site or newsletter.
- Recruiting and sales intelligence (lead generation): see which companies are hiring, for which teams and where.
- Salary benchmarking: collect published pay ranges by role, location and company.
- Hiring alerts: schedule a daily run with change detection and get only new, changed and removed jobs - in Slack, email or any webhook.
- AI agents and LLM pipelines: call it through the Apify MCP server and get clean JSON with plain-text descriptions.
Features
- Flexible input: Lever company names (
spotify), board and job URLs, or company names / websites with automatic board detection (careers-page links first, then name guesses). If a company is not on Lever but is on another supported ATS,RUN_SUMMARYtells you where. - Built-in company lists (
companyLists): curated lists such as AI companies, fintech or developer tools, each entry verified to have open jobs on 2026-10-30. Run with zero typing. - Many companies in one run, with deduplication: the same board entered twice (token + URL) is scraped once, and duplicate job IDs are dropped. Optional
dedupeSimilaralso drops identical reposts. - Filters: keywords (title or description), locations, departments, remote only, posted within the last N days.
- Salary ranges with currency and pay period; text parsing as fallback.
- Change detection:
changeTypenew / updated / removed,changedFields,firstSeenAt, stored in a named key-value store between runs. Or the simpleronlyNewJobsmode. - Robust: one wrong or deleted board does not fail the run; each board's status is in
RUN_SUMMARY. Respects your maximum cost per run.
Quick start
Paste any of these into the input (JSON tab):
{"companies": ["spotify","https://jobs.lever.co/palantir"],"keywords": ["engineer"],"postedWithinDays": 7}
Company names and websites work too:
{"companies": ["palantir.com","Zoox"],"remoteOnly": false,"departments": ["Engineering"],"maxJobsPerCompany": 100}
A curated list, no typing:
{"companyLists": ["fintech"],"keywords": ["engineer"],"maxJobs": 100}
Input
| Field | Description |
|---|---|
companies | Lever company names, board/job URLs, or company names/websites. Optional if companyLists is set. |
companyLists | Built-in curated company lists (only entries on Lever are used). |
autoDetect | Find the Lever board for names/websites (default on). |
keywords / searchInDescription | Keep jobs whose title (or description) contains any keyword. |
locations / departments | Keep jobs whose location / department contains any of these strings. |
remoteOnly / postedWithinDays | Remote only; published in the last N days (0 = all). |
includeDescription / includeDescriptionHtml | Description as plain text and/or HTML. |
includeSalary | Salary fields. |
changeDetection, changeStoreName, includeUnchanged, includeRemoved, skipFirstRunOutput | New / updated / removed tracking between runs. |
onlyNewJobs / monitoringStoreName | Simple mode: only job IDs not seen before. |
dedupeSimilar | Drop identical reposts (same title, location and description). |
maxJobsPerCompany / maxJobs | Result limits (0 = no limit). |
Output
Each dataset item is one job:
{"jobId": "e8a190f0-7a89-4c11-a6a0-452ff6234749","title": "Administrative Business Partner, Floater","companyToken": "zoox","url": "https://jobs.lever.co/zoox/e8a190f0-7a89-4c11-a6a0-452ff6234749","applyUrl": "https://jobs.lever.co/zoox/e8a190f0-7a89-4c11-a6a0-452ff6234749/apply","location": "Foster City, CA","allLocations": ["Foster City, CA"],"country": "US","isRemote": false,"workplaceType": "hybrid","team": "Executive Office","department": "Executive Office","commitment": "Full-time","createdAt": "2026-10-06T17:27:44.932Z","salaryMin": 123000,"salaryMax": 168000,"salaryCurrency": "USD","salaryPeriod": "YEAR","salarySource": "lever_salary_range","salaryRanges": [{ "min": 123000, "max": 168000, "currency": "USD", "period": "YEAR" }],"lists": [{ "title": "Responsibilities", "content": "• Scheduling team and cross-functional meetings..." }],"descriptionText": "Zoox is building the future of transportation...","scrapedAt": "2026-10-30T06:25:49.687Z"}
salarySource is lever_salary_range (structured), description (parsed from text, with the matched snippet in salaryText) or null.
With change detection on, items also have changeType, changedFields and firstSeenAt (removed jobs come as separate changeType: "removed" items). New fields are only added, never renamed, so existing integrations keep working.
You can download results as JSON, CSV, Excel, XML or HTML, or fetch them through the Apify API.
Job alerts and change detection (new / updated / removed)
Turn on changeDetection and schedule the Actor (for example daily in Schedules in Apify Console). Every run is compared with the previous run that used the same companies and filters:
changeType: "new"- the job appeared since the last run.changeType: "updated"- the title, location, department, employment type, salary or description changed;changedFieldslists which.changeType: "removed"- the job was open last time and is gone now (filled or closed). The item hasjobId,title,url,location,firstSeenAtandremovedAt.- Unchanged jobs are skipped unless you turn on
includeUnchanged. Every output job also getsfirstSeenAt.
The snapshot lives in a named key-value store (changeStoreName, default lever-jobs-changes), so it survives between runs. Use a different store name per monitor. Turn on skipFirstRunOutput to save the baseline silently on the first run. Change counts per company appear in RUN_SUMMARY. If a result limit (maxJobsPerCompany / maxJobs) cuts the output, the jobs that were not output stay pending and come out as new on the next run, so nothing is missed.
{ "companies": ["spotify"], "changeDetection": true, "skipFirstRunOutput": true, "changeStoreName": "my-hiring-monitor" }
Prefer something simpler? onlyNewJobs outputs only job IDs not seen before (no updated/removed tracking).
Send changes to Slack, email or a webhook
- Slack / email: in the Actor's Integrations tab, add the Slack or email integration and trigger it on Run succeeded. Because change-detection runs output only changes, the message is your alert.
- Webhook (your own endpoint, Zapier "Catch Hook", n8n "Webhook" node, Make "Custom webhook"): add an HTTP webhook for the event
ACTOR.RUN.SUCCEEDED. The default payload containsresource.defaultDatasetId; fetch the changes fromhttps://api.apify.com/v2/datasets/<defaultDatasetId>/items?clean=true(add&token=...or anAuthorization: Bearerheader) and filter bychangeType.
Use with AI agents (MCP)
This Actor can be called by AI agents through the Apify MCP server. It runs with limited permissions and pay-per-event pricing, so agents only pay for the results they get. To give Claude, Cursor, VS Code or any MCP client a dedicated tool for it, add this server URL:
https://mcp.apify.com?tools=wowlab/lever-jobs-scraper
The agent can then call it with plain inputs such as {"companies": ["stripe.com"], "keywords": ["engineer"], "maxJobs": 20}. Every input field has a description written for agents, and results come back as clean JSON with plain-text descriptions, ready for RAG, classification or summaries. Set maxJobs (and a max total charge in the call options) to keep agent spend predictable.
Integrations: Make, n8n, Zapier, Google Sheets
- Make: use the Apify app's Run an Actor module with
wowlab/lever-jobs-scraper, then Get Dataset Items. - n8n: use the Apify node (Run Actor + Get dataset items), or an HTTP Request node calling
POST https://api.apify.com/v2/acts/wowlab~lever-jobs-scraper/run-sync-get-dataset-items. - Zapier: use the Apify app (Run Actor action, or Finished Actor Run trigger + Fetch Dataset Items).
- Google Sheets, Airtable, Slack, email: connect them in the Actor's Integrations tab, or export the dataset as CSV/Excel/JSON.
- API:
POST https://api.apify.com/v2/acts/wowlab~lever-jobs-scraper/run-sync-get-dataset-itemswith the input as JSON body returns the jobs directly.
Pricing
Pay per result: $1.80 per 1,000 jobs ($0.0018 per job) plus a tiny start fee ($0.00005 per run per GB of memory; the default is 256 MB). No subscription. The Pricing tab shows the current price. Example: 500 jobs cost about $0.90. With change detection, only changed jobs (and removed-job records) are output and charged, so daily monitoring stays cheap. Set maxJobs or a maximum cost per run to cap spend.
How do I find a company's Lever company name?
Open the company's careers page and click a job. If the URL looks like jobs.lever.co/<company>/... (or jobs.eu.lever.co/<company>/...), the company uses Lever, and <company> is the name to use. You can paste the full URL, or just the company name or website and let auto-detection find it.
Is it legal?
This Actor reads only the public job postings that companies publish on purpose through Lever's official public Postings API. It collects no personal data and needs no login. You are responsible for how you use the data, so check the terms of the sites you rely on.
FAQ
Why are some salary fields empty? Not every company publishes pay ranges. When none is published or found in the text, the salary fields are null.
A board returns "not found". The company name is wrong, or the company has left Lever. RUN_SUMMARY says so, and if the company has a board on another supported ATS it names it (foundOnOtherAts).
Other ATS platforms? See our Greenhouse Jobs Scraper and Ashby Jobs Scraper, which use the same input and similar output.