# Lever Jobs Scraper (`anyxsolutions/lever-jobs-scraper`) Actor

Scrape open jobs from any company's Lever job board: titles, teams, departments, locations, remote/hybrid status, posting dates, full descriptions, and published salary ranges. Paste a board URL, filtered or not, and get clean JSON. No login, no API key, no proxy.

- **URL**: https://apify.com/anyxsolutions/lever-jobs-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![banner](https://anyx.solutions/banners/lever-jobs-scraper.png)

## Lever Jobs Scraper

**Every open job on any company's Lever job board — with full descriptions and published salary ranges — as clean JSON.**

Thousands of companies, from Palantir, Spotify and Zoox to fast-growing startups, post their open
positions on Lever. This Actor reads any of those job boards and returns every open job: title,
team, department, level, commitment, location, remote/hybrid/on-site status, posting date, the
full job description as HTML and plain text, the responsibilities and requirements as clean lists,
and the salary range the company publishes. It works on boards in both of Lever's regions
(`jobs.lever.co` and `jobs.eu.lever.co`) and respects the filters in a board URL. Paste a board
URL; there is no login, no API key, and no proxy to configure. Built for job aggregators,
recruiting and talent-intelligence teams, salary benchmarking, and hiring-signal tracking.

### ⚡ Quick start

```json
{
  "startUrls": [{ "url": "https://jobs.lever.co/zoox" }],
  "maxItems": 5
}
```

### 🧩 Input

| Field                | Type    | Required | Default                      | Description                                                                                                                                                 |
| -------------------- | ------- | -------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | array   | yes      | —                            | Lever job board URLs (`jobs.lever.co/<company>` or `jobs.eu.lever.co/<company>`), filtered board URLs, or single posting URLs (`…/<company>/<posting-id>`). |
| `maxItems`           | integer | no       | —                            | Maximum number of jobs per start URL. The input form starts at 5; leave it empty to get the whole board.                                                    |
| `proxyConfiguration` | object  | no       | `{ "useApifyProxy": false }` | Proxy settings. Lever job boards need no proxy.                                                                                                             |

**Finding a company's board.** Open the company's careers page and look for a link to
`jobs.lever.co/<company>` or `jobs.eu.lever.co/<company>` — every "Apply" button on a
Lever-powered careers site points there.

**Filtering.** Click the department, team, location, work type or workplace filters on the board,
then copy the URL from the address bar, for example
`https://jobs.lever.co/zoox?department=Software&workplaceType=hybrid`. The Actor returns exactly
the jobs that filtered board shows.

### 📤 Output

Each open job is one dataset row.

#### Fields

| Field                   | Type   | Description                                                                                                        |
| ----------------------- | ------ | ------------------------------------------------------------------------------------------------------------------ |
| `id`                    | string | Lever posting ID.                                                                                                  |
| `title`                 | string | Job title.                                                                                                         |
| `company`               | string | The company's name in Lever URLs.                                                                                  |
| `boardUrl`              | string | The company's public job board.                                                                                    |
| `url`                   | string | The job's public page.                                                                                             |
| `applyUrl`              | string | The job's application form.                                                                                        |
| `team`                  | string | Team.                                                                                                              |
| `department`            | string | Department, when the company uses them.                                                                            |
| `level`                 | string | Seniority level, when the company sets it.                                                                         |
| `commitment`            | string | Work type, such as Full-time, Part-time, Contract or Intern.                                                       |
| `location`              | string | Primary location as the company wrote it.                                                                          |
| `allLocations`          | array  | Every location the job is open in.                                                                                 |
| `workplaceType`         | string | `onsite`, `hybrid` or `remote`.                                                                                    |
| `country`               | string | Country code of the primary location.                                                                              |
| `createdAt`             | string | When the job was posted (ISO 8601).                                                                                |
| `salary`                | object | Published salary range: `min`, `max`, `currency` and `interval` (for example `per-year-salary`). `null` when none. |
| `salaryDescriptionText` | string | The company's note on pay and benefits, when published.                                                            |
| `lists`                 | array  | The job's bullet-point sections (responsibilities, requirements, …), each with a `title` and its `items`.          |
| `descriptionHtml`       | string | Full job description as HTML, including the bullet-point sections and closing notes.                               |
| `descriptionText`       | string | Full job description as plain text.                                                                                |

