Careers & ATS Jobs API - Workday, Greenhouse - 50 Free
Pricing
$2.00 / 1,000 job listings
Careers & ATS Jobs API - Workday, Greenhouse - 50 Free
50 job listings free on every run. Get every open job from any company's own careers page. Reads official ATS APIs directly: Workday, Greenhouse, Lever, Ashby, SmartRecruiters, Rippling, Breezy, Personio, BambooHR - no cookies, no proxies. Clean rows: title, location, department, date.
Pricing
$2.00 / 1,000 job listings
Rating
0.0
(0)
Developer
omar khandji
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Share
ATS Jobs API — Workday, Greenhouse, Lever, Ashby & 5 More
Pull every open role straight from a company's own careers page, through the applicant-tracking system it publishes from. Official ATS endpoints only — no cookies, no proxies, no login, nothing that can be blocked. Clean, deduplicated, structured rows. 50 job listings free on every run.
Nine ATS providers, one schema, one call: Greenhouse, Lever, Ashby, SmartRecruiters, Rippling, Breezy HR, Workday, Personio, BambooHR.
Free tier — 50 job listings on every run
The first 50 job listings of every run are free. Not a trial, not a first-run coupon: it applies to every run you ever make, so you can wire this Actor into a pipeline and evaluate it on your own target companies before a cent is billed.
Beyond the free 50 you pay $0.002 per job listing — $2 per 1,000 — and only for listings actually delivered to you.
One guard, stated plainly: the free allowance never covers more than half of a run, so a run returning 20 listings gets 10 free rather than 20. That is what stops the free tier from becoming an unlimited free plan for anyone willing to split one job into many tiny runs, and what lets us keep offering it.
Quick start
Paste a few board tokens into Greenhouse company boards and press Start. The
prefilled defaults (stripe, airbnb, spotify, ramp, rippling, Visa,
Red Hat on Workday, personio) return well over a thousand live roles.
Or call it as an HTTP API — see Use it as a live HTTP API.
Why read the ATS instead of a job aggregator
Most job scrapers scrape an aggregator — LinkedIn, Indeed, a job board. That means cookies, proxies, rate limits, and roles that are already stale or reposted by an agency.
This Actor goes to the source: the ATS the employer publishes from.
| Aggregator scraper | This Actor | |
|---|---|---|
| What breaks it | anti-bot, layout changes, expired cookies | nothing — these are the companies' own public API endpoints |
| Freshness | an aggregator's copy, sometimes days old | the role as the employer published it |
| Duplicates | the same role reposted by three agencies | one row per role, deduplicated |
| Proxy bill | yes | none |
| Who reposted it | unknowable | irrelevant — it is first-hand |
Supported ATS providers
Every provider below is fetched in parallel, and you can mix as many companies and providers as you like in one call.
Greenhouse jobs API
Pass the board token — the path segment in boards.greenhouse.io/<token> or
job-boards.greenhouse.io/<token>. Example: stripe.
Greenhouse publishes the whole board in one document, so a company's full listing comes back in a single request. This is the fastest and most complete of the nine.
Workday jobs API
Pass the full careers URL exactly as it appears in your browser, with or
without the /en-US/ locale segment:
https://redhat.wd5.myworkdayjobs.com/en-US/jobs
The Actor derives the search endpoint itself and pages through the results.
Workday is the one that matters for enterprises — it is what most large employers run on, and a single tenant can advertise thousands of roles. Two things to know: Workday returns 20 roles per page, and this Actor pages up to 200 roles per tenant per run so a single company cannot consume your whole budget. Need more from one tenant, run it again against a narrower Workday site URL (Workday tenants usually expose several, one per region or job family).
Lever postings API
Pass the company handle from jobs.lever.co/<handle>. Example: netflix.
Ashby jobs API
Pass the board name from jobs.ashbyhq.com/<board>. Common among
venture-backed startups.
SmartRecruiters jobs API
Pass the company identifier from careers.smartrecruiters.com/<id>.
Rippling ATS jobs
Pass the company handle from ats.rippling.com/<handle>.
Breezy HR jobs
Pass the company handle from <handle>.breezy.hr.
Personio jobs API
Pass the company handle from <handle>.jobs.personio.de. Personio is
widespread across European, especially German-speaking, employers.
BambooHR jobs
Pass the company handle from <handle>.bamboohr.com.
Output schema
One clean row per role:
{"source_url": "https://boards.greenhouse.io/stripe/jobs/6789","title": "Account Executive, AI Sales","company": "stripe","location": "New York","department": "Sales","salary": "$120,000 - $160,000","posted_at": "2026-07-20T09:12:00Z","source": "greenhouse"}
| Field | What it holds |
|---|---|
source_url | canonical link to the role on the employer's own board |
title | role title as published |
company | the handle or board you passed |
location | as the employer wrote it |
department | team or department, when the ATS exposes one |
salary | posted range, when the employer published one |
posted_at | ISO-8601 publication timestamp, when available |
source | which ATS the row came from |
Duplicates across boards are removed. Seniority and job function are inferred and attached, so you can filter without post-processing.
Use it as a live HTTP API
With Standby enabled, the Actor answers HTTP directly — no run to start, no container to wait for:
curl -H "Authorization: Bearer $APIFY_TOKEN" \"https://om-kh--vigia-clean-jobs-delta.apify.actor/?greenhouseBoards=stripe,gitlab"
import requestsresponse = requests.get("https://om-kh--vigia-clean-jobs-delta.apify.actor/",params={"greenhouseBoards": "stripe,gitlab", "maxTotalChargeUsd": 0.5},headers={"Authorization": f"Bearer {token}"},timeout=300,)for job in response.json()["jobs"]:print(job["title"], "-", job["location"])
The response is JSON: jobs, jobs_returned, jobs_charged,
free_results_granted, hiring_signal and source_errors. List parameters take
comma-separated values; a JSON body works too if you prefer POST.
Two limits worth knowing. Apify kills a Standby request at five minutes, so
one HTTP call accepts up to 12 boards and reports any it skipped in
boards_skipped — send more in a second call, or use the batch mode for a large
sweep. The exact hostname for your account is shown on the Actor's Standby
settings tab.
Bonus: only the new roles, plus a hiring signal
Pass the previous run's output as previousJobs and you get only what
changed — roles opened, roles updated — plus a hiring-growth summary in
HIRING_SIGNAL.json.
That turns the Actor into a hiring-intent feed: which teams a company is staffing
up, in which cities, starting when. Useful for sales triggers ("they just opened
12 sales roles"), recruiting, and competitive research. Leave previousJobs empty
and you simply get the full current list.
Frequently asked questions
Is there a free Workday jobs API?
Workday exposes a public search endpoint on every tenant's careers site, and this Actor reads it directly. No Workday account, key or partnership is needed. The first 50 listings of every run are free here; beyond that it is $0.002 per role.
How do I get jobs from a company's own careers page?
Find which ATS the company uses — the careers page URL usually gives it away
(boards.greenhouse.io/..., jobs.lever.co/..., <tenant>.myworkdayjobs.com/...)
— then pass that handle or URL in the matching field. If the URL does not match
any of the nine providers above, the company is on something else and this Actor
cannot read it.
Does this scrape LinkedIn or Indeed?
No, deliberately. Those are aggregators: their copies are second-hand, often stale, and reposted by recruiters. This Actor reads the employer's own ATS, so every row is first-hand. If you do want aggregator coverage, see the related scrapers at the bottom.
Will it break when a site changes its layout?
There is no layout involved. These are JSON API endpoints the companies publish
for their own careers pages, so there is nothing to parse and no anti-bot to
fight. A provider can still change its API — when a board is unreachable it is
reported in source_errors and costs you nothing.
How many jobs will one run return?
As many as the companies have published, minus duplicates, subject to your own
maxTotalChargeUsd cap and the 200-per-tenant Workday limit. For reference, a
single large Greenhouse board typically returns 300–600 live roles.
What does it cost to try?
Nothing. The first 50 listings of every run are free, forever, and a board whose ATS fails is never billed.
Can an AI agent use it?
Yes. RUN_SUMMARY.json and HIRING_SIGNAL.json give an agent the outcome
without re-reading the dataset, and the Standby endpoint above is a plain HTTP
JSON API.
Limits and costs
- Hard cost cap. Set
maxTotalChargeUsdand the run can never bill above it. - A failed board is never billed. Unreachable ATS endpoints are reported in
source_errorsand cost you nothing. - Workday: up to 200 roles per tenant per run, 20 per page.
- Standby: up to 12 boards per HTTP request, 5-minute platform timeout.
- Free tier: 50 listings per run, never more than half of a run.
Related scrapers
Same data, other sources — all with the same free tier, the same clean schema and the same pay-only-for-what-you-get billing: