Job Postings API - 750k+ jobs, 7 ATS feeds, change-tracked
Pricing
from $1.00 / 1,000 job records
Job Postings API - 750k+ jobs, 7 ATS feeds, change-tracked
One query, every ATS-hosted job, deduplicated, with what changed since yesterday. A normalized, change-tracked index built from official public feeds: Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Personio and Workday.
Pricing
from $1.00 / 1,000 job records
Rating
0.0
(0)
Developer
Roleset
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Job Postings API — 750k+ jobs from 7 ATS platforms, change-tracked
One query, every ATS-hosted job, deduplicated — and what changed since your last check.
This is an index, not a scraper. Job boards are read from the official public JSON
and XML feeds that Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Personio and
Workday publish for exactly this purpose. Nothing is parsed out of a rendered page, no
robots.txt is worked around, and no login is required anywhere in the chain.
Boards are crawled on a schedule, stored, and diffed. When you run this actor you are querying a database, not waiting on a live scrape — so a search over three quarters of a million postings returns in seconds.
Two modes
search — the market right now
Find open postings by keyword, title, company, domain, city, country, remote, ATS platform, department, employment type or posting date.
{ "mode": "search", "q": "platform engineer", "country": "US", "remote": true }
changes — only what moved
Every posting that opened, changed, closed or reopened since a timestamp, each with a
diff naming the fields that changed and their before and after values.
{ "mode": "changes", "since": "2026-09-01T00:00:00Z" }
Put this one on a schedule. It returns each event once, so a daily run costs you the
handful of things that actually moved rather than the whole result set again. Re-running
search and diffing it yourself is both more expensive and less accurate — a posting
edited twice between runs looks like one change to a diff and is two events here.
What a record contains
| Identity | stable id, title, normalized title, company, department, team |
| Location | structured {city, region, country, remote}, plus the raw string the employer wrote |
| Terms | employment type normalized across platforms; salary min/max/currency/interval where the board publishes one |
| Links | posting URL and apply URL |
| Timing | posted date, first seen, last seen, closed date |
| Provenance | which ATS and which board it came from, and when that board was last crawled |
Descriptions are included on request (includeDescription), in both HTML and plain text.
No personal data
The index contains companies and roles, never people. There are no applicants, no recruiter names and no contact details — person-shaped fields are discarded when a feed is parsed, and email addresses and phone numbers are stripped out of descriptions before anything is stored.
Freshness
Every active board is crawled at least every 24 hours, and a board that changed on its last crawl is revisited sooner. Each run reports the age of the data behind the exact rows it returned, so you always know how fresh an answer is.
Coverage
| Platform | Boards |
|---|---|
| Greenhouse | 6,720 |
| SmartRecruiters | 5,811 |
| Personio | 4,724 |
| Ashby | 3,890 |
| Recruitee | 3,417 |
| Lever | 2,610 |
| Workday | 75 |
27,000+ boards, 26,000+ companies, 750k+ open postings.
SmartRecruiters postings carry no description. Their list endpoint does not include one and fetching each posting separately is not reachable at a polite crawl rate. Every other platform includes descriptions in full.
Cost
Priced per record you actually receive — $1.00 per 1,000 — with nothing charged for a
run that returns nothing. Use maxItems to cap a run, or Apify's own maximum-charge
limit; the actor reads that limit before it starts and stops at it rather than fetching
data you will not be billed for.
Already a roleset.io customer? Put your key in apiKey and the run is billed to your
existing allowance instead — Apify will not also charge you per record.
Links
- roleset.io — the API, the schema, and direct plans
- API docs
- Questions: index@roleset.io