Lever API: pulling jobs from any Lever-hosted careers page
Lever exposes a public postings API at api.lever.co/v0/postings/{company}. Here's what it returns, what it's missing, and when you should use a normalized aggregator instead.
Dvir Atias
Founder, JobsPipe
Lever exposes a public postings endpoint at api.lever.co/v0/postings/{company}. No auth required. Returns a JSON array of every public job at that company. Simple, clean, fast. Why would you ever need a third-party Lever API?
For one company, you don’t. For every Lever-hosted company, with normalized schema and cross-source dedup, the picture changes.
What the official Lever endpoint returns
curl https://api.lever.co/v0/postings/lever?mode=json | head
[
{
"id": "8a7e4f24-...",
"text": "Senior Software Engineer",
"categories": {
"team": "Engineering",
"location": "San Francisco, CA",
"commitment": "Full-time"
},
"hostedUrl": "https://jobs.lever.co/lever/8a7e4f24-...",
...
}
]Notice: location is a free-text string. Salary is nowhere - Lever doesn’t expose it structurally. The full description sits in description as HTML.
What JobsPipe adds on top of Lever
- Multi-company browsing - query every Lever-hosted company without knowing the slug.
- Parsed salary - same
compensationobject we ship for every other source, extracted from the description. - Normalized location - “San Francisco, CA” becomes
{ city: "San Francisco", country: "US", lat: 37.7749, ... }. - Cross-source dedup - if a job is on Lever and mirrored to Indeed, you get one record with both source_refs.
- Webhook delivery - push instead of poll, with signed payloads.
When to skip the wrapper
If you only need one company and the rough native shape is fine, hit Lever directly. Their public API is one of the cleanest in the ATS landscape and doesn’t require any auth setup.
Add Lever + 30 other sources with one API key.
Get a free API keySkip the scraper - try the API right now
Live, normalized postings from 30+ ATS feeds and job boards in one JSON schema. No key, no signup - this sandbox returns sample data in the exact live shape.
Press Test search to see normalized job records rendered here, and the raw JSON on the right.
POST /v1/sandbox/jobs/search{
"job_title_or": [
"software engineer"
],
"limit": 3,
"remote": true
}Advanced: edit the raw request, or copy it as curl
curl -X POST https://api.jobspipe.dev/v1/sandbox/jobs/search \
-H "Content-Type: application/json" \
-d '{"job_title_or":["software engineer"],"remote":true,"limit":5}'For live results, get a free key (1,000 jobs/month) and swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header - request and response shapes are identical.
Frequently Asked Questions
Does Lever have a public API?
Yes. Lever exposes a public postings endpoint at api.lever.co/v0/postings/{company} with no auth required, and it returns a JSON array of every public job at that company. It is one of the cleanest public APIs in the ATS landscape: simple, fast, and no setup. Each posting includes an id, the title in a text field, categories for team, location, and commitment, and a hostedUrl.
Does the Lever API return salary data?
No, Lever does not expose salary structurally. The postings endpoint gives you location as a free-text string, no compensation fields at all, and the full job description as HTML in the description field. If you need parsed pay ranges you either extract them from the description yourself or use an aggregator that does it: JobsPipe ships the same structured compensation object for Lever that it ships for every other source.
When should I use a third-party Lever API instead of Lever's own?
For a single company where the native shape is fine, hit Lever directly and skip the wrapper. A third-party layer earns its place when you need to query every Lever-hosted company without knowing each slug, parsed salary, normalized location resolved to city, country, and coordinates, cross-source dedup so a job mirrored to Indeed becomes one record with both source_refs, or webhook delivery with signed payloads instead of polling.

