# Lever Hiring Intelligence Scraper (`coregent/lever-hiring-intelligence-scraper`) Actor

Scrape public job postings from Lever-hosted career boards (global + EU) into clean, CSV-ready hiring-intelligence rows - no login, cookies, or paid APIs.

- **URL**: https://apify.com/coregent/lever-hiring-intelligence-scraper.md
- **Developed by:** [Delowar Munna](https://apify.com/coregent) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 job-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/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

## Lever Hiring Intelligence Scraper

![Lever Hiring Intelligence Scraper](https://raw.githubusercontent.com/coregentdevspace/lever-hiring-intelligence-scraper-assets/main/thumbnail-lever-hiring-intelligence-scraper.png)

Scrape **public job postings from Lever-hosted career boards** — by **board URL** or by **site slug** — and turn them into clean, flat, CSV-ready rows, plus lightweight **hiring-intelligence** fields (team/department, derived seniority & workplace type, salary visibility, detected skills, and a transparent hiring-signal score + reason tags). Built for **recruiters, sales teams, staffing agencies, job-board operators, and market researchers**.

**No login, no cookies, no API keys.** The actor uses Lever's **public Postings API** (`?mode=json`) over HTTP — one request returns every published posting for a board — so it stays fast and cost-predictable. You pay one flat event per unique job row that passes your filters.

### ✨ Why this scraper

- **Lever-focused hiring intelligence** — not a generic multi-ATS crawler. Every row carries derived signals useful for sales, recruiting, and market research.
- **Global + EU boards** — `jobs.lever.co` / `api.lever.co` and `jobs.eu.lever.co` / `api.eu.lever.co`, with automatic region fallback.
- **Two input modes** — paste Lever board/API URLs, or just list site slugs (`netflix`, `benchling`, `figma`).
- **31 flat fields** — job identity, company, categories, dates, description, salary, and hiring signals. No nested objects; drops straight into Sheets/Excel/CRMs.
- **Pay-Per-Event** — one flat `job-result` event per saved unique job. Duplicates and filtered rows are never charged.
- **No browser** — pure HTTP + JSON, so it is fast and light.

---

### 🚀 Quick start — sample inputs

#### Example 1 — site slugs + filters

```json
{
    "siteSlugs": ["netflix", "benchling"],
    "region": "auto",
    "maxResults": 500,
    "query": "data",
    "teams": ["Engineering", "Data"],
    "commitments": ["Full-time"],
    "workplaceTypes": ["remote", "hybrid"],
    "seniorityLevels": ["senior", "manager", "director"],
    "postedAfter": "2026-01-01",
    "includeDescriptionText": true,
    "deduplicate": true,
    "proxyConfiguration": { "useApifyProxy": true }
}
````

#### Example 2 — board URLs + remote-only + custom residential proxy via your own provider

```json
{
    "startUrls": [{ "url": "https://jobs.lever.co/figma" }, { "url": "https://jobs.eu.lever.co/spotify" }],
    "maxResults": 250,
    "remoteOnly": true,
    "includeDescriptionText": true,
    "includeRawHtml": true,
    "deduplicate": true,
    "proxyConfiguration": {
        "useApifyProxy": false,
        "proxyUrls": ["http://user:pass@proxy.iproyal.com:12321"]
    }
}
```

> Provide **at least one** of `startUrls` or `siteSlugs`. URLs always use their own host's region; bare slugs use the `region` setting (`auto` tries global first, then EU).

> The actor blocks Apify Residential proxy; if you need residential routing, supply your own provider via `proxyConfiguration.proxyUrls`. See **🚦 Proxy policy** below.

***

### 📦 Output

The dataset has one view: **Jobs & hiring signals** — a 31-column flat table.

![Lever Hiring Intelligence Scraper — all-fields table view](https://raw.githubusercontent.com/coregentdevspace/lever-hiring-intelligence-scraper-assets/main/lever-hiring-intelligence-scraper-output-all-fields-table-view.png)

#### Output fields (31)

`job_id`, `job_title`, `company_slug`, `company_name`, `team`, `department`, `location`, `commitment`, `workplace_type`, `seniority_level`, `posted_at`, `updated_at`, `hosted_url`, `apply_url`, `job_description_text`, `job_description_html`, `requirements_text`, `salary_text`, `salary_min`, `salary_max`, `salary_currency`, `has_salary`, `skills_keywords`, `hiring_signal_score`, `hiring_signal_label`, `reason_tags`, `source_platform`, `source_region`, `source_input`, `source_api_url`, `scraped_at`.

#### Sample record — Jobs & hiring signals

Real actor output (from a run against Lever's public `leverdemo` board; the long text fields are truncated here with `…` for readability):

```json
{
    "job_id": "317078f5-1943-44f4-9231-92f80dbdeb69",
    "job_title": "Marketing Automation and Analytics Manager",
    "company_slug": "leverdemo",
    "company_name": "Leverdemo",
    "team": "Product Marketing",
    "department": "Marketing",
    "location": "Minneapolis, MN",
    "commitment": null,
    "workplace_type": "unknown",
    "seniority_level": "manager",
    "posted_at": "2014-01-17T16:33:32.235Z",
    "updated_at": null,
    "hosted_url": "https://jobs.lever.co/leverdemo/317078f5-1943-44f4-9231-92f80dbdeb69",
    "apply_url": "https://jobs.lever.co/leverdemo/317078f5-1943-44f4-9231-92f80dbdeb69/apply",
    "job_description_text": "Welcome to the Demo Job Listing for Lever! This is a fictional job created solely for demonstration purposes…",
    "job_description_html": null,
    "requirements_text": "WHAT YOU'LL BE DOING (AND LOVING IT!): Lead the research, selection and implementation of marketing automation toolset for capturing, scoring, nurturing…",
    "salary_text": null,
    "salary_min": null,
    "salary_max": null,
    "salary_currency": null,
    "has_salary": false,
    "skills_keywords": "javascript, data modeling, salesforce, hubspot, marketo",
    "hiring_signal_score": 50,
    "hiring_signal_label": "medium",
    "reason_tags": "high_value_department,senior_role,skills_detected,company_hiring_multiple_roles",
    "source_platform": "lever",
    "source_region": "global",
    "source_input": "https://jobs.lever.co/leverdemo",
    "source_api_url": "https://api.lever.co/v0/postings/leverdemo?mode=json",
    "scraped_at": "2026-06-03T06:17:45.714Z"
}
```

> This sample is from Lever's public `leverdemo` board (demo data, so `salary` is empty and the description is placeholder text). On real company boards these fields populate from the live posting.

***

### 🎯 Hiring-signal score

Transparent rule-based score (0–100) computed from visible scraped fields — no AI, no external enrichment.

| Signal                                            | Points |
| ------------------------------------------------- | -----: |
| Posted within the last 14 days                    |    +20 |
| Posted within the last 30 days (but over 14 days) |    +15 |
| High-value department / role¹                     |    +15 |
| Seniority is manager / director / executive       |    +15 |
| Salary visible                                    |    +10 |
| Remote or hybrid                                  |    +10 |
| 3+ detected skills / tools                        |    +10 |
| Company has 5+ open jobs in this run              |    +10 |
| Full-time commitment                              |     +5 |

¹ sales, marketing, engineering, product, data, security, finance, operations, or customer success.

Score is capped at 100.

**Labels**: `high` (70–100) · `medium` (40–69) · `low` (0–39).

`reason_tags` is a comma-separated list explaining the score — e.g. `recent_posting`, `high_value_department`, `senior_role`, `salary_visible`, `remote_or_hybrid`, `skills_detected`, `company_hiring_multiple_roles`, `full_time_role`.

***

### 💰 Pricing

**Pay-Per-Event**. One flat event per saved row (final per-event price is configured on the Apify console):

| Event        | Charged when                                                                                 |
| ------------ | -------------------------------------------------------------------------------------------- |
| `job-result` | Once per unique job row that passed all filters and was successfully written to the dataset. |

So your bill is simply `results_saved × price_per_event`. The actor honors the user-configured per-run spending cap (Apify `eventChargeLimitReached`): it caps how many results it collects up-front to what the limit can pay for, and stops cleanly the moment the cap is reached during charging.

Not charged:

- Duplicates (deduplicated by `job_id`+`company_slug`+`source_region`, then canonical `hosted_url` / `apply_url`).
- Rows filtered out by query / location / team / commitment / workplace / seniority / date / remote-only filters.
- Empty boards, failed inputs, and rows missing a valid identity (`job_id`/`hosted_url` + `job_title` + `company_slug`).

#### 🚦 Proxy policy

Use **Apify Datacenter** proxy or **no proxy** for normal runs — both work reliably for Lever's public Postings API at this actor's conservative concurrency.

**Apify Residential proxy is not supported.** The actor will fail at startup if `proxyConfiguration.apifyProxyGroups` includes `RESIDENTIAL`. Reason: in pay-per-event actors, residential bandwidth (~/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own residential provider via the proxy editor's **Custom proxy URLs** field — that traffic goes through your provider, not Apify, and is unaffected:

```
http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777
```

***

### 📊 Run summary

After each run, a `RUN_SUMMARY` entry is written to the key-value store:

```json
{
    "inputs_total": 2,
    "successful_inputs": 2,
    "failed_inputs": 0,
    "raw_results_found": 612,
    "results_saved": 500,
    "duplicates_removed": 14,
    "filtered_out": 98,
    "charged_events": 500,
    "blocked_requests": 0,
    "retry_count": 0,
    "empty_boards": 0,
    "invalid_inputs": 0,
    "runtime_seconds": 9,
    "scraped_at": "2026-06-03T06:00:00.000Z"
}
```

`charged_events` equals the number of successfully saved unique rows.

***

### ⚙️ Filters

| Filter            | Effect                                                                                              |
| ----------------- | --------------------------------------------------------------------------------------------------- |
| `query`           | Case-insensitive substring across title, team, department, location, commitment, and description.   |
| `locations`       | Keep jobs whose location matches any keyword.                                                       |
| `teams`           | Keep jobs whose team or department matches any keyword.                                             |
| `commitments`     | Keep jobs whose commitment matches any keyword (e.g. Full-time, Contract, Internship).              |
| `workplaceTypes`  | `remote` / `hybrid` / `onsite` / `unknown` (derived).                                               |
| `seniorityLevels` | `intern` / `junior` / `mid` / `senior` / `lead` / `manager` / `director` / `executive` / `unknown`. |
| `postedAfter`     | Keep jobs created on or after an ISO date (`YYYY-MM-DD`).                                           |
| `remoteOnly`      | Keep only remote roles.                                                                             |
| `deduplicate`     | Drop duplicates across overlapping inputs (recommended ON); keeps the most complete row.            |

All filters are applied **after** extraction and **before** any dataset push or event charge.

***

### 🚧 Limitations (V1)

- **Public Postings API only**: published public jobs, no login/cookies/private Data API. No candidate, applicant, interview, or pipeline data.
- **`company_name`** is title-cased from the site slug (the public postings API does not expose a company display name).
- **`seniority_level` / `workplace_type`** are derived from visible text (and Lever's `workplaceType` when present); treat them as best-effort labels.
- **`salary_*`** comes from Lever's structured `salaryRange` when present, otherwise a best-effort parse of salary text in the description / requirements — no currency conversion. Most Lever boards do not publish salary, so these fields are often empty.
- **`updated_at`** is always `null`: Lever's public Postings API exposes only a creation timestamp (`createdAt` → `posted_at`), not a last-updated timestamp. The field is kept for schema stability.
- **No** recruiter/contact extraction, email enrichment, company-website crawling, or AI scoring.
- `maxResults` caps **saved unique** rows across the whole run (not per board).

***

### ❓ FAQ

**Do I need a Lever account or API key?**
No. The actor only uses Lever's public Postings API (`?mode=json`).

**What is a "site slug"?**
The company segment of a Lever board URL — e.g. for `https://jobs.lever.co/netflix` the slug is `netflix`. You can paste full URLs in `startUrls` or just slugs in `siteSlugs`.

**Global vs EU boards?**
Both are supported. URLs use their own host's region; for bare slugs, `region: "auto"` tries the global API first and falls back to EU.

**How is `company_jobs_in_run` reflected?**
The hiring-signal score adds points when a company has 5+ jobs in the same run — a cheap hiring-demand signal computed across the run's saved set (no extra requests).

**Can I export to CSV?**
Yes — every field is flat (no nested objects). Use Apify's CSV / Excel export, or call the dataset API with `format=csv`.

***

### 🛠️ Technical notes

- **Stack**: Node.js 22 · Apify SDK 3 · Crawlee `HttpCrawler` · native fetch · Cheerio (HTML→text only). No browser.
- **Endpoint**: Lever public Postings API — `https://api.lever.co/v0/postings/{slug}?mode=json` (and EU `api.eu.lever.co`).
- **Concurrency**: `min=1`, `max=5` (conservative; tune after real runs).
- **Memory**: 1 GB min · 2 GB default · 4 GB max.
- **Proxy**: Apify Proxy enabled by default; Datacenter/no-proxy/custom URLs accepted; Apify Residential rejected at startup.

# Actor input Schema

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

Lever board or API URLs to scrape, for example https://jobs.lever.co/netflix or https://api.lever.co/v0/postings/netflix. Global (jobs.lever.co / api.lever.co) and EU (jobs.eu.lever.co / api.eu.lever.co) hosts are supported. Provide at least one of Lever board/API URLs or Site slugs.

## `siteSlugs` (type: `array`):

Known Lever site slugs (the company part of a jobs.lever.co URL), for example "netflix", "benchling", "figma". The actor builds the public Postings API URL from each slug using the Region below.

## `region` (type: `string`):

Which Lever instance to use for bare site slugs. "auto" tries the global API first and falls back to EU. URLs always use their own host's region.

## `maxResults` (type: `integer`):

Maximum number of saved unique jobs across the whole run (not per board). Range 1-50000.

## `query` (type: `string`):

Free-text filter applied after extraction against job title, team, department, location, commitment, and description. Leave empty to keep all jobs.

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

Keep only jobs whose location contains one of these keywords (case-insensitive), for example "United States", "Remote", "London". Leave empty for all.

## `teams` (type: `array`):

Keep only jobs whose team or department contains one of these keywords (case-insensitive), for example "Engineering", "Sales". Leave empty for all.

## `commitments` (type: `array`):

Keep only jobs whose Lever commitment contains one of these keywords (case-insensitive), for example "Full-time", "Contract", "Internship". Leave empty for all.

## `workplaceTypes` (type: `array`):

Filter by derived workplace type. Leave empty for all.

## `seniorityLevels` (type: `array`):

Filter by derived seniority level. Leave empty for all.

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

Include only jobs created on or after this ISO date (YYYY-MM-DD). Jobs without a creation date are excluded when this is set. Leave empty to disable.

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

Quick filter to keep only remote roles (derived workplace type remote, or strong remote keywords in title/location/description).

## `includeDescriptionText` (type: `boolean`):

Include the cleaned plain-text job description and requirements text. Turning this off reduces row size.

## `includeRawHtml` (type: `boolean`):

Include the raw Lever description HTML (job\_description\_html) for advanced users. Enabled by default; turn it off to reduce dataset size if you only need the plain-text description.

## `deduplicate` (type: `boolean`):

Remove duplicate jobs across overlapping inputs so you are not charged for duplicates. Keeps the most complete row per unique posting.

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

Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://jobs.lever.co/leverdemo"
    }
  ],
  "siteSlugs": [
    "leverdemo"
  ],
  "region": "auto",
  "maxResults": 1000,
  "query": "",
  "locations": [],
  "teams": [],
  "commitments": [],
  "workplaceTypes": [],
  "seniorityLevels": [],
  "postedAfter": "",
  "remoteOnly": false,
  "includeDescriptionText": true,
  "includeRawHtml": true,
  "deduplicate": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Flat 31-field table view of every Lever job row pushed to the dataset, including job identity, company, categories, dates, description, salary, and derived hiring-signal fields.

