ATS Jobs API - Greenhouse, Lever, Ashby, Workday & More avatar

ATS Jobs API - Greenhouse, Lever, Ashby, Workday & More

Pricing

from $2.00 / 1,000 results

Go to Apify Store
ATS Jobs API - Greenhouse, Lever, Ashby, Workday & More

ATS Jobs API - Greenhouse, Lever, Ashby, Workday & More

Job postings from 8 ATSs via official public endpoints: Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Teamtailor, Personio. Delta mode returns only NEW jobs since the last run, with webhook alerts. No API keys needed.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Starsurfer

Starsurfer

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

a day ago

Last modified

Share

ATS Jobs API — Greenhouse, Lever, Ashby, Workday & More Job Postings Scraper

Pull clean, structured job postings straight from company career sites — a job board API and job scraper built on each ATS's official public endpoints, not fragile HTML scraping. Point it at any careers page and get normalized JSON back. Built-in delta mode returns only jobs that are new since your last run (new job alerts without duplicates), and an optional webhook pings your endpoint the moment new jobs appear.

No API keys. No LLM costs. No proxies needed.

Supported applicant tracking systems

ATSWhat to provideEndpoint used
GreenhouseBoard URL, e.g. https://boards.greenhouse.io/stripeOfficial Job Board API
LeverBoard URL, e.g. https://jobs.lever.co/spotify (EU boards supported)Official Postings API
AshbyBoard URL, e.g. https://jobs.ashbyhq.com/rampOfficial Job Posting API
WorkdayCareers URL, e.g. https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSiteOfficial CXS JSON API
SmartRecruitersCareers URL or smartrecruiters:CompanyIdOfficial public Posting API
RecruiteeCareers URL or recruitee:tenantOfficial public offers API
TeamtailorCareers URL or teamtailor:tenantOfficial jobs feed
PersonioCareers URL or personio:tenantOfficial public jobs feed

Mix any number of companies across all eight systems in a single run — one unified schema for scraping Greenhouse jobs, Lever postings, Ashby boards, Workday careers pages, and more.

Why this actor

  • Delta mode (the killer feature). The actor remembers every job it has seen per company. Each run returns only new postings — perfect for job alerts, lead generation (new roles = hiring signal = budget), talent-market intelligence, or feeding a job board or aggregator without duplicates.
  • Webhook alerts. Give it a URL (Zapier, Make, n8n, Slack-compatible bridge, your own API) and it POSTs the full list of new jobs whenever there are any. Silent when nothing changed — no noise.
  • Official endpoints only. These are the same JSON/XML feeds the career sites themselves use. No brittle CSS selectors, no headless browsers, no anti-bot arms race — which means it's fast, cheap, and stable.
  • Normalized output. One consistent schema across all eight ATSs: title, company, url, location, department, employmentType, postedAt, description, and more.

Input example

{
"sources": [
"https://boards.greenhouse.io/stripe",
"https://jobs.lever.co/spotify",
"https://jobs.ashbyhq.com/ramp",
"https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite",
"https://jobs.smartrecruiters.com/Bosch",
"recruitee:framestore",
"teamtailor:statsperform",
"personio:demo"
],
"deltaMode": true,
"webhookUrl": "https://hooks.example.com/new-jobs"
}

Schedule it (hourly/daily) in the Apify console and you have a zero-maintenance new-jobs monitor.

Output example

{
"ats": "greenhouse",
"company": "stripe",
"id": "7954688",
"title": "Account Executive, AI Sales",
"url": "https://stripe.com/jobs/search?gh_jid=7954688",
"location": "San Francisco, CA",
"department": "Sales",
"postedAt": "2026-06-02T08:58:57-04:00",
"firstSeenAt": "2026-07-19T14:00:00.000Z",
"source": "greenhouse:stripe",
"isNew": true
}

Delta mode details

  • First run of a source seeds the memory and returns all current jobs (flagged isFirstRun). By default the webhook does not fire on a first run (enable webhookOnFirstRun if you want it).
  • Subsequent runs return only postings whose ID wasn't seen before. Removed/filled jobs are dropped from memory automatically (and counted in the run summary as removedJobs).
  • A run with zero new jobs pushes a single isSummary: true heartbeat item, so you can tell "no new jobs" apart from "run failed".
  • State lives in a named key-value store in your Apify account (ats-jobs-api-state by default). Use different stateStoreName values to run independent watchlists.
  • Turn deltaMode off to get a full snapshot of every job on every run.

Webhook payload

{
"event": "ats-jobs.new-jobs",
"actorRunId": "...",
"timestamp": "2026-07-19T14:00:00.000Z",
"totalNewJobs": 3,
"sources": [{ "source": "greenhouse:stripe", "totalJobs": 524, "newJobs": 3, "removedJobs": 1, "ok": true }],
"newJobs": [ { "...": "same objects as the dataset" } ]
}

Delivery is retried 3× with backoff. A run summary is always saved to the SUMMARY key of the run's key-value store.

Common use cases

  • Job alerts for candidates: watch dream companies across Greenhouse, Lever, Ashby and Workday, get pinged the hour a role opens.
  • Sales/lead intelligence: new job postings are the classic hiring signal — new engineering roles at a target account mean budget and growth.
  • Recruiting & talent mapping: track competitors' hiring by department and location over time.
  • Job boards & aggregators: clean, deduplicated, ATS-agnostic job feed with zero scraping infrastructure.
  • Market research: hiring velocity by company, geography, or function.

FAQ

Does it need API keys or logins? No. All eight ATSs expose public listing feeds for their hosted career sites; this actor reads those directly.

How fresh is the data? As fresh as your schedule — the feeds are live. Hourly schedules work fine and stay cheap because delta mode only bills for new results.

Which ATS is a company on? Look at their careers page URL: boards.greenhouse.io/x → Greenhouse, jobs.lever.co/x → Lever, jobs.ashbyhq.com/x → Ashby, *.myworkdayjobs.com → Workday, and so on. Paste the URL — the actor auto-detects the system.

A company's careers page isn't on one of these eight — will it work? Not yet. The actor tells you exactly which sources it couldn't parse in the run summary. More ATSs may be added — leave a request in the Issues tab.

What if an ATS changes its endpoint? The actor is tested daily by an automated run across all eight systems. If a feed breaks, it gets fixed — that's the point of using one actor instead of maintaining your own scraper.


Also by signalgrove: AI Search Rank Tracker — monitor how your brand ranks in ChatGPT and Gemini answers (GEO/AI visibility).