# Lever Jobs Scraper: Global and EU Boards, with Salary (`themineworks/lever-jobs-scraper`) Actor

Scrape open jobs from any company's Lever job board, on jobs.lever.co and the EU host jobs.eu.lever.co: title, team, department, commitment, remote, hybrid or onsite, every location, country, created date, salary range, apply link and description. Many companies per run. No login.

- **URL**: https://apify.com/themineworks/lever-jobs-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 jobs

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## Lever Jobs Scraper: Global and EU Boards, with Salary

[![651 Lever jobs from 5 company boards, 2 of them on the EU host, in 45 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/lever-jobs-scraper-hero.png)](https://console.apify.com/actors/rFXDBHyKukwlAz9Df/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **EU boards included, found on their own.** Lever runs two separate hosts, `jobs.lever.co` and `jobs.eu.lever.co`, and a board lives on only one of them. Give a plain slug and the actor tries the global host, then the EU host. Our proof run read **5 boards and returned 651 jobs in 45 seconds, 170 of them from EU boards** (OLX given as just `olx`, and Quantinuum). Asking only the global host gets "not found" for them: OLX answers 404 there.
- **Salary as numbers on 69% of jobs.** Lever lets employers attach a salary range to a posting, and the actor returns it as minimum, maximum, currency and period. Where the range is only written in the description, the actor reads it from there: **452 of 651 jobs (69%)** in our proof run, 291 from Lever's own salary field and 161 from descriptions. No extra request, no add-on.
- **The real company name, and the whole description.** Lever's API carries no company name, so the actor reads it, with the company website, from the board's own page ("Palantir Technologies", not "palantir"). With full descriptions on, every titled section (requirements, responsibilities) is included, not only the opening. Companies that are not found are reported and never charged.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/rFXDBHyKukwlAz9Df/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Jobs and hiring family:** [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Shine.com Jobs Scraper](https://apify.com/themineworks/shine-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Internshala Scraper](https://apify.com/themineworks/internshala-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this input and press Start. It returns the 20 newest open jobs at Spotify in a few seconds:

```json
{
  "companies": ["spotify"],
  "maxJobsPerCompany": 20
}
```

You can name a company in five ways, and mix them in one list:

- **Board link**: `https://jobs.lever.co/palantir`, or an EU board such as `https://jobs.eu.lever.co/olx`. A single job or apply link such as `https://jobs.lever.co/zoox/c2256725-2c81-4039-b6dd-03a0d7d7e95f/apply` reads that company's whole board.
- **API link**: `https://api.lever.co/v0/postings/zoox` or `https://api.eu.lever.co/v0/postings/olx`.
- **Board slug**: `palantir`, `zoox`, `spotify`, `olx`. It is the word after the domain in the board link; a slug is tried on the global host, then on the EU host.
- **Company name**: a name with spaces is tried as one word and then with hyphens, on both hosts. Use a link when the slug is something else.
- **Your company's careers page**: `https://www.palantir.com/careers/`. The page is read once and searched for its Lever board link; in our test it led to Palantir's board. A page that loads its jobs later with JavaScript is reported as "no board on page" and never charged.

On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result: https://apify.com/pricing?fpr=ymnoit

#### Copy to your AI assistant

```text
themineworks/lever-jobs-scraper on Apify. Returns open jobs from companies' Lever job boards on jobs.lever.co and jobs.eu.lever.co, one row per job with company name and website, title, team, department, commitment, workplace type (remote, hybrid or onsite), every location, country code, created date, salary range (min, max, currency, period), job and apply links, and a 500 character description (full text with every section on request). Call ApifyClient("TOKEN").actor("themineworks/lever-jobs-scraper").call(run_input={"companies": ["palantir", "https://jobs.eu.lever.co/olx"], "keywords": ["engineer"], "maxJobsPerCompany": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: companies (Lever board links, slugs, company names or careers page links). Optional: keywords (title words), excludeKeywords, locations, departments, remoteOnly (default false), postedWithinDays, maxJobsPerCompany (default 500, 20 to 5,000), includeDescription (default false), onlyNewJobs (default false). Skip rows that have "_type": "info". Full spec: GET https://api.apify.com/v2/acts/themineworks~lever-jobs-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **29 fields per job**: company name and website, board slug and host (global or EU), job id, title, department, team, commitment as published and as a normalised employment type, workplace type, remote flag, primary and every location, country code, created date, salary range with its source, job and apply links, a short description and, on request, the whole description as plain text.
- **Both Lever hosts.** EU boards are read from Lever's EU host, found automatically for plain slugs and names.
- **Whole boards, newest first.** Lever's API lists postings by team, not by date, so the actor reads the whole board (100 postings a request, up to 5,000) and then delivers the newest matching jobs first, up to your cap per company (20 to 5,000).
- **Filters that run before you pay**: title keywords and exclusions, locations (every location of a job is checked, and United States matches "Palo Alto, CA" and country code US), departments and teams, remote only, and posted within N days. Filtered jobs are never charged.
- **Only new jobs on repeat runs**, kept in a named key value store in your account, so a daily schedule returns only what was posted since.
- **Plain HTTP, no browser, no login.** 512 MB of memory, four boards at a time. A run report (status per company, host, pages read, matches, filtered counts, requests, charges) is saved as the `OUTPUT` record.

### How to use it

#### Basic: every open job at one company

```json
{
  "companies": ["https://jobs.lever.co/zoox"],
  "maxJobsPerCompany": 500
}
```

Zoox had 231 open jobs on 5 Oct 2026, so this returns all of them, newest first, most with a salary range. Raise `maxJobsPerCompany` (up to 5,000) for very large boards.

#### Several companies at once, on both hosts

```json
{
  "companies": [
    "https://jobs.lever.co/palantir",
    "zoox",
    "spotify",
    "olx",
    "https://jobs.eu.lever.co/quantinuum"
  ],
  "maxJobsPerCompany": 200,
  "includeDescription": true
}
```

This is the input of our proof run: 651 jobs in 45 seconds, with the whole description of every job. `olx` was found on the EU host by itself. Up to 1,000 companies per run; a board given twice (for example as `zoox` and as its link) is read once.

#### Job: daily alert on new jobs at a watchlist of companies

```json
{
  "companies": ["palantir", "zoox", "spotify"],
  "keywords": ["engineer", "scientist"],
  "onlyNewJobs": true,
  "maxJobsPerCompany": 500
}
```

Schedule it daily (Console, Schedules, Add schedule). The first run delivers every matching open job; each later run delivers only jobs no earlier run delivered, so each run's dataset is the list of new postings. Send it to Slack or email with a webhook, Make or Zapier.

#### Job: European hiring map

```json
{
  "companies": ["olx", "https://jobs.eu.lever.co/quantinuum", "spotify"],
  "locations": ["Germany", "Poland", "Spain", "London", "Stockholm"],
  "maxJobsPerCompany": 500
}
```

Every location of a job is checked, not only the first: an OLX job based in Barcelona that also lists Warsaw matches Poland. `country_code` gives the primary country as a two letter code for grouping.

#### Job: salary benchmarking for one role

```json
{
  "companies": ["zoox", "palantir", "spotify"],
  "keywords": ["software engineer", "machine learning"],
  "locations": ["United States"],
  "maxJobsPerCompany": 300
}
```

Rows with pay carry `salary_min`, `salary_max`, `salary_currency` and `salary_period` (`year` or `hour` for most US roles). `salary_source` tells you whether the range came from Lever's salary field (`posting`) or was read from the description (`description`).

#### Job: internships and fixed term roles

```json
{
  "companies": ["palantir", "zoox", "spotify", "olx"],
  "keywords": ["intern", "graduate", "new grad"],
  "postedWithinDays": 60
}
```

`commitment` keeps the employer's own wording (Full-time, Internship, Fixed-Term, Permanent) and `employment_type` normalises it to `full-time`, `part-time`, `contract`, `intern` or `temporary`.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `companies` | array of strings | `["https://jobs.lever.co/palantir", "zoox", "https://jobs.eu.lever.co/olx"]` | Required. Lever board, job, apply or API links on either host, board slugs, company names, or careers page links, one per line. Up to 1,000 per run; repeats are read once. |
| `keywords` | array of strings | none | Keep jobs whose title has a word starting with one of these (`engineer` also matches Engineering Manager). Not case sensitive. |
| `excludeKeywords` | array of strings | none | Drop jobs whose title has a word starting with one of these, for example `senior`, `intern`. |
| `locations` | array of strings | none | Keep jobs with a location containing one of these, for example `London`, `Poland`, `Remote`. Every location of a job is checked, and the country code too. United States, USA and US match each other and US state codes; United Kingdom and UK match each other. |
| `departments` | array of strings | none | Keep jobs whose team or department contains one of these, for example `Engineering`, `Sales`. |
| `remoteOnly` | boolean | `false` | Keep only jobs that are remote or offer a remote location. |
| `postedWithinDays` | integer | none | Keep only jobs created in the last N days, 1 to 365. |
| `maxJobsPerCompany` | integer | `500` (the form starts at 20) | Most jobs delivered per company after the filters, newest first, 20 to 5,000. Also the most you pay for per company. |
| `includeDescription` | boolean | `false` | Add the whole description as plain text in `description`: the opening, every titled list and the closing. Costs nothing extra: Lever sends it with the board. |
| `onlyNewJobs` | boolean | `false` | Skip, and never charge, jobs an earlier run of this actor in your account already delivered. |

### What data do you get?

One row per open job. A field with no value (for example no salary published) is left out of the row rather than filled with an empty value.

**The company**: `company` (read from the board's own page, such as "Palantir Technologies"; the slug in title case when the page cannot be read), `company_website` (the home page the board links to), `company_slug` (the board slug), `board_region` (`global` for jobs.lever.co, `eu` for jobs.eu.lever.co), `platform` (always `lever`).

**The job**: `job_id` (Lever's posting id, stable across runs), `title`, `team`, `department` (when the board uses departments), `commitment` (exactly as published), `employment_type` (`full-time`, `part-time`, `contract`, `intern` or `temporary`).

**Where**: `location` (primary location), `locations` (every location of the job), `country_code` (two letter code Lever publishes), `workplace_type` (`remote`, `hybrid` or `onsite` as Lever publishes it; `remote` when only the location says so), `is_remote`.

**When**: `posted_at` (when the posting was created, ISO 8601 UTC; Lever publishes no separate update date).

**Pay**: `salary_min`, `salary_max`, `salary_currency`, `salary_period` (`year`, `month`, `week`, `day` or `hour`), `salary_text` (one readable line, for example "USD 165,000 to 199,000 per year"), `salary_source` (`posting` for Lever's salary field, `description` when read from the description).

**Links and text**: `job_url` (the posting on Lever), `apply_url` (the application form), `description_short` (the start of the description, one line, at most 500 characters), `description` (the whole description as plain text with every section, only with `includeDescription` on).

**How it was read**: `input` (the company entry as you typed it), `scraped_at`.

At the end of a run with results, one extra row with `"_type": "info"` carries scheduling tips. It is never charged; filter it out with `_type`. A full run report (status per company, host, pages read, matches, filtered counts, requests, charges) is saved as the `OUTPUT` record of the run's key value store.

#### Stable fields for automations

These fields were present in every one of the 651 rows of our proof run:

| Field | Meaning |
|---|---|
| `company` | Company name |
| `company_slug` | Lever board slug |
| `board_region` | global or eu |
| `platform` | Always `lever` |
| `job_id` | Lever posting id; use it to deduplicate |
| `title` | Job title |
| `team` | Team |
| `location` | Primary location |
| `locations` | Every location, as a list |
| `country_code` | Two letter country code |
| `workplace_type` | remote, hybrid or onsite |
| `is_remote` | True when the job is remote or offers a remote location |
| `posted_at` | Created, ISO 8601 UTC |
| `job_url` | Link to the posting |
| `apply_url` | Link to the application form |

These names will not change. New fields may be added, never renamed.

#### Output examples

A job with Lever's own salary field (Zoox):

```json
{
  "company": "Zoox",
  "company_website": "http://zoox.com",
  "company_slug": "zoox",
  "platform": "lever",
  "board_region": "global",
  "job_id": "c2256725-2c81-4039-b6dd-03a0d7d7e95f",
  "title": "Senior Program Manager, People Experience",
  "department": "People Experience",
  "team": "PEx",
  "location": "Foster City, CA",
  "locations": ["Foster City, CA"],
  "country_code": "US",
  "workplace_type": "hybrid",
  "is_remote": false,
  "employment_type": "full-time",
  "commitment": "Full-time",
  "posted_at": "2026-10-01T19:39:53.311Z",
  "salary_min": 165000,
  "salary_max": 199000,
  "salary_currency": "USD",
  "salary_period": "year",
  "salary_text": "USD 165,000 to 199,000 per year",
  "salary_source": "posting",
  "job_url": "https://jobs.lever.co/zoox/c2256725-2c81-4039-b6dd-03a0d7d7e95f",
  "apply_url": "https://jobs.lever.co/zoox/c2256725-2c81-4039-b6dd-03a0d7d7e95f/apply",
  "description_short": "Zoox is seeking an experienced Senior Program Manager to join our People Experience (PEx) team, serving as PEx PMO's strategic partner to our Talent…",
  "input": "zoox",
  "scraped_at": "2026-10-05T19:06:36.553Z"
}
```

A board on the EU host, found from the plain slug `olx`, with four locations:

```json
{
  "company": "OLX",
  "company_website": "https://www.olxgroup.com/",
  "company_slug": "olx",
  "platform": "lever",
  "board_region": "eu",
  "job_id": "ed4b40ba-2457-4b1a-ba4c-500d299d3026",
  "title": "Senior Group Brand & Media Director",
  "department": "OLX Group",
  "team": "Marketing",
  "location": "Barcelona, Spain",
  "locations": ["Barcelona, Spain", "Poznań, Poland", "Lisbon, Portugal", "Warsaw, Poland"],
  "country_code": "ES",
  "workplace_type": "hybrid",
  "is_remote": false,
  "posted_at": "2026-09-30T14:16:32.069Z",
  "job_url": "https://jobs.eu.lever.co/olx/ed4b40ba-2457-4b1a-ba4c-500d299d3026",
  "apply_url": "https://jobs.eu.lever.co/olx/ed4b40ba-2457-4b1a-ba4c-500d299d3026/apply",
  "description_short": "About OLX OLX is a global leader in facilitating trade. It builds leading marketplace ecosystems enabled by tech, powered by trust, and loved by…",
  "input": "olx"
}
```

A salary read from the description (Palantir Technologies):

```json
{
  "company": "Palantir Technologies",
  "company_website": "https://www.palantir.com/",
  "company_slug": "palantir",
  "platform": "lever",
  "board_region": "global",
  "job_id": "2a41a2e2-55a4-4641-a3bf-101b7616dd63",
  "title": "Contract Operations",
  "team": "Legal",
  "location": "Palo Alto, CA",
  "country_code": "US",
  "workplace_type": "hybrid",
  "is_remote": false,
  "employment_type": "full-time",
  "commitment": "Full-time",
  "posted_at": "2026-09-25T15:29:37.738Z",
  "salary_min": 75000,
  "salary_max": 112000,
  "salary_currency": "USD",
  "salary_period": "year",
  "salary_text": "USD 75,000 to 112,000 per year",
  "salary_source": "description",
  "job_url": "https://jobs.lever.co/palantir/2a41a2e2-55a4-4641-a3bf-101b7616dd63",
  "input": "https://jobs.lever.co/palantir"
}
```

### Pricing

Pay per event: you pay for the job rows you receive, plus a flat $0.005 per run, whatever memory you choose.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `job-scraped` | Once per job row saved to your dataset | $1.20 per 1,000 | $1.20 per 1,000 | $1.20 per 1,000 | $1.20 per 1,000 |
| `run-start` | Once per run, when it starts | $0.005 | $0.005 | $0.005 | $0.005 |

Free plan runs return up to 10 results each; paid plans have no cap.

The price per single job is the price per 1,000 divided by 1,000. 200 jobs from one company are 200 events.

Never charged:

- companies that are not found on either host, careers pages with no board link, and boards with no open jobs;
- jobs removed by your filters (keywords, exclusions, locations, departments, remote only, posted within);
- jobs above your `maxJobsPerCompany` cap, although the whole board is read to find the newest;
- a job already delivered in the same run;
- with `onlyNewJobs` on, jobs an earlier run in your account already delivered;
- the full description and the company name lookup (no extra charge);
- retries the actor makes on other IP addresses;
- the information row at the end of the run and the `OUTPUT` run report.

If you set a maximum charge for the run in Apify, the actor stops when it is reached and keeps everything delivered so far.

### FAQ

#### What do I get on the free plan?

On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result with no cap, at the prices in the table above.

#### What exactly does this actor read?

Lever's public postings API on its global host (api.lever.co) and its EU host (api.eu.lever.co), the same data a company's Lever job board shows to any visitor: every open posting with its description sections, team, department, commitment, workplace type, locations, country and the salary range the employer chose to publish. The board's own page is read once for the company name and website. Everything is read live when you run it; there is no cached index in between.

#### Why does it matter that a board is on the EU host?

Companies that keep their data in Europe have their Lever board on jobs.eu.lever.co, and Lever's global API answers 404 for them. The actor tries the global host first and the EU host after a 404, so a plain slug works either way. `board_region` tells you which host a job came from. In our proof run 170 of 651 jobs came from EU boards.

#### How many jobs can I get?

Every open posting on a board, up to 5,000 per company per run (`maxJobsPerCompany`), and up to 1,000 companies per run. Palantir's board held 318 postings on 5 Oct 2026, read in four requests.

#### Where does the salary come from, and why do some jobs have none?

First from the salary range the employer attached to the Lever posting (`salary_source: "posting"`). When that is empty, the actor reads a range written in the description, and only when a currency, two amounts and a pay word such as salary, pay or compensation appear together (`salary_source: "description"`). Employers outside US pay transparency states often publish no pay; those rows simply have no salary fields. In our proof run 69% of jobs had one.

#### Why does a run read the whole board when I ask for 20 jobs?

Lever's API lists postings grouped by team, not by date. To give you the 20 newest, the actor has to see them all first. A page holds 100 postings, so most boards take one to four requests, and you are only charged for the jobs delivered.

#### How fresh is the data?

As fresh as the board: every run asks Lever at run time, so a job posted a minute ago is included and a job closed a minute ago is not. `posted_at` is when the posting was created; Lever publishes no separate update date.

#### How long does a run take?

Four boards at a time. Our five board proof run (651 jobs with full descriptions, 11 postings pages and 5 board pages) took 45 seconds. A slow proxy answer is dropped after 30 seconds and asked again on another IP, which can add half a minute now and then.

#### What if a company is not found?

The run goes on with the others. The company gets a status in the `OUTPUT` record (`not_found`, `no_board_on_page` or `page_unreadable`) with the reason, and nothing is charged for it. If no job at all is delivered, the info row in the dataset says why.

#### Do I need a Lever account, cookies or an API key?

No. Job boards are public, and the actor reads them without logging in. Requests go through Apify's datacenter proxy.

#### Can I monitor new jobs over time?

Yes. Switch on `onlyNewJobs` and schedule the actor. The ids of delivered jobs are kept in a named key value store in your Apify account; each run skips, and never charges, jobs a previous run delivered. In our test the second run skipped the 40 jobs the first had delivered and returned the next 40. After a catch up run, each run returns only jobs posted since.

#### Can I get Greenhouse, Ashby or Workday jobs too?

This actor reads Lever only, so its input and output are built around Lever's data. For several platforms in one run, our [Career Site Jobs Scraper](https://apify.com/themineworks/ats-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) reads Greenhouse, Lever, Ashby and Workday together.

#### Which formats can I download?

JSON, CSV, Excel, XML, RSS and an HTML table, from the run's Storage tab or the dataset API. `locations` stays a list in JSON and is flattened in CSV and Excel.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

- Connector URL: https://mcp.apify.com/?tools=themineworks/lever-jobs-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http lever-jobs-scraper "https://mcp.apify.com/?tools=themineworks/lever-jobs-scraper"`

#### Is it legal to scrape Lever job boards?

The actor only reads job postings that employers publish for anyone to see, without signing in, and returns no personal contact details. You are responsible for how you use the data, for the terms of the sites involved, and for data protection law such as GDPR and CCPA. If in doubt, ask a lawyer about your use case.

### Integrations

- **Google Sheets**: send each run's rows to a sheet with Apify's Google Sheets integration, or import the CSV link of the dataset.
- **Make, Zapier and n8n**: start the actor and read its dataset with the Apify apps and nodes, for example "new engineering jobs in Europe at our target accounts to Slack every morning".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Shine.com Jobs Scraper](https://apify.com/themineworks/shine-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Internshala Scraper](https://apify.com/themineworks/internshala-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Indeed Jobs Scraper](https://apify.com/themineworks/indeed-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instahyre Jobs Scraper](https://apify.com/themineworks/instahyre-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Apna Jobs Scraper](https://apify.com/themineworks/apna-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CutShort Jobs Scraper](https://apify.com/themineworks/cutshort-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Jobs Scraper](https://apify.com/themineworks/linkedin-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Recruiting & Jobs MCP](https://apify.com/themineworks/recruiting-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a Lever board that should work and does not? Open an issue in the Issues tab with the board link and the run ID, and we will look at it. For a new source or a field you need, email dmineworks@gmail.com.

*Paste Lever boards, links or slugs from either host, filter by title, place, team and date, and get every open job back as a clean row with the company's real name, every location and the salary range, newest first.*

# Actor input Schema

## `companies` (type: `array`):

One company per line. Accepted: a board link (https://jobs.lever.co/palantir, a single job or apply link, or an EU board such as https://jobs.eu.lever.co/olx), an API link (api.lever.co/v0/postings/palantir), a board slug (palantir), a company name (tried as one word and with hyphens), or your company's own careers page that links to its Lever board (read once to find the board, never charged). A plain slug is looked up on Lever's global host first, then its EU host. Up to 1,000 companies per run; repeats are read once.

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

Keep only jobs whose title has a word starting with one of these, for example engineer (matches Engineering Manager too), data, sales. Not case sensitive. Leave empty for every title.

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

Drop jobs whose title has a word starting with one of these, for example senior, intern, director.

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

Keep only jobs with a location that contains one of these, for example London, New York, Germany, Remote. United States, USA and US match each other, as do United Kingdom and UK. Every location of a job is checked, not only the first.

## `departments` (type: `array`):

Keep only jobs whose Lever team or department contains one of these words, for example Engineering or Sales. Not case sensitive.

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

Keep only jobs that are remote or offer a remote location.

## `postedWithinDays` (type: `integer`):

Keep only jobs posted in the last N days, for example 7. Leave empty for any date.

## `maxJobsPerCompany` (type: `integer`):

Most jobs delivered for any one company, counted after the filters, newest first. 20 to 5,000. Also the most you pay for per company. The form starts at 20 so a first run stays small; API calls that leave it out get 500.

## `includeDescription` (type: `boolean`):

Adds the whole job description as plain text: the opening, every titled list (requirements, responsibilities) and the closing. Every row always has a 500 character description_short. Lever sends the description with the board, so this costs no extra request.

## `onlyNewJobs` (type: `boolean`):

For schedules: skip jobs an earlier run of this actor in your account already delivered, so each run returns and charges only jobs posted since. The list of delivered jobs is kept in a named key value store in your account.

## Actor input object example

```json
{
  "companies": [
    "https://jobs.lever.co/palantir",
    "zoox",
    "https://jobs.eu.lever.co/olx"
  ],
  "remoteOnly": false,
  "maxJobsPerCompany": 20,
  "includeDescription": false,
  "onlyNewJobs": false
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "companies": [
        "https://jobs.lever.co/palantir",
        "zoox",
        "https://jobs.eu.lever.co/olx"
    ],
    "maxJobsPerCompany": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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 = {
    "companies": [
        "https://jobs.lever.co/palantir",
        "zoox",
        "https://jobs.eu.lever.co/olx",
    ],
    "maxJobsPerCompany": 20,
}

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

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

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

```

## CLI example

```bash
echo '{
  "companies": [
    "https://jobs.lever.co/palantir",
    "zoox",
    "https://jobs.eu.lever.co/olx"
  ],
  "maxJobsPerCompany": 20
}' |
apify call themineworks/lever-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

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

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rFXDBHyKukwlAz9Df/builds/m1ue8rI0hhb5f9XxG/openapi.json
