Workday, Greenhouse & Lever Jobs API (35 sources)
Pricing
Pay per event
Workday, Greenhouse & Lever Jobs API (35 sources)
Company name in, new jobs out. Open jobs from 30 ATS and 5 job feeds (Workday, Greenhouse, Lever, Ashby, Oracle, SuccessFactors, Phenom and more) in one JSON schema, with filters and a daily new-job watch. $1.50 per 1,000 jobs, $2.00 from 2026-11-05.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Nguyen Vu Trung Hieu
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Share
Job Board Scraper: Workday, Greenhouse, Lever and 32 More Sources, One Schema
Get every open job from any company on 30 applicant tracking systems (ATS), from Workday, Greenhouse, Lever, Oracle Recruiting Cloud, SAP SuccessFactors and Phenom to Gupy, Keka and Beisen, plus 5 open job feeds, in one identical JSON shape whichever system the company uses. Paste careers URLs or company names, set filters, and get clean rows ready for a spreadsheet, a database or an AI agent. Pay per use: $1.50 per 1,000 jobs, and $2.00 per 1,000 jobs from 2026-11-05. No API key, failed boards are free.
This Actor reads only the public job-board endpoints that each ATS publishes for career pages and job portals. It checks robots.txt where the employer controls the host (Workday, Oracle, Eightfold, SuccessFactors, Phenom). It does not log in, does not use proxies, and never touches candidate data.
Why this Actor
- 35 sources behind one schema. Workday, Oracle, SuccessFactors, Phenom, Eightfold and Cornerstone cover most large employers; Greenhouse, Lever, Ashby, Gem and Rippling cover tech startups; Personio, Recruitee, Teamtailor, softgarden and Homerun cover Europe; Gupy (Brazil), Keka (India) and Beisen (China) cover big markets the usual scrapers miss.
- Open job feeds too. Remote OK, Himalayas, Jobicy, Arbeitnow and Sweden's JobTech ads (CC0) by search term.
- Company names work. Give "Stripe" or "stripe.com" and the Actor finds the board on Greenhouse, Lever, Ashby, Workable or SmartRecruiters.
- Filters that save money. Title keywords, excluded words, location, remote, department, employment type, posting date and pay are applied before you are charged, so you pay only for jobs you keep.
- New and closed roles. Turn on
onlyNewand schedule the Actor: each run returns only jobs it has not sent before, plus a free row for each role that closed, so a daily hiring-signal feed costs cents. - Full descriptions and pay where the company publishes them, with ISO country codes, and a workplace type wherever the job or its place says remote, hybrid or on site.
Use it for hiring-signal and sales-trigger lists, job aggregators and niche job boards, recruiting research, labor-market data, and AI agents that need to answer "what roles does this company have open".
Quick start
{"companies": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite","Stripe","https://jobs.lever.co/spotify","personio:entityx"],"titleKeywords": ["engineer", "developer"],"excludeTitleKeywords": ["intern"],"postedWithinDays": 7,"maxItems": 500}
companies takes a mix of:
- careers URLs from any supported ATS (the ATS and board are detected for you);
ats:slugtokens such asgreenhouse:airbnborworkday:nvidia.wd5/NVIDIAExternalCareerSite; sites on the employer's own domain (SuccessFactors, Phenom) need a token, see the table below;- company names or domains such as
Stripeorstripe.com(looked up on Greenhouse, Lever, Ashby, Workable and SmartRecruiters); { "ats": "lever", "slug": "spotify" }objects.
Filters and options
| Input | What it does |
|---|---|
keyword | Every word must appear in the title, department, team or description. |
titleKeywords | Keep a job when its title has any of these phrases. |
excludeTitleKeywords | Drop a job when its title has any of these phrases. |
location | Text in a location or city, or a country name or ISO code (Germany, DE). |
remote | true keeps only remote jobs. |
department | Text in the department or team name. |
employmentTypes | Any of full_time, part_time, contract, intern, temporary, other. Jobs whose ATS gives no type (Greenhouse, Teamtailor) are dropped by this filter. |
postedWithinDays, postedSince | Keep jobs published in the last N days, or on or after a date. |
withSalary | Keep only jobs that publish pay. |
maxJobsPerCompany | Cap per company after filtering (default 1000). |
maxItems | Cap for the whole run. Use it to cap cost. |
includeDescription | Workday, SmartRecruiters, BambooHR, Oracle, Eightfold, ADP, Paylocity, Gupy, Phenom and Polymer give the text, type or pay on a second request per job; false skips it for a faster list, and filters on those fields then keep the job. |
onlyNew, monitorName, includeClosed | Return only jobs this watch has not returned before, plus free rows for roles that closed since. Keep one monitorName per search. |
Watch new and closed roles
- Set your companies and filters, turn on Only new jobs, and give the watch a name such as
sales-leads-de. - Save the input as an Apify task and add a daily schedule.
- Each run returns only jobs that the watch has not sent before, and a free
closedrow for each role it sent earlier that is now gone from the board. You pay only for the new jobs.
The first run returns every current match and no closed rows.
The watch remembers job ids and open roles in a named key-value store in your own Apify account (job-board-monitor).
Jobs that a spending limit cut from a run come back on the next run.
A board read that stops early reports no closed roles, so a role is never marked closed only because it was past the cut (Workday lists at most 2,000 jobs).
Turn off includeClosed to get new jobs only.
A closed row looks like this:
{ "type": "closed", "id": "4012345", "ats": "greenhouse", "companySlug": "stripe", "companyName": "Stripe", "title": "Account Executive", "sourceUrl": "https://job-boards.greenhouse.io/stripe/jobs/4012345", "closedAt": "2026-10-23T02:00:00.000Z" }
What you get
One record per job, with the same fields for every ATS:
| Field | Meaning |
|---|---|
id, ats, companySlug, companyName | Stable identity. Jobs are deduplicated by ats + id. |
title, department, team | As published. null where the ATS has no such field. |
locations[] | name as published, plus city, region and country (ISO 3166-1 alpha-2 code such as US). |
remote | true when remote, false when hybrid or on-site, null when unknown. |
workplaceType | remote, hybrid, onsite or null. |
employmentType | full_time, part_time, contract, intern, temporary, other or null. |
compensation | min, max, currency, interval, summary when the company publishes pay, else null. |
descriptionHtml, descriptionText | Full description as HTML and as plain text. |
applyUrl, sourceUrl | Where candidates apply, and the public posting page. |
postedAt, updatedAt | ISO 8601 where the ATS gives them: a date only (2026-10-15) on Workday and BambooHR, a full time elsewhere. |
A board that cannot be read produces an error record (type: "error", with code, message, retryable, status) instead of failing the run.
Error records are never charged.
Example output (Workday)
{"type": "job","id": "Senior-Verification-Engineer--PCIE_JR2026568-1","ats": "workday","companySlug": "nvidia.wd5/NVIDIAExternalCareerSite","companyName": "Nvidia","title": "Senior Verification Engineer, PCIE","department": null,"team": null,"locations": [{ "name": "India, Bengaluru", "city": "Bengaluru", "region": null, "country": "IN" }],"remote": null,"workplaceType": null,"employmentType": "full_time","compensation": null,"descriptionText": "NVIDIA is seeking an elite Senior Verification Engineer to verify the design and implement...","applyUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/India-Bengaluru/Senior-Verification-Engineer--PCIE_JR2026568-1/apply","postedAt": "2026-10-15","updatedAt": null,"sourceUrl": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/India-Bengaluru/Senior-Verification-Engineer--PCIE_JR2026568-1"}
Supported sources
| Source | Careers URL or token | Description | Pay |
|---|---|---|---|
| Workday | nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite | yes | in the text only |
| Greenhouse | boards.greenhouse.io/airbnb | yes | when pay ranges are published |
| Lever | jobs.lever.co/spotify | yes | when a salary range is published |
| Ashby | jobs.ashbyhq.com/notion | yes | when published |
| SmartRecruiters | jobs.smartrecruiters.com/Canva | yes | no |
| Workable | apply.workable.com/huggingface | yes | no |
| BambooHR | bibliu.bamboohr.com/careers | yes | when published |
| Personio | entityx.jobs.personio.com | yes | no |
| Recruitee | addepto.recruitee.com | yes | when published |
| Breezy HR | bitwave.breezy.hr | no | when published |
| Teamtailor | paysend.teamtailor.com | yes | no |
| Pinpoint | actica.pinpointhq.com | yes | when published |
| Rippling | ats.rippling.com/aalyria-careers/jobs | no | no |
| Gem | jobs.gem.com/11x-ai | yes | no |
| Manatal | www.careers-page.com/manatal | yes | no |
| Polymer | jobs.polymer.co/sellscale | yes | when published |
| Homerun | openred.homerun.co | yes | when published |
| Trakstar Hire | aerosonic.hire.trakstar.com | yes | no |
| softgarden | abpinduction.career.softgarden.de | yes | no |
| Paylocity | recruiting.paylocity.com/Recruiting/Jobs/All/{id} | yes | no |
| Oracle Recruiting Cloud | eify.fa.us6.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001 | yes | no |
| Eightfold | token eightfold:albemarle/albemarle.com (site / email domain) | yes | no |
| JobScore | careers.jobscore.com/careers/unified | yes | no |
| ADP Workforce Now | workforcenow.adp.com/...recruitment.html?cid={cid} | yes | when published |
| Gupy | 4mk.gupy.io | yes | no |
| Keka | abcoffee.keka.com/careers | yes | when published |
| Beisen | mediatek.zhiye.com | yes | when published |
| SAP SuccessFactors | token successfactors:apply.iav.com (the careers host) | yes | no |
| Phenom | token phenom:careers.southwestair.com/us/en (host / country / language) | yes | no |
| Cornerstone OnDemand | americares.csod.com/ux/ats/careersite/1/home?c=americares | yes, when the site writes one | no |
| Remote OK (feed) | remoteok:python (a tag) | yes | when published |
| Himalayas (feed) | himalayas:python (a search) | yes | when published |
| Jobicy (feed) | jobicy:python (a tag) | yes | when published |
| Arbeitnow (feed) | arbeitnow:all | yes | no |
| JobTech, Sweden (feed) | jobtech:python (a search) | yes | no |
What is new in 0.3
- 24 new sources: Pinpoint, Rippling, Gem, Manatal, Polymer, Homerun, Trakstar Hire, softgarden, Paylocity, Oracle Recruiting Cloud, Eightfold, JobScore, ADP Workforce Now, Gupy, Keka, Beisen, SAP SuccessFactors, Phenom and Cornerstone OnDemand, plus the Remote OK, Himalayas, Jobicy, Arbeitnow and JobTech feeds.
- Every new source was read live against real boards before release.
- Feed jobs link to the feed's own post page, as each feed's terms ask.
Use it from an AI agent (MCP)
The same tool is a hosted MCP server and HTTP API at api.openkrill.app (tool name list_jobs, overview at tools.openkrill.app).
On Apify you can also call this Actor from any MCP client through the Apify MCP server.
The input is a plain list of strings with no credentials, so an agent can fill it in from a company name or a careers link.
Pricing
Pay per event, one job-returned event per job in the dataset:
| Apify plan | Until 2026-11-05 | From 2026-11-05 |
|---|---|---|
| Free and Starter | $1.50 per 1,000 jobs | $2.00 per 1,000 jobs |
| Scale (Silver) | $1.25 per 1,000 jobs | $1.70 per 1,000 jobs |
| Business (Gold) and above | $1.00 per 1,000 jobs | $1.40 per 1,000 jobs |
Failed boards and error records are free.
Filters run before charging, so jobs you filter out cost nothing.
Set maxItems and the run's maximum cost to cap spend.
FAQ
Do I need an API key or an account with the ATS? No. Only public job-board endpoints are used.
How do I find a company's board?
Give its name or domain, or paste its careers page URL. For Workday, open the company's jobs page and copy the URL that contains myworkdayjobs.com.
How are company names resolved?
The name or domain is turned into likely board names ("Mistral AI" gives mistralai and mistral) and each is checked on Greenhouse, Lever, Ashby, Workable and SmartRecruiters.
A list of known boards is checked first.
The guess can miss or hit a different company with the same board name: check companyName on the first run, or pass the careers URL to be sure.
Why did a company name return "board_not_found"? No board with a matching name was found on those five ATS. For a company on another ATS, or on a custom careers domain, paste the careers URL.
Is salary included? Yes, where the company publishes pay in a field: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, BambooHR, Personio, Recruitee, Breezy HR, Teamtailor, Pinpoint, Polymer, Homerun, ADP, Keka, Beisen, JobTech and the job feeds. Workday puts pay inside the description text.
How many jobs can it read from one Workday board?
Up to 2,000, which is the most the Workday careers site lists. Filters and maxJobsPerCompany stop the read early.
Limits
- Only the supported sources, and only their public boards.
- Workday boards are read 20 jobs per page, at most 2,000 jobs per board; descriptions take one request per kept job.
- Breezy HR and Rippling publish no description in their public lists.
- Large SuccessFactors feeds run to several megabytes; a board read can take a minute.
employmentTypesdrops jobs from ATS that never state a type.- Every run reads the boards live; there is no cache in the Actor.
Privacy
Output contains only company-published job data. No candidate, recruiter or other personal data is collected or returned.
See docs/notes.md for endpoint details and known failure modes.