# Lever.co Jobs API - $2/1K (`om_kh/lever-jobs-api`) Actor

Get every open job from any Lever board. Pass company handles (the <handle> in jobs.lever.co/<handle>) and get clean rows: title, location, department, posting date and a canonical apply link. first 3 jobs free every run, then $2 per 1,000. No token to buy, no proxy.

- **URL**: https://apify.com/om\_kh/lever-jobs-api.md
- **Developed by:** [omar khandji](https://apify.com/om_kh) (community)
- **Categories:** Jobs, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.10 / 1,000 job listings

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Lever.co Jobs API — Every Open Job From Any Lever Board

> Pass up to 100 Lever company handles in one run, get every open role as clean rows. First **3 jobs free on every run**, then **$2 per 1,000**.

### Why this one

Most job scrapers ask you to buy a token, run a proxy, or fight an anti-bot
wall. This Actor reads the **Lever board endpoint directly** — the same one
the careers page itself calls. Three consequences:

1. **Nothing to buy.** No token, no cookie, no API key, nothing that expires.
2. **It does not break.** No HTML parsing, so a Lever redesign changes nothing.
3. **It stays cheap.** There is no upstream scraper to pay for, which is why the
   first 3 jobs of every run are free.

### What a run costs

**$2 per 1,000 job listings** — $0.002 each, and only for listings actually
delivered to you. There is no per-run fee: a run that finds nothing costs $0.

#### Ask for many companies at once

Measured on this Actor at ~35 open roles per company:

| Companies in one run | Jobs returned | You pay | Per job |
|---|---|---|---|
| 1 | 35 | **$0.05** | $0.0014 |
| 10 | 350 | **$0.68** | $0.0019 |
| 50 | 1,750 | **$3.48** | $0.0020 |

Batching does not change the price per job — it changes your wall clock. Fifty
companies asked together take one run instead of fifty, and the free allowance
below is the only thing that makes a small run cheaper per row.

Up to **100 companies per run**; **15 per HTTP request**, so a Standby/MCP call
answers inside Apify's five-minute ceiling. Split a larger list across requests.

### Free tier — 3 job listings on every run

**The first 3 job listings of every run are free.** Not a trial, not a first-run
coupon: it applies to every run you ever make, so you can wire this Actor into a
pipeline and evaluate it on your own target boards before a cent is billed.

Beyond the free 3 you pay **$0.002 per job listing** — $2 per 1,000 — and only
for listings actually delivered to you.

### What you pass

| Field | What it does |
|---|---|
| `leverCompanies` | Company handles — the `<handle>` in `jobs.lever.co/<handle>` |
| `keywords` | Keep only roles whose title matches, whole words only |
| `excludeKeywords` | Drop roles whose title matches |
| `locations` | Keep only roles in these locations |
| `remoteOnly` | Keep only remote roles |
| `postedAfter` | Keep only roles posted on or after this date |
| `maxTotalChargeUsd` | Hard ceiling on what one run can cost you |

Filters run **before** billing, so you are never charged for a row you filtered out.

### What you get per job

`title`, `location`, `department`, `posted_at`, `source_url` (a canonical apply
link), `handle`, `ats`, plus the normalised `function`, `seniority` and
`is_remote` fields the whole Vigia jobs family shares.

Duplicate roles are removed by apply link before billing: two handles belonging
to the same group cannot make you pay twice for one role.

### Call it as a live API

This Actor runs in **Standby**: the container is already up, so an HTTP request
answers in seconds — no cold start.

```
GET https://<standby-url>/?leverCompanies=spotify,netflix
```

Or POST the same JSON you would use as run input.

### For AI agents (MCP)

The same endpoint speaks the Model Context Protocol at `/mcp`. Agents get one
tool, `lever_jobs`, that returns a company's open roles in a single call — usable
from Claude, Cursor and any MCP client.

### Honest failure modes

A board that is missing, private or renamed is **reported, never raised**: one
bad handle in a list of twenty does not cost you the other nineteen. Each entry
in `boards` tells you what that handle returned, and you are billed only for
jobs actually delivered.

### The rest of the family

- [Careers Page Scraper](https://apify.com/om_kh/careers-page-scraper) — give a
  company **website** and it finds which ATS is behind it
- [ATS Jobs API](https://apify.com/om_kh/ats-jobs-api) — nine providers in one
  Actor, when you want the control
- [Greenhouse](https://apify.com/om_kh/greenhouse-jobs-api) ·
  [Lever](https://apify.com/om_kh/lever-jobs-api) ·
  [Ashby](https://apify.com/om_kh/ashby-jobs-api) ·
  [Workday](https://apify.com/om_kh/workday-jobs-api)

### Frequently asked questions

**Do I need a Lever account or API key?** No. The board endpoint this Actor
reads is the public one your own careers page uses.

**What does it cost to try?** Nothing. Every run gives you the first 3 jobs
free, and a run that returns fewer than that costs $0.

**How do I get jobs from a company website instead of a board handle?** Use the
[Careers Page Scraper](https://apify.com/om_kh/careers-page-scraper) — it detects
the ATS for you.

### Support

Found a bug or have a feature request? Use the **Issues** tab on this Actor's Apify Store page, or message the author (`om_kh`) directly through Apify — every report gets a reply.

# Actor input Schema

## `leverCompanies` (type: `array`):

Lever company handles - the <handle> in jobs.lever.co/<handle>. Returns every open role.

## `keywords` (type: `array`):

Keep only jobs whose title, department, company or location contains one of these words. Whole-word match. Filtering happens before billing - you are never charged for a job you filtered out.

## `excludeKeywords` (type: `array`):

Drop jobs matching any of these words, e.g. intern, senior, sales.

## `locations` (type: `array`):

Keep only jobs whose location contains one of these, e.g. Berlin, United Kingdom.

## `remoteOnly` (type: `boolean`):

Keep only roles whose location says remote, anywhere or distributed.

## `postedAfter` (type: `string`):

Keep only jobs posted on or after this date (YYYY-MM-DD). Jobs from providers that publish no date are kept.

## `maxTotalChargeUsd` (type: `number`):

Hard ceiling on what this run can bill you. The run stops delivering paid rows once it is reached.

## Actor input object example

```json
{
  "leverCompanies": [
    "spotify",
    "netflix"
  ],
  "remoteOnly": false,
  "maxTotalChargeUsd": 1
}
```

# Actor output Schema

## `report` (type: `string`):

A visual summary of delivery, charges, changes, and source issues.

## `results` (type: `string`):

Business-ready results in a sortable table. No JSON knowledge required.

## `csv` (type: `string`):

Results ready for spreadsheets, CRMs, and analytics tools.

## `excel` (type: `string`):

Results as an Excel workbook for non-technical teams.

## `runSummary` (type: `string`):

Machine-readable delivery, billing, and source diagnostics.

# 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 = {
    "leverCompanies": [
        "spotify",
        "netflix"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("om_kh/lever-jobs-api").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 = { "leverCompanies": [
        "spotify",
        "netflix",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("om_kh/lever-jobs-api").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 '{
  "leverCompanies": [
    "spotify",
    "netflix"
  ]
}' |
apify call om_kh/lever-jobs-api --silent --output-dataset

```

## MCP server setup

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

```

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/3Pe0tDnjH6BSIR5ec/builds/UIp0Ghel1f6XDyTOC/openapi.json
