# Lever Jobs Feed | Public Postings API (`zinin/lever-jobs-feed`) Actor

Collect published Lever jobs from company boards. One structured vacancy per paid result, with free diagnostics.

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

## Pricing

from $1.05 / 1,000 result founds

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 Feed — Published Jobs to Structured Records

Collect published job listings for recruiters, job aggregators, and B2B lead-generation workflows. The actor calls the official Lever Postings API once per company slug, without browser automation. It returns one dataset row per published vacancy. It does not submit applications or access candidate records.

### What you get

- One structured row per valid public job posting.
- Source identifiers, a direct source URL, and useful facts for analysis.
- Free diagnostics for source rejection, empty results, or buyer limits.
- Run it on Apify schedules, monitor it, call it through the API, and export JSON, CSV, or Excel.

### How to run it

1. Enter the public source value in **Lever company slugs**.
2. Adjust the optional result limit if needed.
3. Start the Actor and open its default dataset for results or free diagnostics.

### Pricing

Pay-per-event price: **$0.0015 per valid vacancy** (`result-found`), $0 per start and $0 for diagnostics. 100 jobs cost $0.15. There is no Actor-specific free quota; the Apify Free plan listed $5 monthly usage credit on 2026-11-01, subject to other usage. The same-unit Store comparator [bovi/greenhouse-lever-ashby-job-scraper](https://apify.com/bovi/greenhouse-lever-ashby-job-scraper) had 104 users in 30 days and an active $0.0015 Free-tier `job-result` price in a live API GET on 2026-11-01; it also charges a small start event, which this Actor does not.

The current `result-found` event price is $0.0015 per useful row. The following are Actor event charges:

| Useful rows | Actor event charges |
|---:|---:|
| 10 | $0.015 |
| 100 | $0.150 |
| 1,000 | $1.500 |

These examples assume that many valid, billed rows across one or more runs. Input limits and source availability may require several runs. Apify platform compute usage is separate.

### Input

| Field | Required | Purpose |
|---|---|---|
| `companySlugs` | Yes | Public Lever board slugs. erg and amtengineering were live employer boards; leverdemo is an official demo board. |
| `maxItems` | No | Maximum total number of jobs returned across the supplied boards. |
| `proxyConfiguration` | No | Accepted for schema compatibility but unused by the direct public API. |

```json
{
  "companySlugs": [
    "erg",
    "leverdemo",
    "amtengineering"
  ]
}
```

### Output

This row comes from a successful Actor run completed 2026-11-01T16:22:34.114Z. Values are copied from its dataset.

```json
{
  "id": "d3c3ea8e-2108-434a-99ef-1741b96e81a6",
  "title": "Boiler Technician",
  "department": "Consulting Services",
  "location": "Indian Head, MD",
  "hostedUrl": "https://jobs.lever.co/erg/d3c3ea8e-2108-434a-99ef-1741b96e81a6",
  "companySlug": "erg"
}
```

| Field | Meaning |
|---|---|
| `id` | Public source identifier for this result. |
| `title` | Published job title. |
| `department` | Public hiring department. |
| `location` | Public job location. |
| `hostedUrl` | Link to the source job posting. |
| `companySlug` | Supplied public company slug. |

The full output may also include `team`, `commitment`, `workplaceType`, `createdAt`, `applyUrl`, and `observedAt`. Free-text descriptions are never emitted because they can contain personal contacts. Missing source values are `null`. Dataset output is available from the run's default dataset `/items` endpoint.

### Other tools we built

#### Related tools

Related tools for adjacent workflows in jobs and hiring.

| Actor | What it does |
|---|---|
| [Ashby Jobs Feed | Public Posting API](https://apify.com/zinin/ashby-jobs-feed) | Pair it in the jobs and hiring workflow: Collect published Ashby jobs from supplied board names |
| [Greenhouse Jobs Feed | Public Job Board API](https://apify.com/zinin/greenhouse-jobs-feed) | Pair it in the jobs and hiring workflow: Collect published Greenhouse Job Board vacancies from supplied board tokens |
| [SmartRecruiters Jobs Feed | Public Posting API](https://apify.com/zinin/smartrecruiters-jobs-feed) | Pair it in the jobs and hiring workflow: Collect published SmartRecruiters jobs from company identifiers |
| [Recruitee Jobs Feed | Public Career Offers](https://apify.com/zinin/recruitee-jobs-feed) | Pair it in the jobs and hiring workflow: Collect public Recruitee career offers from company subdomains |
| [Teamtailor Jobs Feed | Public Career Sites](https://apify.com/zinin/teamtailor-jobs-feed) | Pair it in the jobs and hiring workflow: Extract job titles, locations, dates and URLs from supplied public Teamtailor career sites |

### FAQ / Limitations

#### Source conditions

Checked 2026-11-01:

- Lever's [official Postings API documentation](https://github.com/lever/postings-api) says: “This API is designed to help you create a job site.” It also states: “Note that all job postings in the published state are publicly viewable. These jobs may be scraped by third parties.” This describes published postings and third-party scraping; it does not itself grant a data-reuse license.
- [Lever Terms of Service](https://www.lever.co/terms-of-service/), last updated August 25, 2023, include: “Lever's direct competitors are prohibited from accessing the software and/or services provided by Lever, except with Lever's prior express written consent.” The terms govern customer use of Lever services; they are not a separate license for redistributing job data. Users must respect company and source conditions for their use case.
- The API response includes public job data (including `applyUrl`), not candidate applications. This actor uses only the GET postings endpoint, never the apply endpoint. Free-text descriptions are excluded entirely because contact redaction cannot guarantee removal of every person name.

#### Limitations

Only public Lever postings are supported. Company board availability and vacancy counts change. No cross-company search is offered. The six-source-request cap is enforced. Two real employer boards and the vendor demo were verified non-empty on 2026-11-01.

#### Frequently asked questions

**Can it discover every Lever company?** No. Supply known public slugs.

**Can it submit applications?** No. It reads the GET postings endpoint only.

**What if a board blocks access?** The Actor records a free diagnostic and does not retry or rotate proxies.

# Changelog

This Actor's version history is a separate document: https://apify.com/zinin/lever-jobs-feed/changelog.md

# Actor input Schema

## `companySlugs` (type: `array`):

Public Lever board slugs. erg and amtengineering were live employer boards; leverdemo is an official demo board.

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

Maximum total number of jobs returned across the supplied boards.

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

Accepted for schema compatibility but unused by the direct public API.

## Actor input object example

```json
{
  "companySlugs": [
    "erg",
    "leverdemo",
    "amtengineering"
  ],
  "maxItems": 50
}
```

# Actor output Schema

## `results` (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 = {
    "companySlugs": [
        "erg",
        "leverdemo",
        "amtengineering"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinin/lever-jobs-feed").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 = { "companySlugs": [
        "erg",
        "leverdemo",
        "amtengineering",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("zinin/lever-jobs-feed").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 '{
  "companySlugs": [
    "erg",
    "leverdemo",
    "amtengineering"
  ]
}' |
apify call zinin/lever-jobs-feed --silent --output-dataset

```

## MCP server setup

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

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/pJYZ9PYq0HqVtcxmJ/builds/JmW46gVjgeWog7Hgj/openapi.json
