Lever Jobs Scraper
Pricing
from $0.70 / 1,000 postings
Lever Jobs Scraper
Scrape every active job posting from any Lever.co board — titles, locations, teams, departments, workplace type, full descriptions, responsibilities, and salary ranges. Live from the official Lever API. Filter by title, location, workplace type, country, date, or remote at the source.
Pricing
from $0.70 / 1,000 postings
Rating
0.0
(0)
Developer
Nate Schnell
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
What does Lever Jobs Scraper do?
Lever Jobs Scraper pulls every active job posting from any company's Lever.co careers board, live from the official Lever Postings API. Paste the board slug (e.g. spotify, coupa, aircall) or any Lever URL, get back a clean dataset of every posting — titles, locations, teams, departments, workplace type, full HTML and plain-text descriptions, structured responsibilities and requirements, and salary ranges where Lever exposes them. Built for recruiters tracking competitor hiring, lead-gen pipelines targeting hiring companies, job aggregators backfilling postings, and analysts mapping talent demand.
What data can you extract from Lever?
Each emitted record has 24 fields. The most useful ones:
- Identity —
id(Lever posting UUID),board(the slug),companyName(when mapped viacompanyMap),hostedUrl,applyUrl - Title —
title - Location —
location(primary),allLocations[](every city Lever lists),country(2-letter code) - Workplace —
workplaceType(remote/hybrid/onsite/unspecified) - Team & department —
team,department,commitment(Full-time, Intern, Contract, …),level - Timing —
createdAt(ISO 8601, converted from Lever's epoch ms) - Description —
description(HTML, ready to render),descriptionPlain(text, HTML stripped) - Benefits / EEO / pay disclosures —
additional(HTML),additionalPlain(text) - Responsibilities & requirements —
lists[], an array of structured sub-sections like What you'll do, Requirements, Nice to have. Each entry has the section header (text), the HTML content, and optional plain text. - Salary —
salaryRange(min,max,currency,interval) andsalaryDescriptionwhen Lever exposes them — typically present on ~1 in 3 US/Canada postings.
Every field is preserved with the original Lever values, so records join back cleanly to Lever's UUIDs.
How to use Lever Jobs Scraper
- Create a free Apify account.
- Open Lever Jobs Scraper and click Try for free.
- Paste one or more board slugs or Lever URLs into Lever boards. The slug is the segment that follows
jobs.lever.co/in a company's careers URL — e.g.https://jobs.lever.co/spotify→spotify. - (Optional) Add filters:
Title includes,Location excludes,Workplace type,Country includes,Only postings created after,Remote only, etc. Filters run before billing. - (Optional) Map slug → company name via Company name overrides (e.g.
spotify=Spotify) so thecompanyNamecolumn is populated. Lever's API doesn't return a company name. - Click Save & Start. Each board returns in 1–10 seconds regardless of size — one HTTP call per board.
- Download results from the Storage tab in JSON, CSV, Excel, XML, or HTML.
How much does it cost?
Lever Jobs Scraper is pay-per-result: you're billed one posting event per emitted record, regardless of how many boards you query. Postings filtered out by your input filters are not billed.
The per-posting price scales down as your Apify plan goes up:
| Your Apify plan | Per posting | Per 1,000 |
|---|---|---|
| Free | $0.00095 | $0.95 |
| Starter | $0.00090 | $0.90 |
| Scale | $0.00080 – $0.00070 | $0.80 – $0.70 |
| Business / Enterprise | $0.00060 – $0.00050 | $0.60 – $0.50 |
The Apify Free plan includes $5/month of platform credit — enough for roughly 5,000 free postings before you'd need to top up. There's no minimum spend per run; pull 1 posting or 50,000.
Cost tip: switching includeContent, includeAdditional, and includeLists to false doesn't change the per-posting price, but it cuts dataset size by ~80% if you only need titles, locations, and links.
Input
Required: boards (array of slugs or URLs). Every other field is optional.
{"boards": ["spotify", "coupa", "https://jobs.lever.co/aircall"],"companyMap": ["spotify=Spotify", "coupa=Coupa", "aircall=Aircall"],"includeContent": true,"includeAdditional": true,"includeLists": true,"includeSalary": true,"parseContent": false,"titleFilter": ["engineer", "designer"],"locationExcludeFilter": ["india"],"workplaceTypeFilter": ["remote", "hybrid"],"departmentFilter": ["engineering"],"remoteOnly": false,"createdAfter": "2026-04-01","maxItems": 200}
See the Input tab for every field with help text. Common patterns:
- Pull everything from one company:
{ "boards": ["spotify"] } - Just titles and links (cheap fast pull):
{ "boards": ["coupa"], "includeContent": false, "includeAdditional": false, "includeLists": false } - Remote engineering jobs across several companies:
{ "boards": ["spotify","aircall","coupa"], "remoteOnly": true, "departmentFilter": ["engineering"] } - LLM-friendly text dataset:
{ "boards": ["spotify"], "parseContent": true } - US-only roles posted this month:
{ "boards": ["spotify"], "countryFilter": ["US"], "createdAfter": "2026-05-01" }
Output
One record per active posting. Sample (truncated):
{"id": "1ff4a4e3-897c-4eab-9ee2-aa7d1d07a9d6","board": "spotify","companyName": "Spotify","title": "Account Executive - Backstage","hostedUrl": "https://jobs.lever.co/spotify/1ff4a4e3-897c-4eab-9ee2-aa7d1d07a9d6","applyUrl": "https://jobs.lever.co/spotify/1ff4a4e3-897c-4eab-9ee2-aa7d1d07a9d6/apply","location": "Toronto","allLocations": ["Toronto"],"country": "CA","workplaceType": "hybrid","team": "Platform","department": "Operations and Business Support","commitment": "Permanent","level": null,"createdAt": "2026-03-12T17:10:21.350Z","description": "<div><span>As an Account Executive for Spotify Backstage ...</span></div>","descriptionPlain": "As an Account Executive for Spotify Backstage ...","additional": "<div>The Canada base range for this position is $103,628 – $148,040 CAD plus equity ...</div>","additionalPlain": "The Canada base range for this position is $103,628 – $148,040 CAD plus equity ...","lists": [{"text": "What You'll Do","content": "<ul><li>Identify and pursue new business opportunities ...</li></ul>","contentPlain": null}],"salaryRange": null,"salaryDescription": null,"scrapedAt": "2026-05-22T12:45:18.054Z","source": "https://api.lever.co/v0/postings/spotify?mode=json"}
Empty boards return zero records (Lever responds 200 with []). Boards that don't exist or have moved off Lever log a warning and skip — your run isn't billed for them.
Integrations
Lever Jobs Scraper works with the full Apify integration set: Make, Zapier, n8n, Slack, Google Drive, GitHub, Airbyte, scheduled runs, and the Apify API. Trigger runs from your ATS or CRM, push fresh postings into a Sheet or a database, or fan out webhook notifications when new postings appear. See Apify integrations.
Related actors
- Greenhouse Jobs Scraper — for companies hosted on Greenhouse instead of Lever (Airbnb, Stripe, Figma).
- Ashby Jobs Scraper — for companies hosted on Ashby instead of Lever (Linear, Vanta, Ramp).
- Indeed Jobs Scraper — for jobs hosted on Indeed (millions of postings across all employers, not just Lever-using companies).
- For multi-ATS aggregation across Workday + Lever + Ashby + Greenhouse and 50 other systems, the closest fit on the Store is
fantastic-jobs/career-site-job-listing-api— it's a DB query against a pre-crawled index, not a live scrape.
FAQ
How does Lever Jobs Scraper work?
It hits https://api.lever.co/v0/postings/{slug}?mode=json — Lever's official public Postings API, documented at github.com/lever/postings-api — and normalizes the response into the dataset schema. No login, no proxy, no headless browser. Pass eu: true to query api.eu.lever.co for EU-resident boards.
Can I use Lever Jobs Scraper as an API?
Yes. Trigger a run via the Apify REST API:
POST https://api.apify.com/v2/acts/schnellscrapers~lever-jobs-scraper/runs?token=<APIFY_TOKEN>
The Apify console also exposes a run-sync-get-dataset-items endpoint that returns records inline when the run finishes — handy for synchronous integrations.
Can I use it in Python or Node.js?
from apify_client import ApifyClientclient = ApifyClient(token="<APIFY_TOKEN>")run = client.actor("schnellscrapers/lever-jobs-scraper").call(run_input={"boards": ["spotify", "coupa"],"companyMap": ["spotify=Spotify", "coupa=Coupa"],"titleFilter": ["engineer"],})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["companyName"], item["location"])
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_TOKEN>' });const run = await client.actor('schnellscrapers/lever-jobs-scraper').call({boards: ['spotify', 'coupa'],companyMap: ['spotify=Spotify', 'coupa=Coupa'],titleFilter: ['engineer'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Is it legal to scrape Lever?
Lever job boards are public-facing and the Postings API is documented for third-party use at github.com/lever/postings-api — companies use the same endpoint to embed their careers page. Lever Jobs Scraper hits only the official API and respects robots.txt. As with any scraping, the data you collect is what's already publicly available; storing or republishing it must comply with the hiring company's terms and any applicable privacy laws (GDPR, CCPA).
Why is my company's board returning a 404?
The slug is the path segment in the company's Lever careers URL — jobs.lever.co/<slug>. Some companies have moved off Lever or use a custom-domain alias that maps to a different slug. Open the company's careers page and check the URL the listings load from. If you see a 404 in the logs, the run for that board is skipped at no charge.
Why is companyName null?
Lever's API doesn't return a company name — only the slug. Pass a companyMap entry like spotify=Spotify to label the records yourself. The slug is always present in the board field if you want to map externally.
How fresh is the data?
Live — every run hits Lever's API directly. Compare to DB-aggregator actors (e.g. fantastic-jobs/career-site-job-listing-api), which have an indexing lag of up to 30 minutes per their docs.
Does it return salary ranges?
Yes, when Lever exposes them. Salary fields are most consistently populated on US, Canada, and California-headquartered postings due to pay-transparency laws. Set includeSalary: false to drop them from the output.
Does it support EU Lever boards?
Yes. Set eu: true to query api.eu.lever.co instead of the global host. The global host transparently serves most EU boards too, so this is rarely needed.
Your feedback
Found a bug, missing a field, or want a new filter? Open an issue on the actor's Issues tab or email me. Every report gets read.