<details><summary>Example output</summary>

```json
{
  "id": "e8a190f0-7a89-4c11-a6a0-452ff6234749",
  "title": "Administrative Business Partner, Floater",
  "company": "zoox",
  "boardUrl": "https://jobs.lever.co/zoox",
  "url": "https://jobs.lever.co/zoox/e8a190f0-7a89-4c11-a6a0-452ff6234749",
  "applyUrl": "https://jobs.lever.co/zoox/e8a190f0-7a89-4c11-a6a0-452ff6234749/apply",
  "team": "Executive Office",
  "department": "Executive Office",
  "level": null,
  "commitment": "Full-time",
  "location": "Foster City, CA",
  "allLocations": ["Foster City, CA"],
  "workplaceType": "hybrid",
  "country": "US",
  "createdAt": "2026-10-06T17:27:44.932Z",
  "salary": {
    "min": 123000,
    "max": 168000,
    "currency": "USD",
    "interval": "per-year-salary"
  },
  "salaryDescriptionText": "Base Salary Range\n\nThere are three major components to compensation for this position: sal …",
  "lists": [
    {
      "title": "Responsibilities",
      "items": [
        "Scheduling team and cross-functional meetings",
        "Assisting with team off-sites and events",
        "…"
      ]
    },
    {
      "title": "Qualifications",
      "items": [
        "4+ years of executive assistant experience",
        "Strong organizational skills and appreciation for the challenges of supporting a growing team of diverse personalities and programs",
        "…"
      ]
    }
  ],
  "descriptionHtml": "<div><span style=\"font-size: 12pt;\">Zoox is building the future of tra …",
  "descriptionText": "Zoox is building the future of transportation. To do that, we’re also building an incredib …"
}
```

</details>

### 💡 Use cases

- **Job aggregation** — feed job boards, newsletters and niche listing sites with fresh postings from the companies you track.
- **Salary benchmarking** — collect published pay ranges by title, team, location and company.
- **Hiring signals** — watch which teams a company is growing, where, and whether the roles are remote, for sales prospecting or investment research.
- **Recruiting intelligence** — monitor competitors' open roles and how long they stay open.

### ❓ FAQ

- **Do I need an API key or a Lever account?** No. The Actor reads the same public job boards any candidate sees.
- **Do I need a proxy?** No. It runs without one by default.
- **Does it work for boards on `jobs.eu.lever.co`?** Yes. Paste the board URL as it appears; the Actor reads it from the right region.
- **Why is the salary empty for some jobs?** Companies choose whether to publish pay, usually where pay-transparency laws require it. `salary` is `null` when the job lists none.
- **Can I scrape many companies at once?** Yes. Add one board URL per company to `startUrls`; `maxItems` applies to each one separately.
- **Why did a run return fewer jobs than expected?** The board may list fewer open jobs, a filter in the URL may narrow it, or the company name may be wrong; the log says when a board is not found. Open an issue if something looks off.

### 🔗 More scrapers by Anyx

- [Greenhouse Jobs Scraper](https://apify.com/anyxsolutions/greenhouse-jobs-scraper)
- [Indeed Scraper](https://apify.com/anyxsolutions/indeed-scraper)
- [Glassdoor Scraper](https://apify.com/anyxsolutions/glassdoor-scraper)
- [Jobs.ch Scraper](https://apify.com/anyxsolutions/jobs-ch-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [lever.co](https://www.lever.co/)

# Actor input Schema

## `startUrls` (type: `array`):

Lever job board URLs, such as https://jobs.lever.co/zoox or https://jobs.eu.lever.co/quantinuum. Filtered boards (https://jobs.lever.co/zoox?department=Software) and single posting URLs (…/<company>/<posting-id>) work too.

## `maxItems` (type: `integer`):

Maximum number of jobs to return per start URL. Leave empty to get every open job on the board.

## `proxyConfiguration` (type: `object`):

Proxy settings. Lever's public job boards need no proxy.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://jobs.lever.co/zoox"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://jobs.lever.co/zoox"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/lever-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://jobs.lever.co/zoox" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/lever-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://jobs.lever.co/zoox"
    }
  ],
  "maxItems": 5
}' |
apify call anyxsolutions/lever-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anyxsolutions/lever-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5LTNhdo0tpcpWNjZd/builds/zGVIfK8Kg4UGSJWWE/openapi.json
