Lever APIjobs.lever.co ↗
Access job postings from any Lever-hosted company board. List, filter, search, and group roles, get full posting details, and extract application form questions.
What is the Lever API?
This API exposes 6 endpoints covering Lever-hosted company job boards at jobs.lever.co. Use get_company_job_postings to list all active roles for a company with filters for team, location, commitment type, and pagination, or call get_job_application_form_questions to extract every field label, input type, required flag, and answer options from a posting's application form.
curl -X GET 'https://api.parse.bot/scraper/1d3e03ad-4684-456a-a278-b06b36e15b58/get_company_job_postings?team=Administrative&limit=10&offset=0&company=palantir&location=New+York%2C+NY&commitment=Full-time' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace jobs-lever-co-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.lever_job_board_api import Lever, Posting, FormQuestion, JobBoard, GroupBy, PostingNotFound
lever = Lever()
# List postings for a company with a filter
for posting in lever.postings.list(company="palantir", commitment="Full-time"):
print(posting.text, posting.hosted_url, posting.categories.location)
# Search for specific roles by keyword
for result in lever.postings.search(company="palantir", query="security"):
print(result.text, result.categories.team)
# Get full details of a specific posting
detail = lever.postings.get(company="palantir", posting_id="0bbfd4f4-41ff-4ec6-b73f-5200efd5d4d3")
print(detail.text, detail.apply_url)
for section in detail.lists:
print(section.text, section.content)
# Get postings grouped by department
grouped = lever.postings.grouped(company="palantir", group_by=GroupBy.TEAM)
for team_name, jobs in grouped.items():
print(team_name, len(jobs))
# Get the HTML-scraped job board overview
board = lever.jobboards.get(company="palantir")
print(board.company_name, board.logo_url)
for bp in board.postings:
print(bp.title, bp.department, bp.location)
# Get application form questions for a posting
for question in lever.formquestions.list(company="palantir", posting_id="0bbfd4f4-41ff-4ec6-b73f-5200efd5d4d3"):
print(question.label, question.type, question.required)
Fetch active job postings for a company from the Lever public API. Supports filtering by team, location, and commitment type. Returns paginated results via offset. The location filter requires an exact match to the location string as stored by Lever.
| Param | Type | Description |
|---|---|---|
| team | string | Filter by team/department name. Requires exact match to the team value in the posting. |
| limit | integer | Max results to return per page. |
| offset | integer | Pagination offset (number of items to skip). |
| companyrequired | string | The company slug as it appears in the Lever URL (e.g. 'palantir', 'netflix'). |
| location | string | Filter by location. Requires exact match to the full location string (e.g. 'New York, NY'). |
| commitment | string | Filter by commitment type (e.g. 'Full-time', 'Internship'). |
{
"type": "object",
"fields": {
"items": "array of job posting objects",
"total": "integer count of items returned"
},
"sample": {
"data": {
"items": [
{
"id": "0bbfd4f4-41ff-4ec6-b73f-5200efd5d4d3",
"text": "Administrative Business Partner - Security",
"lists": [
{
"text": "Core Responsibilities",
"content": "<li>...</li>"
}
],
"country": "US",
"applyUrl": "https://jobs.lever.co/palantir/0bbfd4f4-41ff-4ec6-b73f-5200efd5d4d3/apply",
"createdAt": 1778622524938,
"hostedUrl": "https://jobs.lever.co/palantir/0bbfd4f4-41ff-4ec6-b73f-5200efd5d4d3",
"categories": {
"team": "Administrative",
"location": "Palo Alto, CA",
"commitment": "Full-time",
"allLocations": [
"Palo Alto, CA"
]
},
"description": "<div>...</div>",
"workplaceType": "hybrid",
"descriptionPlain": "A World-Changing Company..."
}
],
"total": 3
},
"status": "success"
}
}About the Lever API
Job Listings and Filtering
get_company_job_postings accepts a company slug and returns an array of job objects, each containing a UUID id, job text (title), HTML and plain-text description fields, applyUrl, hostedUrl, a categories object with commitment, location, team, and allLocations, and a createdAt millisecond timestamp. Optional filters include team, location, commitment, limit, and offset. Location and team filters require exact string matches as stored by Lever — for example, 'New York, NY' not 'New York'. get_job_posting_detail returns the same shape for a single posting identified by its UUID posting_id.
Grouping and Search
get_job_postings_grouped fetches all postings for a company and returns them keyed by a field you specify via group_by: accepted values are department, team, location, or commitment. Each key maps to an array of full posting objects. search_jobs performs case-insensitive substring matching against job title, plain-text description, and categories fields, returning matching posting objects with id, text, hostedUrl, and categories.
Job Board Page and Application Form
get_company_job_board retrieves the public-facing Lever job board for a company, returning company_name, logo_url, and a postings array where each item includes title, location, commitment, url, department, and id — structured as grouped on the board page. get_job_application_form_questions targets a specific posting by company and posting_id and returns a questions array; each question object includes label, type (e.g. text, select, checkbox), required status, and an options array for select, radio, or checkbox fields.
The Lever API is a managed, monitored endpoint for jobs.lever.co — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when jobs.lever.co changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official jobs.lever.co API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate open engineering roles across multiple Lever-hosted companies into a single job feed, using
teamandcommitmentfilters. - Build a job alert system that monitors
createdAttimestamps fromget_company_job_postingsto surface newly posted roles. - Analyze application form complexity across companies by comparing question counts and required fields from
get_job_application_form_questions. - Group a company's postings by
locationordepartmentviaget_job_postings_groupedto power a filterable careers directory. - Pre-fill or validate application workflows by mapping field
typeandoptionsreturned for each posting's form questions. - Search a company's Lever board by keyword with
search_jobsto surface relevant roles for a given skill or job function. - Extract company logo and structured department-grouped listings from
get_company_job_boardto embed in a third-party careers portal.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Lever have an official public API?+
What does the `categories` field contain and how does it differ from `allLocations`?+
categories is an object with four keys: commitment (e.g. 'Full-time'), location (the primary location string), team (department name), and allLocations (an array listing every location associated with the posting). A posting with multiple office options will have them in allLocations while location holds the primary one.Why do location and team filters sometimes return no results even when matching postings exist?+
location and team parameters in get_company_job_postings require an exact string match to the value Lever stores for that posting. A query for 'New York' will not match a posting stored as 'New York, NY'. Use get_company_job_postings without filters first to inspect the exact strings, then apply them as filter values.