ATS Jobs Scraper: Workday, Greenhouse, Lever & Ashby
Pricing
from $0.80 / 1,000 jobs
ATS Jobs Scraper: Workday, Greenhouse, Lever & Ashby
Get every open job posting from company career pages on Workday, Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee and Workable: title, team, location, remote, salary when published, apply link, clean description. Only-new-jobs mode for daily feeds. Public job-board APIs, pay per job.
Pricing
from $0.80 / 1,000 jobs
Rating
0.0
(0)
Developer
PlainRows
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
Get every open job a company publishes on its careers page — Greenhouse, Lever, Ashby, Recruitee, Workable, SmartRecruiters and Workday — as clean rows: title, department, team, locations, remote flag, employment type, salary range when published, posting date, apply link and the full description as plain text. Paste careers page URLs, or just company names (stripe, airbnb) and the ATS is detected for you.
It reads the official public job-board APIs these applicant tracking systems provide for career sites: no browser, no proxies, results in seconds (a few hundred jobs in under 10 seconds; Workday is slower, see below). Until October 25, 2026 you only pay for jobs returned; from October 25, 2026 each run also costs $0.002 to start. Companies not found, boards without open jobs and jobs removed by your filters are free.
Typical uses
- Job boards and aggregators: keep a niche board (AI, climate, fintech, remote) filled with fresh jobs straight from the employers.
- Sales and recruiting intelligence: which target accounts are hiring, for which teams, where — a strong buying signal for B2B sales and agencies.
- Market and talent research: count openings per department, track hiring trends, compare published salary ranges across companies.
- Job seekers and career tools: monitor a list of dream companies for new roles matching your keywords, locations or remote-only. With Only new jobs on, a scheduled run returns (and bills) only jobs it has never delivered.
- Automations and AI agents: feed n8n, Make, Zapier, Google Sheets, Airtable or an MCP client with structured JSON.
What you get for each job
| Field | Description |
|---|---|
company, ats, boardToken, boardUrl | Company (or board name when the ATS does not publish it; the Workday tenant, e.g. nvidia), which ATS, the board and its URL |
boardDiscoveredFrom | When you gave a company website: the page of that site where the job board link was found (otherwise null) |
jobId, title | Job ID in the ATS and job title |
department, team | Department, and team where the ATS has one (Lever, Ashby); always null on Workday, whose public API has no department per job |
location, locations, countryCode | Main location as published, all listed locations, ISO country code when the ATS gives one (Workday: country of the main location) |
workplaceType, isRemote | remote, hybrid or onsite when published; isRemote is true for remote jobs or jobs listing a remote location |
employmentType | FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN (or the label as published) |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText | Pay range when the company publishes it (Greenhouse pay transparency, Lever salary range, Ashby compensation, Recruitee salary) |
postedAt, updatedAt | First published and last updated, UTC ISO 8601 (updatedAt on Greenhouse and Recruitee; Workday gives a day, e.g. 2026-10-11T00:00:00.000Z) |
jobUrl, applyUrl | Job page and application page (Workday: both are the job page, which carries the Apply button) |
descriptionText | Full description as readable plain text (descriptionHtml too with includeHtml) |
companyInput, observedAt | Your input line and when the data was fetched |
Missing values are always null, never guessed. Jobs are sorted newest first within each company.
Input
{"companies": ["stripe","https://jobs.lever.co/spotify","https://jobs.ashbyhq.com/ramp","https://bunq.recruitee.com","https://apply.workable.com/huggingface","https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],"maxJobsPerCompany": 500,"titleKeywords": ["engineer"],"locations": ["London", "Remote"],"remoteOnly": false,"postedWithinDays": 30}
- companies: up to 1,000 per run. Accepted:
boards.greenhouse.io/<name>,job-boards.greenhouse.io/<name>,jobs.lever.co/<name>,jobs.eu.lever.co/<name>,jobs.ashbyhq.com/<name>,<name>.recruitee.com,apply.workable.com/<name>,jobs.smartrecruiters.com/<name>orcareers.smartrecruiters.com/<name>, Workday careers sites (<company>.wd<N>.myworkdayjobs.com/<site>, with or without a language such as/en-US/, orwd<N>.myworkdaysite.com/recruiting/<company>/<site>), the API URLs of these boards, or a plain name (stripe), which is looked up on Greenhouse, Lever, Ashby, Recruitee and SmartRecruiters in that order (the first board with open jobs wins). A company website (stripe.com) is tried as the namestripe. Workday is only reached through a careers page URL: its address holds a server number and a site name that cannot be guessed from the company name. - ats (optional): look plain names up on one ATS only. Workable is never auto-detected: paste its URL or pick it here. Workday needs the careers page URL: with
atsset toworkday, plain names are rejected as invalid input. - maxJobsPerCompany: 1 to 10,000 (default 500), most recent first.
- Free filters:
titleKeywords,excludeTitleKeywords,locations,departments(case and accent insensitive),remoteOnly,postedWithinDays. Jobs removed by a filter are never billed. - includeDescription (default true) and includeHtml (default false) control description fields.
- onlyNewJobs (optional, monitoring): return only jobs never delivered to you before for the same job board. See below.
- monitorName (optional): name of the key-value store in your account that remembers delivered jobs (default
plainrows-jobs-monitor).
Companies without a result get one free row with found: false and a reason: COMPANY_NOT_FOUND, NO_OPEN_JOBS, NO_JOB_MATCHED_FILTERS, NO_NEW_JOBS (monitoring: every matching job was already delivered), DUPLICATE_BOARD (two inputs pointing to the same board: its jobs are listed once) or SOURCE_UNAVAILABLE (the ATS did not answer; retry later).
Monitor companies: get only new jobs
Turn on Only new jobs ("onlyNewJobs": true) and add an Apify schedule (daily, for example). The first run returns every matching job and remembers their IDs in a key-value store of your own Apify account; each later run returns and bills only jobs it has never delivered. A company with nothing new gets a free row with reason NO_NEW_JOBS.
- History is kept per job board, whatever the filters: a job is delivered once. Jobs left out by
maxJobsPerCompanyor your run budget stay new for the next run. - On Workday, jobs already delivered are not read again, so a daily check of a large Workday site costs only its list pages plus one request per new job.
- Use a different monitorName per monitoring task (for example one per client or job board you feed) to keep separate histories, or a new name to start over.
Output example
Real row from a run on 2026-10-07 (input jobs.ashbyhq.com/ramp; description shortened here):
{"companyInput": "jobs.ashbyhq.com/ramp","found": true,"company": "ramp","ats": "ashby","boardToken": "ramp","jobId": "b599c5a9-9c9d-4826-b67a-ca5e012faaad","title": "Partner Development Representative | Reseller","department": "Sales","team": "Channel Sales","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)","Remote (US)"],"countryCode": "US","workplaceType": "hybrid","isRemote": true,"employmentType": "FULL_TIME","salaryMin": 110000,"salaryMax": 120000,"salaryCurrency": "USD","salaryPeriod": "YEAR","salaryText": "$110K – $120K • Offers Equity • Offers Commission • Total OTE with 70/30 split","postedAt": "2026-10-06T19:25:07.450Z","updatedAt": null,"jobUrl": "https://jobs.ashbyhq.com/ramp/b599c5a9-9c9d-4826-b67a-ca5e012faaad","applyUrl": "https://jobs.ashbyhq.com/ramp/b599c5a9-9c9d-4826-b67a-ca5e012faaad/application","boardUrl": "https://jobs.ashbyhq.com/ramp","descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams, embedded in the transaction flow of every dollar a business spends. We automate how over $200B in annualized spend flows in and out of 70,000+ companies: authorizing payments, flagging risk, categorizing spend, and closing book...","observedAt": "2026-10-07T14:53:33.795Z","schemaVersion": "1.0"}
Company websites
You can also paste a company website (sourcegraph.com, https://www.pbs.org). The Actor first looks for a job board named after the domain on Greenhouse, Lever, Ashby, Recruitee and SmartRecruiters. If none has open jobs, it reads the website's homepage and, if needed, one careers page linked from it (a link named or pointing to careers, jobs, join us...), and looks for a link to a known job board (Workday, Greenhouse, Lever, Ashby, Recruitee, Workable, SmartRecruiters), including embedded boards. That board is then used as if you had pasted it, and boardDiscoveredFrom tells you on which page the link was found.
- At most 2 pages per website, read like a browser would load them (no JavaScript), within 20 seconds, respecting the site's robots.txt.
- Many large employers link to their own careers site, which links to the ATS only from each job page (NVIDIA, Salesforce): then the company comes back free as
COMPANY_NOT_FOUND, with a note saying the website was read. Paste the careers page URL instead. - Reading websites is free: only jobs delivered are billed (plus, from October 25, 2026, the $0.002 start fee per run).
Workday careers sites
Workday career sites are read through the same public API their own pages use, with two limits set by Workday:
- At most 2,000 jobs per careers site: Workday's list stops there (larger employers show "2,000+" jobs). Use
titleKeywordsorlocationsto reach the jobs you need; filters are applied to the whole list Workday returns. - One request per job delivered: the Workday list only gives title, one location and "Posted N days ago". Country, all locations, exact posting day, employment type, remote type and description need one request per job, made only for the jobs you get (after the title filter and
maxJobsPerCompany). Filters onlocations,remoteOnlyor the exact date are checked on those details, so a strict filter reads more jobs than it returns (at most the 200 newest jobs per site are checked); the jobs read and dropped are not billed. - A Workday site lists 20 jobs per request: listing all 2,000 jobs of a large site takes about a minute. Without any filter, listing stops once
maxJobsPerCompanyjobs are listed. - Salary is not part of Workday's public job data: salary fields are
null(a range written in the description stays indescriptionText).
Pricing
Pay per job returned, no subscription, no proxy costs; no fee per run until October 25, 2026, then $0.002 per run start. See the Pricing tab for current prices: one event per job found, cheaper on higher Apify plans. Salary, locations, dates and the full description are included in that price (no "details" add-on).
Companies not found, boards without open jobs, duplicate boards, jobs removed by your filters and input mistakes cost nothing (from October 25, 2026, apart from the $0.002 start fee per run). The run never spends more than the maximum cost you set; when the budget runs out, the most recent jobs are delivered first.
Free Apify plan: each run returns up to 20 jobs for up to 3 companies, so you can check the output. A paid Apify plan removes these limits.
Use it from code, automations or AI agents
API (one call, results returned directly):
curl -X POST "https://api.apify.com/v2/acts/plainrows~ats-job-postings/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companies": ["stripe", "https://jobs.lever.co/spotify"], "titleKeywords": ["engineer"], "maxJobsPerCompany": 100}'
n8n, Make, Zapier: use the Apify integration, pick plainrows/ats-job-postings, schedule it daily and push new jobs to Google Sheets, Airtable, Slack or your job board's database (jobId + ats is a stable key for de-duplication).
AI agents (MCP): add https://mcp.apify.com?tools=plainrows/ats-job-postings to Claude, Cursor or any MCP client. The agent gets a typed tool and pays per result.
What this is not
- Not a search across all companies: you choose the companies. It does not crawl LinkedIn, Indeed or Google Jobs.
- iCIMS, Taleo, SuccessFactors and other ATSs are not covered. Greenhouse boards hosted on the EU instance (
job-boards.eu.greenhouse.io) are looked up on the public Greenhouse API and may not be found. - No recruiter or hiring manager data. Custom Greenhouse fields are not exported, e-mail addresses are removed from descriptions. Descriptions are otherwise the company's own text.
- Not affiliated with Greenhouse, Lever, Ashby, Recruitee, Workable, SmartRecruiters or Workday.
Run summary
Each run stores a summary in the key-value store (OUTPUT): companies with results, without new jobs (companiesWithoutNewJobs, jobsAlreadySeen, monitoring only), not found, without open jobs or unavailable, boards per ATS, open jobs seen, jobs removed by filters, jobs over your per-company limit or cut by the budget, duplicates and invalid inputs, and anything skipped because of the free-plan or budget limit.
FAQ
How do I export all open jobs of a company? Paste its careers page URL (Greenhouse, Lever, Ashby, Recruitee, Workable, SmartRecruiters or Workday) or just its name (not for Workday), and run: one row per job with title, department, locations, salary when published, apply link and the full description.
Which applicant tracking systems are covered?
Greenhouse, Lever, Ashby, Recruitee, Workable, SmartRecruiters (since October 9, 2026) and Workday (since October 2026). iCIMS is not. On SmartRecruiters the company name in the link is often not the plain name (Ubisoft2): paste the careers page link.
How do I scrape Workday jobs?
Open the company's careers page, copy its address (it looks like https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, sometimes with /en-US/ in it) and paste it in companies. A plain company name does not work for Workday. Up to 2,000 jobs per careers site, newest first; one row per job with location, country, posting day, employment type, remote type, job link and full description.
Can I just paste the company's website? Yes. If no job board matches the domain name, the homepage and one careers page of the website are read to find the link to its job board (Workday, Greenhouse, Lever, Ashby, Recruitee, Workable, SmartRecruiters). When the careers site is built with JavaScript or links to the ATS only from each job page, nothing is found: the row is free and says so; paste the careers page or job board URL.
Why do Workday runs take longer? Workday lists 20 jobs per request and gives the details of each job on its own page, read only for the jobs you get. A few dozen Workday jobs take a few seconds; a whole 2,000-job site with a strict location filter can take a few minutes.
Can I keep only remote or recent jobs?
Yes: remoteOnly, postedWithinDays, titleKeywords, locations and departments filter for free; removed jobs are not billed.
Can I search jobs across all companies? No: you choose the companies. To search jobs by title and city across job boards, use Google Jobs Scraper.
Does it return recruiter names or e-mails? No: e-mail addresses are removed from descriptions and no recruiter data is collected.
More PlainRows tools
Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.
- SEO and keywords: Keyword Search Volume, CPC & Difficulty · Keyword Ideas Generator · Google Autocomplete & People Also Ask · Google Trends Explorer · Website Organic Traffic & Top Keywords · Bulk Domain Authority Checker · Backlink Checker · Broken Link Checker · AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode) · Google Maps Rank Tracker (Geo-Grid Local SEO)
- Leads and companies: Google Maps Scraper · Website Technology Checker · Google Jobs Scraper · Google Ads Scraper (Transparency Center) · Company Registry Lookup (SIRENE, LEI, Brreg) · Public Tenders Search (EU TED & UK)
- E-commerce and travel: Amazon Product Search Scraper · Google Shopping Prices Scraper · Google Hotels Prices Scraper · Tripadvisor Reviews Scraper
- Content and media: Google News Scraper · YouTube Search Scraper · YouTube Comments Scraper · Google Images Scraper · Website Screenshot API · Google Maps Reviews Scraper · App Store & Google Play Reviews Scraper
Compared with other APIs: Companies hiring right now · Greenhouse, Lever, Ashby and Workday jobs in one JSON format
Support
Missing a field, an ATS or found a bug? Open an issue on this page. Issues are read and answered.