# 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/leverdemo"
        }
    ],
    "siteSlugs": [
        "leverdemo"
    ],
    "locations": [],
    "teams": [],
    "commitments": [],
    "postedAfter": "",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("coregent/lever-hiring-intelligence-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/leverdemo" }],
    "siteSlugs": ["leverdemo"],
    "locations": [],
    "teams": [],
    "commitments": [],
    "postedAfter": "",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("coregent/lever-hiring-intelligence-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 '{
  "startUrls": [
    {
      "url": "https://jobs.lever.co/leverdemo"
    }
  ],
  "siteSlugs": [
    "leverdemo"
  ],
  "locations": [],
  "teams": [],
  "commitments": [],
  "postedAfter": "",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call coregent/lever-hiring-intelligence-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Lever Hiring Intelligence Scraper",
        "description": "Scrape public job postings from Lever-hosted career boards (global + EU) into clean, CSV-ready hiring-intelligence rows - no login, cookies, or paid APIs.",
        "version": "1.0",
        "x-build-id": "oMGEzk3BVYtuL9qkJ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/coregent~lever-hiring-intelligence-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-coregent-lever-hiring-intelligence-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/coregent~lever-hiring-intelligence-scraper/runs": {
            "post": {
                "operationId": "runs-sync-coregent-lever-hiring-intelligence-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/coregent~lever-hiring-intelligence-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-coregent-lever-hiring-intelligence-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",
                "properties": {
                    "startUrls": {
                        "title": "Lever board / API URLs",
                        "type": "array",
                        "description": "Lever board or API URLs to scrape, for example https://jobs.lever.co/netflix or https://api.lever.co/v0/postings/netflix. Global (jobs.lever.co / api.lever.co) and EU (jobs.eu.lever.co / api.eu.lever.co) hosts are supported. Provide at least one of Lever board/API URLs or Site slugs.",
                        "default": [
                            {
                                "url": "https://jobs.lever.co/leverdemo"
                            }
                        ],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "siteSlugs": {
                        "title": "Site slugs",
                        "type": "array",
                        "description": "Known Lever site slugs (the company part of a jobs.lever.co URL), for example \"netflix\", \"benchling\", \"figma\". The actor builds the public Postings API URL from each slug using the Region below.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "region": {
                        "title": "Region",
                        "enum": [
                            "auto",
                            "global",
                            "eu"
                        ],
                        "type": "string",
                        "description": "Which Lever instance to use for bare site slugs. \"auto\" tries the global API first and falls back to EU. URLs always use their own host's region.",
                        "default": "auto"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of saved unique jobs across the whole run (not per board). Range 1-50000.",
                        "default": 1000
                    },
                    "query": {
                        "title": "Keyword query",
                        "type": "string",
                        "description": "Free-text filter applied after extraction against job title, team, department, location, commitment, and description. Leave empty to keep all jobs.",
                        "default": ""
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Keep only jobs whose location contains one of these keywords (case-insensitive), for example \"United States\", \"Remote\", \"London\". Leave empty for all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "teams": {
                        "title": "Teams / departments",
                        "type": "array",
                        "description": "Keep only jobs whose team or department contains one of these keywords (case-insensitive), for example \"Engineering\", \"Sales\". Leave empty for all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "commitments": {
                        "title": "Commitments",
                        "type": "array",
                        "description": "Keep only jobs whose Lever commitment contains one of these keywords (case-insensitive), for example \"Full-time\", \"Contract\", \"Internship\". Leave empty for all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "workplaceTypes": {
                        "title": "Workplace types",
                        "type": "array",
                        "description": "Filter by derived workplace type. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "remote",
                                "hybrid",
                                "onsite",
                                "unknown"
                            ],
                            "enumTitles": [
                                "Remote",
                                "Hybrid",
                                "On-site",
                                "Unknown"
                            ]
                        },
                        "default": []
                    },
                    "seniorityLevels": {
                        "title": "Seniority levels",
                        "type": "array",
                        "description": "Filter by derived seniority level. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "intern",
                                "junior",
                                "mid",
                                "senior",
                                "lead",
                                "manager",
                                "director",
                                "executive",
                                "unknown"
                            ],
                            "enumTitles": [
                                "Intern",
                                "Junior",
                                "Mid",
                                "Senior",
                                "Lead",
                                "Manager",
                                "Director",
                                "Executive",
                                "Unknown"
                            ]
                        },
                        "default": []
                    },
                    "postedAfter": {
                        "title": "Posted after",
                        "type": "string",
                        "description": "Include only jobs created on or after this ISO date (YYYY-MM-DD). Jobs without a creation date are excluded when this is set. Leave empty to disable.",
                        "default": ""
                    },
                    "remoteOnly": {
                        "title": "Remote only",
                        "type": "boolean",
                        "description": "Quick filter to keep only remote roles (derived workplace type remote, or strong remote keywords in title/location/description).",
                        "default": false
                    },
                    "includeDescriptionText": {
                        "title": "Include description text",
                        "type": "boolean",
                        "description": "Include the cleaned plain-text job description and requirements text. Turning this off reduces row size.",
                        "default": true
                    },
                    "includeRawHtml": {
                        "title": "Include raw description HTML",
                        "type": "boolean",
                        "description": "Include the raw Lever description HTML (job_description_html) for advanced users. Enabled by default; turn it off to reduce dataset size if you only need the plain-text description.",
                        "default": true
                    },
                    "deduplicate": {
                        "title": "Deduplicate",
                        "type": "boolean",
                        "description": "Remove duplicate jobs across overlapping inputs so you are not charged for duplicates. Keeps the most complete row per unique posting.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
