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

Scrape every active job posting from any Lever.co board — titles, locations, teams, departments, workplace type, full descriptions, responsibilities, and salary ranges. Live from the official Lever API. Filter by title, location, workplace type, country, date, or remote at the source.

- **URL**: https://apify.com/schnellscrapers/lever-jobs-scraper.md
- **Developed by:** [Nate Schnell](https://apify.com/schnellscrapers) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 postings

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### What does Lever Jobs Scraper do?

**Lever Jobs Scraper** pulls every active job posting from any company's Lever.co careers board, live from the official Lever Postings API. Paste the board slug (e.g. `spotify`, `coupa`, `aircall`) or any Lever URL, get back a clean dataset of every posting — titles, locations, teams, departments, workplace type, full HTML and plain-text descriptions, structured responsibilities and requirements, and salary ranges where Lever exposes them. Built for recruiters tracking competitor hiring, lead-gen pipelines targeting hiring companies, job aggregators backfilling postings, and analysts mapping talent demand.

### What data can you extract from Lever?

Each emitted record has 24 fields. The most useful ones:

- **Identity** — `id` (Lever posting UUID), `board` (the slug), `companyName` (when mapped via `companyMap`), `hostedUrl`, `applyUrl`
- **Title** — `title`
- **Location** — `location` (primary), `allLocations[]` (every city Lever lists), `country` (2-letter code)
- **Workplace** — `workplaceType` (`remote` / `hybrid` / `onsite` / `unspecified`)
- **Team & department** — `team`, `department`, `commitment` (Full-time, Intern, Contract, …), `level`
- **Timing** — `createdAt` (ISO 8601, converted from Lever's epoch ms)
- **Description** — `description` (HTML, ready to render), `descriptionPlain` (text, HTML stripped)
- **Benefits / EEO / pay disclosures** — `additional` (HTML), `additionalPlain` (text)
- **Responsibilities & requirements** — `lists[]`, an array of structured sub-sections like _What you'll do_, _Requirements_, _Nice to have_. Each entry has the section header (`text`), the HTML content, and optional plain text.
- **Salary** — `salaryRange` (`min`, `max`, `currency`, `interval`) and `salaryDescription` when Lever exposes them — typically present on ~1 in 3 US/Canada postings.

Every field is preserved with the original Lever values, so records join back cleanly to Lever's UUIDs.

### How to use Lever Jobs Scraper

1. Create a free Apify account.
2. Open **Lever Jobs Scraper** and click **Try for free**.
3. Paste one or more board slugs or Lever URLs into **Lever boards**. The slug is the segment that follows `jobs.lever.co/` in a company's careers URL — e.g. `https://jobs.lever.co/spotify` → `spotify`.
4. (Optional) Add filters: `Title includes`, `Location excludes`, `Workplace type`, `Country includes`, `Only postings created after`, `Remote only`, etc. Filters run before billing.
5. (Optional) Map slug → company name via **Company name overrides** (e.g. `spotify=Spotify`) so the `companyName` column is populated. Lever's API doesn't return a company name.
6. Click **Save & Start**. Each board returns in 1–10 seconds regardless of size — one HTTP call per board.
7. Download results from the **Storage** tab in JSON, CSV, Excel, XML, or HTML.

### How much does it cost?

Lever Jobs Scraper is **pay-per-result**: you're billed one `posting` event per emitted record, regardless of how many boards you query. Postings filtered out by your input filters are not billed.

The per-posting price scales down as your Apify plan goes up:

| Your Apify plan | Per posting | Per 1,000 |
|---|---:|---:|
| Free | $0.00095 | **$0.95** |
| Starter | $0.00090 | $0.90 |
| Scale | $0.00080 – $0.00070 | $0.80 – $0.70 |
| Business / Enterprise | $0.00060 – $0.00050 | $0.60 – $0.50 |

The Apify Free plan includes **$5/month of platform credit** — enough for roughly 5,000 free postings before you'd need to top up. There's no minimum spend per run; pull 1 posting or 50,000.

Cost tip: switching `includeContent`, `includeAdditional`, and `includeLists` to `false` doesn't change the per-posting price, but it cuts dataset size by ~80% if you only need titles, locations, and links.

### Input

Required: `boards` (array of slugs or URLs). Every other field is optional.

```json
{
  "boards": ["spotify", "coupa", "https://jobs.lever.co/aircall"],
  "companyMap": ["spotify=Spotify", "coupa=Coupa", "aircall=Aircall"],
  "includeContent": true,
  "includeAdditional": true,
  "includeLists": true,
  "includeSalary": true,
  "parseContent": false,
  "titleFilter": ["engineer", "designer"],
  "locationExcludeFilter": ["india"],
  "workplaceTypeFilter": ["remote", "hybrid"],
  "departmentFilter": ["engineering"],
  "remoteOnly": false,
  "createdAfter": "2026-04-01",
  "maxItems": 200
}
````

See the **Input** tab for every field with help text. Common patterns:

- Pull *everything* from one company: `{ "boards": ["spotify"] }`
- Just titles and links (cheap fast pull): `{ "boards": ["coupa"], "includeContent": false, "includeAdditional": false, "includeLists": false }`
- Remote engineering jobs across several companies: `{ "boards": ["spotify","aircall","coupa"], "remoteOnly": true, "departmentFilter": ["engineering"] }`
- LLM-friendly text dataset: `{ "boards": ["spotify"], "parseContent": true }`
- US-only roles posted this month: `{ "boards": ["spotify"], "countryFilter": ["US"], "createdAfter": "2026-05-01" }`

### Output

One record per active posting. Sample (truncated):

```json
{
  "id": "1ff4a4e3-897c-4eab-9ee2-aa7d1d07a9d6",
  "board": "spotify",
  "companyName": "Spotify",
  "title": "Account Executive - Backstage",
  "hostedUrl": "https://jobs.lever.co/spotify/1ff4a4e3-897c-4eab-9ee2-aa7d1d07a9d6",
  "applyUrl": "https://jobs.lever.co/spotify/1ff4a4e3-897c-4eab-9ee2-aa7d1d07a9d6/apply",
  "location": "Toronto",
  "allLocations": ["Toronto"],
  "country": "CA",
  "workplaceType": "hybrid",
  "team": "Platform",
  "department": "Operations and Business Support",
  "commitment": "Permanent",
  "level": null,
  "createdAt": "2026-03-12T17:10:21.350Z",
  "description": "<div><span>As an Account Executive for Spotify Backstage ...</span></div>",
  "descriptionPlain": "As an Account Executive for Spotify Backstage ...",
  "additional": "<div>The Canada base range for this position is $103,628 – $148,040 CAD plus equity ...</div>",
  "additionalPlain": "The Canada base range for this position is $103,628 – $148,040 CAD plus equity ...",
  "lists": [
    {
      "text": "What You'll Do",
      "content": "<ul><li>Identify and pursue new business opportunities ...</li></ul>",
      "contentPlain": null
    }
  ],
  "salaryRange": null,
  "salaryDescription": null,
  "scrapedAt": "2026-05-22T12:45:18.054Z",
  "source": "https://api.lever.co/v0/postings/spotify?mode=json"
}
```

Empty boards return zero records (Lever responds 200 with `[]`). Boards that don't exist or have moved off Lever log a warning and skip — your run isn't billed for them.

### Integrations

Lever Jobs Scraper works with the full Apify integration set: **Make**, **Zapier**, **n8n**, **Slack**, **Google Drive**, **GitHub**, **Airbyte**, scheduled runs, and the Apify API. Trigger runs from your ATS or CRM, push fresh postings into a Sheet or a database, or fan out webhook notifications when new postings appear. See [Apify integrations](https://docs.apify.com/platform/integrations).

### Related actors

- [Greenhouse Jobs Scraper](https://apify.com/schnellscrapers/greenhouse-jobs-scraper) — for companies hosted on Greenhouse instead of Lever (Airbnb, Stripe, Figma).
- [Ashby Jobs Scraper](https://apify.com/schnellscrapers/ashby-jobs-scraper) — for companies hosted on Ashby instead of Lever (Linear, Vanta, Ramp).
- [Indeed Jobs Scraper](https://apify.com/schnellscrapers/indeed-jobs-scraper) — for jobs hosted on Indeed (millions of postings across all employers, not just Lever-using companies).
- For multi-ATS aggregation across Workday + Lever + Ashby + Greenhouse and 50 other systems, the closest fit on the Store is `fantastic-jobs/career-site-job-listing-api` — it's a DB query against a pre-crawled index, not a live scrape.

### FAQ

#### How does Lever Jobs Scraper work?

It hits `https://api.lever.co/v0/postings/{slug}?mode=json` — Lever's official public Postings API, documented at [github.com/lever/postings-api](https://github.com/lever/postings-api) — and normalizes the response into the dataset schema. No login, no proxy, no headless browser. Pass `eu: true` to query `api.eu.lever.co` for EU-resident boards.

#### Can I use Lever Jobs Scraper as an API?

Yes. Trigger a run via the Apify REST API:

```
POST https://api.apify.com/v2/acts/schnellscrapers~lever-jobs-scraper/runs?token=<APIFY_TOKEN>
```

The Apify console also exposes a `run-sync-get-dataset-items` endpoint that returns records inline when the run finishes — handy for synchronous integrations.

#### Can I use it in Python or Node.js?

```python
from apify_client import ApifyClient
client = ApifyClient(token="<APIFY_TOKEN>")
run = client.actor("schnellscrapers/lever-jobs-scraper").call(run_input={
    "boards": ["spotify", "coupa"],
    "companyMap": ["spotify=Spotify", "coupa=Coupa"],
    "titleFilter": ["engineer"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["companyName"], item["location"])
```

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('schnellscrapers/lever-jobs-scraper').call({
  boards: ['spotify', 'coupa'],
  companyMap: ['spotify=Spotify', 'coupa=Coupa'],
  titleFilter: ['engineer'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Is it legal to scrape Lever?

Lever job boards are public-facing and the Postings API is documented for third-party use at [github.com/lever/postings-api](https://github.com/lever/postings-api) — companies use the same endpoint to embed their careers page. Lever Jobs Scraper hits only the official API and respects `robots.txt`. As with any scraping, the data you collect is what's already publicly available; storing or republishing it must comply with the hiring company's terms and any applicable privacy laws (GDPR, CCPA).

#### Why is my company's board returning a 404?

The slug is the path segment in the company's Lever careers URL — `jobs.lever.co/<slug>`. Some companies have moved off Lever or use a custom-domain alias that maps to a different slug. Open the company's careers page and check the URL the listings load from. If you see a 404 in the logs, the run for that board is skipped at no charge.

#### Why is `companyName` null?

Lever's API doesn't return a company name — only the slug. Pass a `companyMap` entry like `spotify=Spotify` to label the records yourself. The slug is always present in the `board` field if you want to map externally.

#### How fresh is the data?

Live — every run hits Lever's API directly. Compare to DB-aggregator actors (e.g. `fantastic-jobs/career-site-job-listing-api`), which have an indexing lag of up to 30 minutes per their docs.

#### Does it return salary ranges?

Yes, when Lever exposes them. Salary fields are most consistently populated on US, Canada, and California-headquartered postings due to pay-transparency laws. Set `includeSalary: false` to drop them from the output.

#### Does it support EU Lever boards?

Yes. Set `eu: true` to query `api.eu.lever.co` instead of the global host. The global host transparently serves most EU boards too, so this is rarely needed.

### Your feedback

Found a bug, missing a field, or want a new filter? Open an issue on the actor's Issues tab or email me. Every report gets read.

# Actor input Schema

## `boards` (type: `array`):

Companies to pull postings from. Paste the board slug (e.g. `spotify`, `coupa`) or any Lever URL — `https://jobs.lever.co/spotify`, `https://api.lever.co/v0/postings/spotify`. The slug is the segment that follows `jobs.lever.co/` in a company's careers URL.

## `companyMap` (type: `array`):

Optional. Map board slugs to human-readable company names so the `companyName` column is populated (Lever's API doesn't return it). One entry per line in `slug=Company Name` format (e.g. `spotify=Spotify`, `insomniacookies=Insomnia Cookies`).

## `eu` (type: `boolean`):

Query `api.eu.lever.co` instead of the global `api.lever.co`. The global host serves every board; flip this only if you specifically need the EU endpoint.

## `includeContent` (type: `boolean`):

Include the main posting body (`description` HTML + `descriptionPlain` text) in each record. Turn off to shrink results by ~80% when you only need titles, locations, and links.

## `includeAdditional` (type: `boolean`):

Include Lever's `additional` section — usually benefits, EEO statements, and pay transparency disclosures (HTML + plain text).

## `includeLists` (type: `boolean`):

Include Lever's `lists` array — the bulleted sub-sections like "What you'll do", "Requirements", "Nice to have". Each entry has the section header, the HTML content, and (when `parseContent` is on) plain text.

## `includeSalary` (type: `boolean`):

Include `salaryRange` (min/max/currency/interval) and `salaryDescription` when Lever exposes them. Approximately 1 in 3 postings carry salary data depending on the board.

## `parseContent` (type: `boolean`):

Re-run HTML stripping over `description`, `additional`, and each `lists[].content` to populate `descriptionPlain`, `additionalPlain`, and `lists[].contentPlain` from the same source. Useful when feeding records into LLMs or full-text search.

## `titleFilter` (type: `array`):

Case-insensitive substring match against the posting title. A record is kept if any term matches (e.g. `engineer`, `designer`). Leave empty to keep all titles.

## `titleExcludeFilter` (type: `array`):

Drop postings whose title contains any of these substrings (e.g. `intern`, `manager`).

## `locationFilter` (type: `array`):

Substring match against the primary location and the full `allLocations` array (e.g. `new york`, `berlin`, `remote`).

## `locationExcludeFilter` (type: `array`):

Drop postings whose location matches any term (e.g. `india` to exclude India-based postings).

## `teamFilter` (type: `array`):

Substring match against `categories.team` (e.g. `platform`, `growth`).

## `departmentFilter` (type: `array`):

Substring match against `categories.department` (e.g. `engineering`, `design`, `sales`).

## `commitmentFilter` (type: `array`):

Substring match against `categories.commitment` (e.g. `full-time`, `intern`, `contract`). Free-form text in Lever — partial matches work best.

## `workplaceTypeFilter` (type: `array`):

Exact match against `workplaceType`. Valid values: `remote`, `hybrid`, `onsite`, `unspecified`.

## `countryFilter` (type: `array`):

Two-letter country codes Lever reports (e.g. `US`, `GB`, `DE`). Case-insensitive exact match.

## `companyFilter` (type: `array`):

Substring match against the company name you assigned via `companyMap`. Useful when one run covers many boards.

## `descriptionContains` (type: `array`):

Substring match across the description, additional, and plain-text fields (e.g. `python`, `kubernetes`, `visa sponsorship`). Auto-enables `includeContent` if both content fetches are off.

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

Keep only postings whose `workplaceType` is `remote` or whose location string contains `remote`. Hybrid is excluded.

## `createdAfter` (type: `string`):

ISO 8601 date or timestamp (e.g. `2026-05-01` or `2026-05-01T00:00:00Z`). Drops postings whose `createdAt` is older. Leave blank to keep every active posting.

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

Hard cap on total records emitted across all boards. Useful for cost-bounded test runs. Leave at 0 to emit every matching posting.

## `maxItemsPerBoard` (type: `integer`):

Per-board cap on emitted records. Leave at 0 to emit every matching posting from each board.

## `dryRun` (type: `boolean`):

Fetch and parse the boards but do not write to the dataset. Use to preview without spending credits.

## Actor input object example

```json
{
  "boards": [
    "spotify",
    "coupa"
  ],
  "companyMap": [],
  "eu": false,
  "includeContent": true,
  "includeAdditional": true,
  "includeLists": true,
  "includeSalary": true,
  "parseContent": false,
  "titleFilter": [],
  "titleExcludeFilter": [],
  "locationFilter": [],
  "locationExcludeFilter": [],
  "teamFilter": [],
  "departmentFilter": [],
  "commitmentFilter": [],
  "workplaceTypeFilter": [],
  "countryFilter": [],
  "companyFilter": [],
  "descriptionContains": [],
  "remoteOnly": false,
  "maxItems": 0,
  "maxItemsPerBoard": 0,
  "dryRun": false
}
```

# Actor output Schema

## `postings` (type: `string`):

Default dataset of posting records. Key fields: title, companyName, location, workplaceType, department, hostedUrl, description, salaryRange, createdAt.

# 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 = {
    "boards": [
        "spotify",
        "coupa"
    ],
    "companyMap": [],
    "titleFilter": [],
    "titleExcludeFilter": [],
    "locationFilter": [],
    "locationExcludeFilter": [],
    "teamFilter": [],
    "departmentFilter": [],
    "commitmentFilter": [],
    "workplaceTypeFilter": [],
    "countryFilter": [],
    "companyFilter": [],
    "descriptionContains": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("schnellscrapers/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 = {
    "boards": [
        "spotify",
        "coupa",
    ],
    "companyMap": [],
    "titleFilter": [],
    "titleExcludeFilter": [],
    "locationFilter": [],
    "locationExcludeFilter": [],
    "teamFilter": [],
    "departmentFilter": [],
    "commitmentFilter": [],
    "workplaceTypeFilter": [],
    "countryFilter": [],
    "companyFilter": [],
    "descriptionContains": [],
}

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

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

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

```

## CLI example

```bash
echo '{
  "boards": [
    "spotify",
    "coupa"
  ],
  "companyMap": [],
  "titleFilter": [],
  "titleExcludeFilter": [],
  "locationFilter": [],
  "locationExcludeFilter": [],
  "teamFilter": [],
  "departmentFilter": [],
  "commitmentFilter": [],
  "workplaceTypeFilter": [],
  "countryFilter": [],
  "companyFilter": [],
  "descriptionContains": []
}' |
apify call schnellscrapers/lever-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=schnellscrapers/lever-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Lever Jobs Scraper",
        "description": "Scrape every active job posting from any Lever.co board — titles, locations, teams, departments, workplace type, full descriptions, responsibilities, and salary ranges. Live from the official Lever API. Filter by title, location, workplace type, country, date, or remote at the source.",
        "version": "0.1",
        "x-build-id": "iZcGruCDvKyPMUMSc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/schnellscrapers~lever-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-schnellscrapers-lever-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/schnellscrapers~lever-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-schnellscrapers-lever-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/schnellscrapers~lever-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-schnellscrapers-lever-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "boards"
                ],
                "properties": {
                    "boards": {
                        "title": "Lever boards",
                        "type": "array",
                        "description": "Companies to pull postings from. Paste the board slug (e.g. `spotify`, `coupa`) or any Lever URL — `https://jobs.lever.co/spotify`, `https://api.lever.co/v0/postings/spotify`. The slug is the segment that follows `jobs.lever.co/` in a company's careers URL.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "companyMap": {
                        "title": "Company name overrides",
                        "type": "array",
                        "description": "Optional. Map board slugs to human-readable company names so the `companyName` column is populated (Lever's API doesn't return it). One entry per line in `slug=Company Name` format (e.g. `spotify=Spotify`, `insomniacookies=Insomnia Cookies`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "eu": {
                        "title": "Use EU API region",
                        "type": "boolean",
                        "description": "Query `api.eu.lever.co` instead of the global `api.lever.co`. The global host serves every board; flip this only if you specifically need the EU endpoint.",
                        "default": false
                    },
                    "includeContent": {
                        "title": "Include job description",
                        "type": "boolean",
                        "description": "Include the main posting body (`description` HTML + `descriptionPlain` text) in each record. Turn off to shrink results by ~80% when you only need titles, locations, and links.",
                        "default": true
                    },
                    "includeAdditional": {
                        "title": "Include benefits / extras",
                        "type": "boolean",
                        "description": "Include Lever's `additional` section — usually benefits, EEO statements, and pay transparency disclosures (HTML + plain text).",
                        "default": true
                    },
                    "includeLists": {
                        "title": "Include responsibilities & requirements",
                        "type": "boolean",
                        "description": "Include Lever's `lists` array — the bulleted sub-sections like \"What you'll do\", \"Requirements\", \"Nice to have\". Each entry has the section header, the HTML content, and (when `parseContent` is on) plain text.",
                        "default": true
                    },
                    "includeSalary": {
                        "title": "Include salary fields",
                        "type": "boolean",
                        "description": "Include `salaryRange` (min/max/currency/interval) and `salaryDescription` when Lever exposes them. Approximately 1 in 3 postings carry salary data depending on the board.",
                        "default": true
                    },
                    "parseContent": {
                        "title": "Re-derive plain text from HTML",
                        "type": "boolean",
                        "description": "Re-run HTML stripping over `description`, `additional`, and each `lists[].content` to populate `descriptionPlain`, `additionalPlain`, and `lists[].contentPlain` from the same source. Useful when feeding records into LLMs or full-text search.",
                        "default": false
                    },
                    "titleFilter": {
                        "title": "Title includes",
                        "type": "array",
                        "description": "Case-insensitive substring match against the posting title. A record is kept if any term matches (e.g. `engineer`, `designer`). Leave empty to keep all titles.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "titleExcludeFilter": {
                        "title": "Title excludes",
                        "type": "array",
                        "description": "Drop postings whose title contains any of these substrings (e.g. `intern`, `manager`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locationFilter": {
                        "title": "Location includes",
                        "type": "array",
                        "description": "Substring match against the primary location and the full `allLocations` array (e.g. `new york`, `berlin`, `remote`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locationExcludeFilter": {
                        "title": "Location excludes",
                        "type": "array",
                        "description": "Drop postings whose location matches any term (e.g. `india` to exclude India-based postings).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "teamFilter": {
                        "title": "Team includes",
                        "type": "array",
                        "description": "Substring match against `categories.team` (e.g. `platform`, `growth`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "departmentFilter": {
                        "title": "Department includes",
                        "type": "array",
                        "description": "Substring match against `categories.department` (e.g. `engineering`, `design`, `sales`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "commitmentFilter": {
                        "title": "Commitment includes",
                        "type": "array",
                        "description": "Substring match against `categories.commitment` (e.g. `full-time`, `intern`, `contract`). Free-form text in Lever — partial matches work best.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "workplaceTypeFilter": {
                        "title": "Workplace type",
                        "type": "array",
                        "description": "Exact match against `workplaceType`. Valid values: `remote`, `hybrid`, `onsite`, `unspecified`.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countryFilter": {
                        "title": "Country includes",
                        "type": "array",
                        "description": "Two-letter country codes Lever reports (e.g. `US`, `GB`, `DE`). Case-insensitive exact match.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "companyFilter": {
                        "title": "Company includes",
                        "type": "array",
                        "description": "Substring match against the company name you assigned via `companyMap`. Useful when one run covers many boards.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "descriptionContains": {
                        "title": "Description contains",
                        "type": "array",
                        "description": "Substring match across the description, additional, and plain-text fields (e.g. `python`, `kubernetes`, `visa sponsorship`). Auto-enables `includeContent` if both content fetches are off.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "remoteOnly": {
                        "title": "Remote only",
                        "type": "boolean",
                        "description": "Keep only postings whose `workplaceType` is `remote` or whose location string contains `remote`. Hybrid is excluded.",
                        "default": false
                    },
                    "createdAfter": {
                        "title": "Only postings created after",
                        "type": "string",
                        "description": "ISO 8601 date or timestamp (e.g. `2026-05-01` or `2026-05-01T00:00:00Z`). Drops postings whose `createdAt` is older. Leave blank to keep every active posting."
                    },
                    "maxItems": {
                        "title": "Maximum records (total)",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Hard cap on total records emitted across all boards. Useful for cost-bounded test runs. Leave at 0 to emit every matching posting.",
                        "default": 0
                    },
                    "maxItemsPerBoard": {
                        "title": "Maximum records per board",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Per-board cap on emitted records. Leave at 0 to emit every matching posting from each board.",
                        "default": 0
                    },
                    "dryRun": {
                        "title": "Dry run",
                        "type": "boolean",
                        "description": "Fetch and parse the boards but do not write to the dataset. Use to preview without spending credits.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
