Lever Job Postings & Careers Scraper
Pricing
from $6.15 / 1,000 results
Lever Job Postings & Careers Scraper
Scrape public job postings from any company using the Lever ATS. Extract title, department, team, location, workplace type, description, requirements, apply URL and more. Export to JSON, CSV or Excel.
Pricing
from $6.15 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Lever Job Postings & Careers Scraper
Here is one real result, with every field the actor returns (long description and list fields trimmed with an explicit note; all values are real):
{"title": "Administrative Business Partner","company": "palantir","department": null,"team": "Administrative","location": "London, United Kingdom","allLocations": ["London, United Kingdom"],"commitment": "Full-time","workplaceType": "hybrid","country": "GB","createdAt": "2024-03-25T21:50:16.463Z","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryInterval": null,"salaryDescription": null,"openingPlain": "A World-Changing Company. Palantir builds the world's leading software for data-driven decisions and operations. By bringing the right data ...[trimmed]","descriptionPlain": "A World-Changing Company. Palantir builds the world's leading software for data-driven decisions and operations. By bringing the right data ...[trimmed]","description": "<div><strong>A World-Changing Company</strong></div> ...[trimmed HTML]","lists": [{"text": "Administrative Business Partner (Foundry)","content": "<li>Provide administrative support to a portfolio of individuals/teams across the business.</li> ...[trimmed]"}],"additionalPlain": "Life at Palantir. We want every Palantirian to achieve their best outcomes ...[trimmed]","applyUrl": "https://jobs.lever.co/palantir/ac978161-6f46-4f6b-ad9e-a258e642751c/apply","url": "https://jobs.lever.co/palantir/ac978161-6f46-4f6b-ad9e-a258e642751c","id": "ac978161-6f46-4f6b-ad9e-a258e642751c","observedAt": "2026-08-10T14:18:39.045Z","error": null}
The most complete Lever jobs scraper available. It returns every field a Lever posting exposes (title, department, team, all locations, commitment, workplace type, salary range, and both plain-text and HTML descriptions with structured responsibility lists), plus a normalized apply URL and posting ID, gives you four post-fetch filters, and offers an optional paid contact-enrichment add-on to attach a public business email and contact person.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor takes one or more Lever company slugs, fetches every public posting on each company's Lever careers page, applies the filters you pass, and writes one normalized record per posting to the run's dataset. A company slug is the part after jobs.lever.co in a careers URL, for example palantir for jobs.lever.co/palantir. Dates are normalized to ISO 8601, missing source values are returned as null, and each posting keeps both a clean plain-text description and the original HTML plus its structured responsibility lists.
An optional paid add-on (enrichContacts) tries to attach a public business contact email and person to each posting that does not already carry one. It is off by default and billed separately.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 postings across three companies.
{"companies": ["palantir", "spotify", "ro"],"maxJobs": 10}
companies is required. Every other input is optional; filters are applied after the postings are fetched, so leave any filter empty to skip it.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
companies | string[] | yes | ["palantir","spotify","ro"] | One or more Lever company slugs. The slug is the part after jobs.lever.co in a careers URL, for example palantir for jobs.lever.co/palantir. |
maxJobs | integer | no | 10 | Maximum number of postings to collect across all companies. Free Apify plans are capped at 10 per run. |
searchQuery | string | no | (empty) | Keyword filter applied to the job title and description, for example engineer, sales, or product manager. Leave empty to collect every posting. |
location | string | no | (empty) | Location filter, for example London, New York, or Remote. Matches any of the posting locations. |
department | string | no | (empty) | Department filter, for example Engineering, Sales, or Marketing. |
commitment | string | no | (empty) | Employment commitment filter, for example Full-time, Permanent, Contract, or Intern. |
enrichContacts | boolean | no | false | Paid add-on. For each result without an email, attempt to find a public business contact email and contact person. Billed per attempt, plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap how many results the add-on tries to enrich, to control add-on cost. Free Apify accounts are capped at 3. |
Filters combine with logical AND and are applied after the postings are fetched.
Output reference
One dataset item per posting. Types: string, integer, object[], string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
title | string | Job title. |
company | string | The Lever company slug the posting belongs to. |
department | string | Department, or null when the company does not set one. |
team | string | Team within the company. |
location | string | Primary posting location. |
allLocations | string[] | Every location listed on the posting. |
commitment | string | Employment commitment, for example Full-time. |
workplaceType | string | onsite, hybrid, or remote. |
country | string | Two-letter country code of the primary location, or null. |
createdAt | string | Posting creation time (ISO 8601), or null. |
salaryMin | integer | Minimum of the posted salary range, or null when not published. |
salaryMax | integer | Maximum of the posted salary range, or null. |
salaryCurrency | string | Salary currency code, or null. |
salaryInterval | string | Salary interval (for example per year), or null. |
salaryDescription | string | Free-text salary note, or null. |
openingPlain | string | Opening paragraphs of the posting as plain text. |
descriptionPlain | string | Full job description as plain text. |
description | string | Full job description as original HTML. |
lists | object[] | Structured sections of the posting, each { text, content } (for example a responsibilities list). |
additionalPlain | string | Closing paragraphs of the posting as plain text. |
applyUrl | string | Direct apply URL for the posting. |
url | string | Hosted Lever posting URL. |
id | string | Lever posting ID (unique per posting). |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a per-company failure, a single item with company and a populated error field is written instead. |
Contact enrichment add-on fields
Present only when enrichContacts is on. Namespaced enriched* so they never collide with the base fields:
| Field | Type | Description |
|---|---|---|
enrichedEmail | string | A real public business email, or null when none is found. |
enrichedContactName | string | A contact person to reach, or null. |
enrichedJobTitle | string | The contact person's job title, or null. |
enrichedEmailStatus | string | One of verified, likely, guessed, not_found, or error. |
enrichedSource | string | Where the email was sourced, or null. |
enrichedConfidence | number | Confidence score for the found email, or null. |
Example output record
Real record from a live run (input {"companies":["palantir","spotify","ro"],"maxJobs":10}, long text fields trimmed with a note):
{"title": "Backend Software Engineer - Application Development","company": "palantir","department": null,"team": "Dev","location": "London, United Kingdom","allLocations": ["London, United Kingdom"],"commitment": "Full-time","workplaceType": "hybrid","country": "GB","createdAt": "2024-03-11T20:25:07.256Z","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryInterval": null,"salaryDescription": null,"openingPlain": "A World-Changing Company. Palantir builds the world's leading software for data-driven decisions and operations. By bri ...[trimmed]","descriptionPlain": "A World-Changing Company. Palantir builds the world's leading software for data-driven decisions and operations. By bri ...[trimmed]","description": "<div>...[trimmed HTML]</div>","lists": [{ "text": "Core Responsibilities", "content": "...[trimmed]" }],"additionalPlain": "Life at Palantir. We want every Palantirian to achieve their best outcomes ...[trimmed]","applyUrl": "https://jobs.lever.co/palantir/10dfc8bc-99ad-4ca2-ab76-853cb90a92c2/apply","url": "https://jobs.lever.co/palantir/10dfc8bc-99ad-4ca2-ab76-853cb90a92c2","id": "10dfc8bc-99ad-4ca2-ab76-853cb90a92c2","observedAt": "2026-08-10T14:18:39.663Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~lever-jobs-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"companies":["palantir","spotify"],"searchQuery":"engineer","maxJobs":50}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~lever-jobs-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"companies":["ro"],"location":"Remote","maxJobs":200}'
Apify CLI:
apify call scrapers_lat/lever-jobs-scraper \--input '{"companies":["palantir"],"department":"Engineering"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per posting returned (
resultevent). See the pricing tab for the current per-result price. - Contact enrichment add-on. When
enrichContactsis on, the add-on bills per enrichment attempt, plus an extra charge only when a real email is found. It is off by default. - No charge on failure. If a company fails, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 postings per run, and the enrichment add-on is capped at 3 attempts. Upgrade for higher limits.
FAQ and troubleshooting
Where do I find a company slug?
It is the path segment after jobs.lever.co in a careers URL. For jobs.lever.co/palantir the slug is palantir.
A run returned 0 records. Why?
Either the company is not on Lever, or your filters matched nothing. Loosen searchQuery, location, department, or commitment. Zero-result runs are not charged.
Why are the salary fields null?
Lever only returns a salary range when the company publishes one. Missing source values are returned as null, never invented.
What is the difference between descriptionPlain and description?
descriptionPlain is clean plain text for search and analysis; description is the original posting HTML. The lists array holds the posting's structured sections such as responsibilities.
How does contact enrichment bill? It is a paid add-on, off by default. You are billed per attempt on results without an email, plus a separate charge only when a real public email is found.
Is this an official Lever tool? No. This actor is independent and has no affiliation with Lever. It reads only postings that are publicly available on companies' Lever careers pages.
Related scrapers
- Greenhouse Jobs Scraper: Public postings from companies on the Greenhouse ATS.
- Ashby Jobs Scraper: Public postings from companies on the Ashby ATS.
- Workday Jobs Scraper: Public postings from companies on Workday.
- SmartRecruiters Jobs Scraper: Public postings from the SmartRecruiters ATS.
- LinkedIn Jobs Scraper: Public job postings from LinkedIn.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Lever. Accesses only publicly available job postings from companies' Lever careers pages.
