Lever Jobs Scraper with Salaries avatar

Lever Jobs Scraper with Salaries

Pricing

$2.00 / 1,000 results

Go to Apify Store
Lever Jobs Scraper with Salaries

Lever Jobs Scraper with Salaries

Lever jobs scraper for any company's careers page (Palantir, Spotify, Zoox, Shield AI and thousands more): flat rows with title, team, location, workplace, commitment, apply link, salary as numbers and the full description merged. Monitor mode returns only new, changed and removed jobs.

Pricing

$2.00 / 1,000 results

Rating

0.0

(0)

Developer

Redomic

Redomic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Security

Limited permissions

Share

Lever Jobs Scraper with Salaries

For recruiters, sales teams and analysts who track who is hiring: give it a company on Lever (the name after jobs.lever.co/, for example palantir) and get every open job as a flat row: title, team, department, location, workplace type, commitment, posting date, apply link, salary as numbers when the company publishes it, and the full description with every section merged into one text.

Real rows from 31 Oct 2026:

companytitleteamlocationworkplaceTypesalaryMinsalaryMaxsalaryCurrencysalaryPeriodsalarySource
shieldaiAerodynamics & Performance Engineer (R5732)V-BAT EngineeringDallas, TexasOnsite115,000175,000USDyearleverSalaryRange
shieldaiAerostructures Design Engineer II (R5156)X-BAT Engineering - AerostructuresSeattle, WashingtonOnsite108,000160,000USDyearleverSalaryRange
palantirAdministrative Business Partner - ShipOSAdministrativeWashington, D.C.Hybrid60,00097,000USDyeardescription
spotifyAccount Executive - Commercial, Spotify TechnologyPlatformNew York, NYHybrid87,069124,385USDyeardescription

What it does

  • Salary as numbers, from two sources: Lever's structured salaryRange when the company sets it (counts from runs on 31 Oct 2026 with {"companies": ["<company>"], "maxItems": 1000}: Shield AI 528 of 655 jobs; Zoox 211 of 227), otherwise a pay range written in the posting ("The salary range for this position is estimated to be $5,900 - $10,500/month": Palantir 197 of 299). Min, max, ISO currency and period (year, month, hour...) in their own columns; salarySource says which. No range published: null, never an estimate.

  • The whole description, merged: Lever splits a posting into an opening, a body, list sections ("What you'll do", "Requirements") and closing text. With includeDescription you get them all in page order as one plain-text field, plus the HTML.

  • Seniority on every row (Intern, Junior, Mid, Senior, Lead/Principal): Lever's own level when the company sets it (Zoox sets Junior on 2 jobs in the 3 Nov capture), otherwise read from the title (Senior Backend Software Engineer is Senior, Software Engineer, Internship is Intern, Senior / Staff Vehicle Program Manager is Lead/Principal, no signal is Mid). Filter with seniority to get only the level you are hiring for.

  • Monitor mode: Schedule it and get only new, changed (title, team, location, workplace, commitment or pay) and removed jobs since the last run, tagged in changeType. Unchanged jobs are free.

  • US and EU accounts: Companies hosted on jobs.eu.lever.co are found automatically.

  • Dead inputs are reported: A company Lever does not know (404 on both APIs) or with no open jobs gets a status row with the reason; a run with no data ends failed so a schedule alerts you. Example status row for a misspelled name:

    {"_status": "failed", "company": "palantir-typo", "mode": "jobs", "rows": 0, "reason": "company not found on Lever (404 on the US and EU APIs): check the name after jobs.lever.co/"}
  • One request per company: Lever's public postings API returns every posting with its description in one call: no proxy, no browser, runs in seconds.

Input

FieldTypeDefaultMeaning
companiesarray of strings["palantir"]Lever company names (after jobs.lever.co/). Full URLs are accepted
modeenumjobsjobs lists every open job; monitor returns only new, changed and removed jobs since the last run
searchstring""Keep jobs whose title, department, team, location, commitment, workplace type or description contains this text
seniorityarray of strings[]Keep only these levels: Intern, Junior, Mid, Senior, Lead/Principal. Empty = every level
includeDescriptionbooleanfalseAdd the merged plain-text description and the HTML. Same single request
postedWithinDaysinteger0Only jobs posted in the last N days relative to the scrape time. 0 = any date
maxItemsinteger100Max job rows per company, 1 to 1000 (3 companies x 100 = at most 300 rows)
{ "companies": ["palantir", "spotify"], "mode": "jobs", "search": "engineer", "maxItems": 50 }

Output

One row per job, then one status row per company, then a summary row.

