---
title: "Job Postings Scrape API Reference | Leadsets Docs"
description: "POST /v1/scrape/jobs: open roles from a careers page or job board with title, team, location and link. 1 scrape unit per page read, paid plans."
canonical: https://www.leadsets.ai/docs/api/scrape-jobs
updated: 2026-11-11
---

REST API / Scrape

# Scrape open roles

Open roles from a company's careers page, on its own site or a job board it links to: title, link, team, location and posted date when the page shows them.

POST /v1/scrape/jobs MCP: scrape_jobs

Scrape units

1 per page read

Plans

Paid plans with scrape units

No careers page

0 units

## Body parameters

domain string

Company domain, e.g. "northwind.io".

url string

The careers page or job board, if you know it. Overrides `domain`.

max_pages integer

1–10. Default 3.

## How roles are found

The careers page is found from the site map (paths like /careers or /jobs, shortest first) or from a Greenhouse, Lever, Ashby or Workable board. If it links to a board, the board is read too. When roles are spread over several pages, pages below the careers path are read, up to `max_pages`.

## Response

`domain`, `careers_url`, `jobs` (each with `title`, `url`, `team`, `location`, `posted`, `source` and `found_on`), `count`, `units_used` and `scraped_at`. Then `usage` with `scrape_units_counted` and `scrape_units_left`, and `request_id`.

`team`, `location` and `posted` are null when the page doesn't show them. `source` is where the role is listed: `greenhouse`, `lever`, `ashby`, `workable`, `recruitee`, `smartrecruiters`, `bamboohr` or `site`.

## Errors

| Status | type | Meaning |
| --- | --- | --- |
| `400` | `invalid_request` | A value isn't valid. The message names the field in `param`. |
| `401` | `unauthorized` | Missing, invalid, expired or revoked key. See [Authentication](https://www.leadsets.ai/docs/authentication). |
| `402` | `scrape_units_exhausted` | No scrape units left. Add a pack in Billing. |
| `403` | `forbidden` | Free plan: scraping isn't included, and the body has `upgrade_url`. Also returned for read-only keys. |
| `404` | `not_found` | No careers page found. Nothing was counted. |
| `503` | `unavailable` | Scraping is busy or down. Nothing was counted. See Retry-After. |

[Previous
**← scrape_company**](https://www.leadsets.ai/docs/api/scrape-company) [Next
**GET /jobs/{id} →**](https://www.leadsets.ai/docs/api/jobs)

Was this page useful? [Tell us](mailto:support@leadsets.ai?subject=Docs%20feedback%3A%20%2Fdocs%2Fapi%2Fscrape-jobs)

```bash
curl https://api.leadsets.ai/v1/scrape/jobs \
 -H "Authorization: Bearer $LEADSETS_KEY" \
 -H "Content-Type: application/json" \
 -H "Idempotency-Key: 3d9f…" \
 -d '{
   "domain": "northwind.io"
 }'
```

```ts
import { Leadsets } from "@leadsetsai/sdk";

const ls = new Leadsets(process.env.LEADSETS_KEY);
const res = await ls.scrape.jobs({
 domain: "northwind.io",
});
```

```python
import os
from leadsets import Leadsets

ls = Leadsets(os.environ["LEADSETS_KEY"])
res = ls.scrape.jobs(
   domain="northwind.io",
)
```

Response 200 OK

```
{
 "domain": "northwind.io",
 "careers_url": "https://northwind.io/careers",
 "jobs": [
   { "title": "Senior Account Executive",
     "url": "https://boards.greenhouse.io/northwind/jobs/4821930",
     "team": "Sales", "location": "New York, NY", "posted": null,
     "source": "greenhouse",
     "found_on": "https://boards.greenhouse.io/northwind" }
 ],
 "count": 1,
 "units_used": 2,
 "scraped_at": "2026-11-11T09:41:17Z",
 "usage": { "scrape_units_counted": 2, "scrape_units_left": 995 },
 "request_id": "req_b71c3e0a9d52"
}
```

---

Leadsets by Mobylogix LLC, 10160 hwy 242, Conroe, TX, 77385, US. Facts for AI assistants: https://www.leadsets.ai/llm · Site index: https://www.leadsets.ai/llms.txt · Every page: https://www.leadsets.ai/llms-full.txt
