# Lever jobs scraper for public company boards

> Lever jobs scraper for public boards. Add a company slug, board URL or job URL. Get one row per job with filters. No Lever account. JSON or CSV.

URL: https://cliqtomedia.com/actors/lever-jobs-scraper/

Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/lever-jobs-scraper?fpr=cliqto

Add a Lever company name or board link. You get each published job once, with a stable ID. Global and EU boards both work.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `leverdemo` in Lever boards or job URLs. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Lever job scraper for current published jobs from the public Lever boards you provide. Add a board slug, board URL, or one exact job URL. Get one row per unique job, ready for recruiting market research or job listings export.





## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Unique job result | $0.0003 | One unique useful job row saved to the default Dataset. |
| Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |

- One job: about $0.0023.
- 1,000 jobs: about $0.30.
- Every day 100 jobs, for 30 days: about $0.96 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/lever-jobs-scraper?fpr=cliqto

## Questions

### Do I need a Lever account or API key?

No. The tool reads public published postings through the Lever Postings API.

### Can I search jobs across every Lever company?

No. You must give known boards. There is no company search.

### Can I get one single job?

Yes. Paste the exact job URL. You get that job if it is still public.

### Does a second run show only new jobs?

No. Each run returns the current jobs. Compare IDs in your own system.

### Can I get EU jobs or one job URL?

Yes. Use an EU hosted board/job URL for EU mode. An exact posting URL returns that job if it remains public.

### Does a repeat run return only new jobs?

No. It returns a fresh snapshot. Duplicate jobs are removed within a run, not across runs.

### Can descriptions or locations be missing?

Yes. The source controls those fields. Check nulls, empty arrays and `includeContent`; do not treat missing fields as guessed values.

## Data fields

- `id` (string): Stable ID: lever:{region}:{board}:{postingId}.
- `source` (string): The public source name.
- `idRuleVersion` (string): Version of the stable identifier rule.
- `region` (string): Global or EU public Lever instance.
- `boardSlug` (string): Normalized public Lever site slug.
- `boardUrl` (string): Canonical public hosted board URL.
- `sourceJobId` (string): Upstream Lever posting ID.
- `title` (string): Published job title.
- `location` (string): Primary source location, when present.
- `locations` (array): Source location values.
- `department` (string): Source department, when present.
- `team` (string): Source team, when present.
- `commitment` (string): Source commitment, when present.
- `country` (string): Source ISO-2 country, when present.
- `workplaceType` (string): Source workplace type or unspecified.
- `openingHtml` (string): Source opening HTML when content is included.
- `openingText` (string): Plain opening text when content is included.
- `descriptionHtml` (string): Source combined description HTML.
- `descriptionText` (string): Plain combined description.
- `descriptionBodyHtml` (string): Source body HTML.
- `descriptionBodyText` (string): Plain body text.
- `lists` (array): Source list sections with title, HTML and text.
- `additionalHtml` (string): Source additional HTML.
- `additionalText` (string): Plain additional text.
- `salaryRange` (object): Source salary range when provided.
- `salaryDescriptionHtml` (string): Source salary note HTML.
- `salaryDescriptionText` (string): Plain salary note.
- `hostedUrl` (string): Canonical public job page.
- `applyUrl` (string): Source application URL; never submitted by the Actor.
- `createdAt` (string): Source creation time in ISO format.
- `observedAt` (string): Time this Actor observed the row.

## Input settings

- `targets` (array, required): Use a board slug such as leverdemo, a public Lever board URL, or one exact public job URL. Bare slugs use the global Lever service.
- `includeContent` (boolean): Keep the public HTML/plain job content and list sections in each result.
- `filters` (object): All filled filter groups must match. Values within one group use OR logic.
- `maxJobsPerTarget` (integer): Stop each board after this many useful results. Use 0 for no per-board cap.
- `maxTotalJobs` (integer): Maximum number of unique job rows saved in one run.
- `pageSize` (integer): Use the complete board response when 0. A positive value uses Lever skip/limit pages.
- `continueOnError` (boolean): Process independent targets after a technical failure and report a partial run.

## Step by step on Apify

1. Open the Input tab.
2. Keep the filled `targets` example, `leverdemo`, or enter your public Lever board URL.
3. Keep Include descriptions and lists on for the full content.
4. Click Start.
5. Open the default Dataset. Check `sourceJobId`, `title`, `hostedUrl` and `descriptionText` in the first row.
6. Open Key-value store → RUN_SUMMARY to check the target status and counts.

## Use cases

| Task | Input | Key fields | Next step |
|---|---|---|---|
| Export company job listings | Board slugs in `targets` | `sourceJobId`, `title`, `hostedUrl`, `applyUrl` | Export Dataset as JSON or CSV |
| Study hiring by team or place | `filters.teams`, `filters.locationIncludes` | `team`, `department`, `locations`, `commitment` | Group rows in your own sheet |
| Save public job content | `includeContent: true` | `descriptionHtml`, `descriptionText`, `lists` | Use the content in your own pipeline |
| Recheck a known posting | Exact job URL in `targets` | Stable `id`, `observedAt`, source fields | Compare snapshots in your own system |

## Tips

- The slug is the name in jobs.lever.co/name. Use an EU link for EU boards.
- Turn on continue after error when you check many boards in one run.
- Store job IDs yourself to spot new jobs. Each run is a fresh snapshot.

## Sample result

```json
{
  "id": "lever:global:leverdemo:ad208490-4052-4f91-a57e-433f2d1e484b",
  "sourceJobId": "ad208490-4052-4f91-a57e-433f2d1e484b",
  "boardSlug": "leverdemo",
  "title": "Customer Success Manager",
  "location": "Atlanta, Georgia",
  "locations": [
    "Atlanta, Georgia"
  ],
  "department": "Customer Success",
  "team": "Customer Success Team",
  "commitment": "Regular Full Time (Salary)",
  "workplaceType": "hybrid",
  "hostedUrl": "https://jobs.lever.co/leverdemo/ad208490-4052-4f91-a57e-433f2d1e484b",
  "applyUrl": "https://jobs.lever.co/leverdemo/ad208490-4052-4f91-a57e-433f2d1e484b/apply"
}
```

## Use it from code

Actor ID: `cliqtomedia/lever-jobs-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/lever-jobs-scraper").call(run_input={
    "targets": [
        "leverdemo"
    ],
    "includeContent": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~lever-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"targets": ["leverdemo"], "includeContent": true}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/lever-jobs-scraper")
result = tool.invoke({"run_input": {"targets": ["leverdemo"], "includeContent": True}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/): Know when a company hires, raises money or wins a contract. Reach out at the right moment.
- [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites.

## Similar tools

- [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/)
- [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/)
- [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/)
- [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/)
- [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/)
- [BambooHR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/bamboohr-jobs-monitor-scraper/)