FieldExampleMeaning
idbaaae144-6477-4f3b-975b-ec1d04d0a7e4Lever posting id, stable across runs
companyshieldaiThe company you asked for
titleAerostructures Design Engineer II (R5156)Job title
team, departmentX-BAT Engineering - Aerostructures, X-BAT DivisionAs the company files the job
locationSeattle, WashingtonPrimary location
allLocations["Seattle, Washington"]Every location the posting lists
countryUSCountry code, when Lever has it
workplaceTypeOnsiteOnsite, Hybrid or Remote (null when unspecified)
commitmentFull Time EmployeeThe company's own wording
employmentTypeFull-timeStandardised: Full-time, Part-time, Contract, Internship, Temporary; null when the wording does not say
senioritySeniorIntern, Junior, Mid, Senior or Lead/Principal. From Lever's level when set, otherwise the title; no signal is Mid
postedAt2026-06-10T16:36:42ZWhen the posting was created, UTC
postedDaysAgo0Days between postedAt (date) and scrapedAt (date). Set on every job row.
urlhttps://jobs.lever.co/shieldai/baaae144-6477-4f3b-975b-ec1d04d0a7e4Posting page
applyUrlhttps://jobs.lever.co/shieldai/baaae144-6477-4f3b-975b-ec1d04d0a7e4/applyApplication form
salaryMin, salaryMax108000, 160000Published pay range
salaryCurrency, salaryPeriodUSD, yearISO 4217 code; year, month, week, day or hour
salaryTextUSD 108,000 - 160,000 per yearThe range as one string
salarySourceleverSalaryRangeleverSalaryRange, description or null
salaryRanges[{"min": 108000, "max": 160000, "currency": "USD", "period": "year", "label": null}]The range as a list (same shape as our Greenhouse and Ashby Actors)
descriptionText, descriptionHtmlShield AI is a venture-backed defense-tech company with the mission of...Only with includeDescription
changeTypenewMonitor mode only
closedOn2026-10-31Removed rows only: ISO date the job was first seen gone (the run date); closedOn minus postedAt is days open, so filled/closed roles report time-to-fill
scrapedAt2026-10-31T00:00:00ZWhen the row was fetched

Status rows carry _status (ok, empty, failed), company, mode, rows, reason and total (open jobs). The last row has _status: "summary" with run totals and, in monitor mode, new, changed, removed, firstRun.

Seniority, real counts

With {"companies": ["palantir"], "seniority": ["Senior"], "maxItems": 1000} on the 3 Nov 2026 capture (302 open jobs) the 25 Senior rows are Senior Backend Software Engineer - Application Development and Senior Front End Software Engineer - Application Development (25 of 302; the same capture has 46 Intern, 38 Junior and 193 Mid). Zoox (226 open jobs) returns 65 Lead/Principal rows, including Lead AI Engineer – Enterprise, Data & AI and Senior / Staff Vehicle Program Manager.

Pricing

result: $0.002 per job row delivered, nothing else: no start fee. 1,000 jobs ≈ $2.00. In monitor mode only new and changed jobs are charged; unchanged and removed jobs are free.

Monitor recipe

  1. Save a task with {"companies": ["palantir", "spotify", "zoox"], "mode": "monitor"}.
  2. Schedule it daily in Apify Console.
  3. Add a "run succeeded" webhook that sends the rows to Slack, Make or n8n, or export the dataset to Google Sheets.
  4. changeType: new is a fresh opening (a hiring signal), changed a retitled or re-priced role, removed a filled or closed one. Every removed row carries closedOn (the run date), so closedOn minus postedAt gives you days open and time-to-fill per role without tracking state yourself.

Reliability (3 Nov 2026 capture): the nine boards in the test fixtures (1,451 jobs across palantir, shieldai, spotify, zoox, outreach, matchgroup, jumpcloud, ro and brilliant) all parse to real rows — 0 failed boards. An unchanged monitor run ends ok with no rows, so a quiet day is not a failed run; a typo or dead board still gets a failed status row instead of silence.

FAQ

  • How do I find a company name? Open the careers page; Lever postings live at jobs.lever.co/<name>. Paste the URL if you like.
  • Can I search all Lever companies at once? No. Lever's public API is per company; list as many as you need.
  • Why is salary null for some jobs? The company did not publish a range on Lever or in the posting text (common outside the US).

What this does not do

It reads only Lever's public postings API: no logins, no applicant data, no personal contact details, no email extraction. It does not estimate missing salaries.

Sibling Actors: Greenhouse Jobs Scraper with Salaries and Ashby Jobs Scraper with Salaries (same row shape for the other two big startup ATSs), and Google Jobs API Scraper.

Use it from AI agents (MCP) and Python

AI agents. Add this Actor as a tool in Claude, Cursor, VS Code or any MCP client through the Apify MCP server. The agent reads the input schema, so a plain request is enough.

{
"mcpServers": {
"lever-jobs-monitor": {
"url": "https://mcp.apify.com?tools=redomic/lever-jobs-monitor",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}

Python. pip install apify-client, then:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("redomic/lever-jobs-monitor").call(run_input={"companies": ["palantir"], "mode": "jobs", "maxItems": 20})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

More from us