Multi-ATS Jobs Scraper: Greenhouse, Lever, Ashby
Pricing
from $1.58 / 1,000 results
Multi-ATS Jobs Scraper: Greenhouse, Lever, Ashby
Scrape jobs from Greenhouse, Lever, Ashby, Workable, Recruitee and SmartRecruiters career pages in one unified dataset. ATS auto-detected from a URL or company name. Salary, location, remote, department, posted date, description. No login. $1.75 per 1,000 jobs.
Pricing
from $1.58 / 1,000 results
Rating
0.0
(0)
Developer
Joe Pena
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 hours ago
Last modified
Categories
Features
Share
What is Multi-ATS Jobs Scraper?
Multi-ATS Jobs Scraper is one job scraper for company career pages on Greenhouse, Lever, Ashby, Workable, Recruitee and SmartRecruiters. Paste careers-page URLs or company names. It auto-detects the applicant tracking system (ATS) and returns every open job in one unified format: title, location, remote flag, salary range, department, employment type, posted date, apply URL and full description.
It reads each ATS's official public job-board feed. So there's no login, no API key, no proxies and no browser, and runs are fast and cheap. If you only need Greenhouse, the Greenhouse Jobs Scraper is a little cheaper.
Supported ATS platforms
| ATS | Example input |
|---|---|
| Greenhouse jobs | https://job-boards.greenhouse.io/stripe or airbnb |
| Lever jobs (US and EU) | https://jobs.lever.co/spotify |
| Ashby jobs | https://jobs.ashbyhq.com/ramp |
| Workable jobs | https://apply.workable.com/huggingface |
| Recruitee jobs | https://bunq.recruitee.com |
| SmartRecruiters jobs | https://jobs.smartrecruiters.com/BoschGroup |
Bare names such as notion are tried on each ATS in turn. You can force one with a prefix, e.g. lever:palantir.
What data can you extract?
Every job, whatever the ATS, has the same fields: jobId, title, company, companySlug, ats, url, location, isRemote, workplaceType, departments, offices, employmentType, postedAt, updatedAt, salaryMin, salaryMax, salaryCurrency, salaryInterval, salarySource, requisitionId, description, scrapedAt.
Features
- 🔀 Unified schema across 6 ATS, so you never write per-platform parsers again
- 🧭 ATS auto-detection from a careers URL or a bare company name
- 🔎 Filters: title keywords, excluded words, location, remote only, posted within N days, per-company and total limits
- 💰 Salary data: structured pay ranges from Lever, Ashby and Recruitee, plus pay-transparency ranges parsed from descriptions
- 🧾 Plain-text descriptions ready for LLMs and search
- ⚠️ SUMMARY record lists every company, the detected ATS, and whether it was found
- 🔔 Monitor mode: only jobs that are new since the last run, for scheduled alerts
- 🔁 Scheduling, API, webhooks, and integrations with Google Sheets, Slack, Make, Zapier and more
How to scrape Lever, Ashby and Greenhouse jobs
- Add companies as careers-page URLs or names.
- Optionally set keywords, locations, Remote jobs only or Posted within last N days.
- Click Start, then export from the Output tab (JSON, CSV, Excel) or use the API.
Input example
{"companies": ["https://jobs.lever.co/spotify", "https://jobs.ashbyhq.com/ramp", "airbnb", "notion"],"keywords": ["engineer", "data"],"postedWithinDays": 7,"maxItems": 2000}
Output example
{"title": "Risk Operations Specialist, Onboarding","company": "ramp","companySlug": "ramp","ats": "ashby","location": "New York, NY (HQ)","isRemote": true,"employmentType": "FullTime","salaryMin": 100000,"salaryMax": 155000,"salaryCurrency": "USD","salaryInterval": "year","salarySource": "ats","postedAt": "2026-11-12T01:19:57.296000+00:00","url": "https://jobs.ashbyhq.com/ramp/55bd9ab4-8edc-4493-b577-4277ad2f9ae6"}
Monitor mode: only new jobs since the last run
Turn on Only new jobs since last run (onlyNew: true) and the Actor remembers every job it has returned for that search. The next run returns only jobs it hasn't returned before, so you pay only for new results.
- The first run returns everything that currently matches and saves it as the baseline.
- Seen IDs are stored in a named key-value store in your Apify account (
data-factory-ats-monitor), one record per search. The record name comes from your search filters, so different searches keep separate histories. - Want to keep one history while you adjust filters? Set Monitor name (
monitorKey), e.g."daily-alert". - To start over, delete that record (or the whole store) in Storage → Key-value stores.
Schedule it for daily alerts
- Configure your search, turn on Only new jobs since last run, and save it as a task.
- Create an Apify Schedule for that task (daily or hourly).
- Add an integration (Slack, email, Google Sheets, Zapier, Make or a webhook) to push each run's new jobs where your team works.
{ "companies": ["https://jobs.lever.co/palantir", "https://jobs.ashbyhq.com/ramp", "stripe"], "remoteOnly": true, "onlyNew": true, "maxItems": 500 }
How much does it cost to scrape ATS jobs?
Pay-per-result: $1.75 per 1,000 jobs ($0.00175 per job), whichever ATS they come from. You pay only for jobs saved to the dataset.
- 1,000 jobs = $1.75
- 10,000 jobs = $17.50
- Apify's free plan includes $5 of monthly usage, which covers roughly 2,800 jobs with this Actor.
Tip: SmartRecruiters descriptions need one extra request per job. Turn off Include full job description for the fastest SmartRecruiters runs.
Use cases
- Build a job board or job aggregator from hundreds of startup career pages
- Sales prospecting and lead generation: find companies hiring for roles that signal they need your product
- Recruiting intelligence: monitor competitors' hiring by department and location
- Salary benchmarking with pay-transparency data
- Daily job alerts with Apify Schedules plus Slack, Google Sheets or Zapier
Run it from your code (API)
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("data_factory_nerd/ats-jobs-scraper").call(run_input={"companies": ["https://jobs.lever.co/spotify", "ramp"], "maxItems": 500})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["ats"], job["company"], job["title"])
FAQ
Is it legal to scrape job postings from ATS career pages?
The Actor reads only job postings that employers publish on public career-page feeds. It doesn't log in and doesn't collect candidate data. Use the data in line with the laws that apply to you.
A company isn't found. Why?
It may use an ATS that isn't supported yet (for example Workday or iCIMS), or a different slug. Paste the exact careers-page URL and check the SUMMARY record.
Do you support Workday?
Not yet. Open an issue on the Issues tab if you need it; requests decide what we build next.
How do I get only new jobs?
Turn on Only new jobs since last run and schedule a daily run (see Monitor mode above). Each run returns only jobs you haven't seen before, across all 6 ATS.
Related Actors by data_factory_nerd
| Actor | What it does |
|---|---|
| Greenhouse Jobs Scraper | Greenhouse-only, $1.50 per 1,000 jobs |
| SAM.gov Contract Opportunities Scraper | US federal contract opportunities with NAICS, set-aside, deadlines and contacts |