ATS Jobs Scraper - Greenhouse, Lever, Ashby, Workday & more
Pricing
from $1.00 / 1,000 job scrapeds
ATS Jobs Scraper - Greenhouse, Lever, Ashby, Workday & more
Scrape job postings from Greenhouse, Lever, Ashby, Workday, SmartRecruiters and Workable career sites. Input company names, domains or careers URLs. Normalized fields, salary, remote flag and an 'only new jobs' mode for daily monitoring.
Pricing
from $1.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Liang Undef
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
ATS Jobs Scraper – Greenhouse, Lever, Ashby, Workday, SmartRecruiters & Workable
Scrape job postings straight from company career sites powered by the six most popular applicant tracking systems (ATS): Greenhouse, Lever, Ashby, Workday, SmartRecruiters and Workable. Give it company names, domains, careers pages or board URLs – the Actor auto-detects the ATS, calls the same public job-board endpoints the career pages use, and returns one clean, normalized format for every job: title, company, location, remote flag, department, employment type, salary, posted date, apply URL and description.
Turn on Only new jobs since last run and schedule it daily to get a feed of fresh openings – perfect for job alerts, recruiting and sales-intelligence workflows.
Why this ATS scraper?
- ✅ 6 ATS in one Actor – no need to chain separate Greenhouse/Lever/Ashby/Workday scrapers.
- 🔎 Company auto-discovery – type
stripe.com,Notionorhttps://linear.app/careers; the Actor finds the job board for you. - 🧹 Normalized output – same fields regardless of ATS, so you can merge, filter and dedupe easily.
- 💰 Salary extraction – structured pay ranges from Ashby/Lever, plus pay-transparency ranges found in descriptions (e.g.
$168K - $285K,€132.000—€165.000). - 🆕 Only-new mode – remembers what it already returned; scheduled runs output only newly posted jobs.
- ⚡ Fast & cheap – uses public JSON endpoints, no browser. Hundreds of jobs in seconds.
- 🛡️ Reliable – retries with backoff, per-board error isolation, run summary with any boards that failed.
Use cases
- Job aggregators & job boards – fill your site with fresh roles from hundreds of tech companies.
- Job alerts – "new remote data-engineer jobs at my 50 dream companies" every morning.
- Sales intelligence / hiring signals – companies hiring for "Salesforce admin" are prospects for your CRM consultancy.
- Recruiting & talent intelligence – track competitors' hiring by department and location.
- Labor-market & salary research – collect pay ranges by title and city.
Input
| Field | Description |
|---|---|
companies | Board URLs, ats:slug, careers pages, domains or company names (see examples below) |
keywords / excludeKeywords | Filter by words in the job title |
locations | Keep jobs whose location/country contains any value (e.g. London, Germany, Remote) |
departments | Filter by department/team |
remoteOnly | Only remote jobs |
postedWithinDays | Only jobs posted in the last N days |
onlyNewJobs + stateKey | Output only jobs not returned by previous runs |
maxJobsPerCompany, maxItems | Limits (newest jobs first) |
descriptionFormat | text, html, both or none |
Supported company formats
https://boards.greenhouse.io/airbnb greenhouse:stripehttps://jobs.lever.co/spotify lever:spotify lever-eu:<slug>https://jobs.ashbyhq.com/ramp ashby:notionhttps://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSitehttps://jobs.smartrecruiters.com/Equinox smartrecruiters:Visahttps://apply.workable.com/skroutz workable:skroutzhttps://linear.app/careers stripe.com Notion (auto-detected)
Example – daily feed of new remote engineering jobs:
{"companies": ["stripe.com", "Notion", "https://jobs.ashbyhq.com/ramp", "lever:spotify"],"keywords": ["engineer", "developer"],"remoteOnly": true,"onlyNewJobs": true,"stateKey": "remote-eng","maxJobsPerCompany": 0,"maxItems": 0}
Output
Each job is one dataset item (export to JSON, CSV, Excel, or via API/webhooks):
{"jobId": "29a5da77-37f0-402a-92bc-072778e77ed8","ats": "ashby","companySlug": "ramp","company": "Ramp","title": "Software Engineer, Forward Deployed","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)","San Francisco, CA"],"country": "USA","isRemote": true,"workplaceType": "Hybrid","department": "Engineering","team": "Engineering","employmentType": "Full-time","salary": {"min": 168000,"max": 285000,"currency": "USD","interval": "1 YEAR","text": "$168K - $285K","source": "ats"},"postedAt": "2026-10-22T19:20:16.077Z","updatedAt": null,"jobUrl": "https://jobs.ashbyhq.com/ramp/29a5da77-37f0-402a-92bc-072778e77ed8","applyUrl": "https://jobs.ashbyhq.com/ramp/29a5da77-37f0-402a-92bc-072778e77ed8/application","requisitionId": null,"descriptionText": "About Ramp\nRamp is building the smart infrastructure for finance teams, embedded in the transaction flow of every dollar a business spends. We automat...","scrapedAt": "2026-10-26T14:26:13.295Z"}
Fields: jobId, ats, companySlug, company, title, location, locations, country, isRemote, workplaceType, department, team, employmentType, salary {min, max, currency, interval, text, source}, postedAt, updatedAt, jobUrl, applyUrl, requisitionId, descriptionText, descriptionHtml, scrapedAt. Fields the ATS does not publish are null.
A RUN_SUMMARY record in the key-value store lists boards scanned, unresolved companies and failures.
Pricing
Pay per result: $0.0012 per job (about $1.20 per 1,000 jobs) plus a tiny start fee per run. Higher Apify plans get a discount. No proxy or browser costs.
FAQ
How does "only new jobs" work?
Job IDs that were returned are stored in a named key-value store (ats-jobs-scraper-state, record seen-<stateKey>). Next run skips them. Use a different stateKey per watchlist. The first run sets the baseline and returns all matching jobs.
My company isn't detected.
Paste the direct job-board URL (open any job on their careers page and copy the link) or use ats:slug. Companies on other ATS (e.g. iCIMS, Taleo) are not supported yet – open an issue.
Is a company name always matched to the right board?
Name guessing tries the most likely slugs; for generic names it can hit a different company with the same slug. Check the company field or use a URL/domain for exact matching.
Why is salary sometimes missing?
Many employers don't publish pay. We return structured salary when the ATS provides it and otherwise extract a pay range from the description text when one is present (salary.source = description).
Is this legal? The Actor reads only public job postings that companies publish for candidates, via public job-board endpoints, without login. Respect the sites' terms and applicable laws when reusing the data.
Something broke? Open an issue in the Issues tab – we fix ATS changes quickly.