How to Scrape Lever Data: Complete Guide for 2026
Tutorials

How to Scrape Lever Data: Complete Guide for 2026

Learn how to scrape Lever job listings using Python and Node.js with AlterLab's API, handling anti-bot measures and extracting structured data.

4 min read
4 views

AlterLab handles this automaticallyscrape any URL with one API call. No infrastructure required.

Try it free

This guide covers extracting publicly accessible data. Always review a site's robots.txt and Terms of Service before scraping.

TL;DR

Use AlterLab's API to fetch Lever job pages with a single request in Python or Node.js. The service handles proxy rotation, header management, and JavaScript rendering automatically. Extract fields like title, location, and date via CSS selectors or the Cortex structured extraction API.

Why collect jobs data from Lever?

Lever hosts job postings for thousands of tech companies. Analyzing this data enables:

  • Market research: identify hiring trends and skill demand across industries.
  • Competitive intelligence: monitor where rivals are expanding teams.
  • Talent sourcing: build pipelines for recruiting or outreach campaigns.

Technical challenges

Lever employs standard anti-bot measures: rate limiting by IP, header validation (User-Agent, Accept), and occasional JavaScript checks that serve a challenge page to headless browsers lacking proper fingerprints. Raw HTTP requests often receive HTTP 429 or a blank HTML shell. AlterLab's Smart Rendering API mitigates these by rotating residential proxies, setting realistic headers, and escalating to a full browser when needed, all while staying within the site's public access boundaries.

99.2%Success Rate
1.2sAvg Response
$0.002Per Request (T3)

Quick start with AlterLab API

First, install the SDK. See the Getting started guide for detailed setup.

Python

Python
import alterlab

client = alterlab.Client("YOUR_API_KEY")
response = client.scrape("https://jobs.lever.co/acme")
print(response.text[:500])

Node.js

JAVASCRIPT
import { AlterLab } from "alterlab";

const client = new AlterLab({ apiKey: "YOUR_API_KEY" });
const response = await client.scrape("https://jobs.lever.co/acme");
console.log(response.text.slice(0, 500));

cURL

Bash
curl -X POST https://api.alterlab.io/v1/scrape \
  -H "X-API-Key: YOUR_KEY" \
  -d '{"url": "https://jobs.lever.co/acme"}'

These snippets retrieve the raw HTML of a Lever jobs page. Adjust the URL to target a specific company or search query.

Extracting structured data

Once you have the HTML, parse it with a library like BeautifulSoup (Python) or cheerio (Node.js). Common selectors for Lever job cards:

  • Job title: .posting-title
  • Company: .company
  • Location: .location
  • Posted date: .posted-date
  • Application link: a[href*="/jobs/"] (relative to https://lever.co)

Example Python extraction:

Python
from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, "html.parser")
jobs = []
for card in soup.select(".posting"):
    jobs.append({
        "title": card.select_one(".posting-title").get_text(strip=True),
        "company": card.select_one(".company").get_text(strip=True),
        "location": card.select_one(".location").get_text(strip=True),
        "date": card.select_one(".posted-date").get_text(strip=True),
        "url": "https://lever.co" + card.select_one("a")["href"]
    })
print(jobs[:3])

Structured JSON extraction with Cortex

AlterLab's Cortex API lets you define a JSON schema and receive typed data without writing parsers. This is useful when the page structure changes frequently.

Python
import alterlab

client = alterlab.Client("YOUR_API_KEY")
result = client.extract(
    url="https://jobs.lever.co/acme",
    schema={
        "type": "array",
        "items": {
            "type": "object",
            "properties": {
                "title": {"type": "string"},
                "company": {"type": "string"},
                "location": {"type": "string"},
                "datePosted": {"type": "string", "format": "date"},
                "applyUrl": {"type": "string", "format": "uri"}
            },
            "required": ["title", "company", "location"]
        }
    }
)
print(result.data)

The Cortex endpoint internally uses a headless browser, runs the schema‑matching model, and returns validated JSON. For Lever, this approach reduces boilerplate and handles pagination via repeated calls with different offset parameters.

Cost breakdown

AlterLab charges per successful request. The table below shows the cost at each processing tier. For Lever, start at T1; if the request fails due to anti‑bot measures, the API promotes automatically to the next tier and you only pay for the tier that succeeds.

TierUse CaseCost per RequestCost per 1,000Requests per $1
T1 — CurlStatic HTML, no JS needed$0.0002$0.205,000
T2 — HTTPStandard pages with headers$0.0003$0.303,333
T3 — StealthProtected pages, anti-bot active$0.002$2.00500
T4 — BrowserFull JS rendering required$0.004$4.00250
T5 — CAPTCHACAPTCHA solving + JS rendering$0.02$20.0050

See the AlterLab pricing page for the latest rates and volume discounts.

Share

Was this article helpful?

Frequently Asked Questions

Scraping publicly accessible job listings is generally permissible under precedents like hiQ v LinkedIn, but you must review Lever's robots.txt and Terms of Service, apply rate limiting, and avoid private or gated data.
Lever employs standard anti-bot protections such as rate limiting, header checks, and occasional JavaScript challenges that can block simple HTTP requests.
AlterLab's pricing starts at $0.0002 per request for static pages (T1) and goes up to $0.004 for full browser rendering (T4); the API auto-escalates so you only pay for the tier that succeeds.