All-in-One ATS Jobs Scraper — Greenhouse, Lever, Ashby & 8 more
Pricing
from $1.50 / 1,000 results
All-in-One ATS Jobs Scraper — Greenhouse, Lever, Ashby & 8 more
Open jobs from 11 ATS in one schema: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, BambooHR, Personio, Teamtailor, Breezy HR, JazzHR. Paste company names or websites - the ATS is auto-detected. Salary ranges, filters, dedupe and new/updated/removed job alerts. No login.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Erwinbooze Ricardo
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Security
Limited permissionsShare
All-in-One ATS Jobs Scraper — Greenhouse, Lever, Ashby, Workable & more
All-in-One ATS Jobs Scraper is a multi-ATS jobs scraper and job board API for 11 applicant tracking systems: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, BambooHR, Personio, Teamtailor, Breezy HR and JazzHR. Paste company names, websites or careers URLs - the ATS is detected automatically - and get every open job in one unified schema: title, location, remote / workplace type, department, employment type, salary ranges, dates, apply link and description. It reads each ATS's public job-board endpoints: no login, no proxy, no browser. Add change detection (new / updated / removed jobs) and schedule it for hiring alerts.
What can you use it for?
- Job boards and aggregators: one feed and one schema across 11 ATS platforms.
- Lead generation and sales intelligence: find out which companies are hiring, for which teams and where - just from a list of company websites.
- Salary benchmarking: published pay ranges, normalized to min / max / currency / period.
- Hiring alerts: daily new, updated and removed jobs, pushed to Slack, email or any webhook.
- AI agents (MCP): one tool that answers "what is
Supported ATS
| ATS | Input examples | Description | Salary | Publish date |
|---|---|---|---|---|
| Greenhouse | greenhouse:airbnb, boards.greenhouse.io/..., job-boards.greenhouse.io/... | ✅ | structured pay transparency + text | ✅ |
| Lever | lever:spotify, jobs.lever.co/..., jobs.eu.lever.co/... | ✅ | structured range + text | ✅ |
| Ashby | ashby:openai, jobs.ashbyhq.com/... | ✅ | structured compensation + text | ✅ |
| Workable | workable:huggingface, apply.workable.com/... | ✅ | text | ✅ |
| SmartRecruiters | smartrecruiters:ServiceNow, jobs.smartrecruiters.com/... | ✅ (one request per job) | text | ✅ |
| Recruitee | recruitee:bunq, <company>.recruitee.com | ✅ | structured (when published) + text | ✅ |
| BambooHR | bamboohr:<company>, <company>.bamboohr.com/careers | ✅ (one request per job) | compensation field + text | ✅ |
| Personio | personio:<company>, <company>.jobs.personio.de | ✅ | text | ✅ |
| Teamtailor | teamtailor:<company>, <company>.teamtailor.com | ✅ | text | ✅ |
| Breezy HR | breezy:<company>, <company>.breezy.hr | ❌ (not in the public feed) | salary field (when set) | ✅ |
| JazzHR | jazzhr:<company>, <company>.applytojob.com | ✅ | text | ❌ (not published) |
Workday is not included in this Actor.
Features
- Auto-detect the ATS from a company name (
Hugging Face) or website (stripe.com): the Actor first looks for ATS links on the company's own website (home,/careers,/jobs), then tries name guesses on every supported ATS and picks the board with the most jobs.RUN_SUMMARYrecords how each company was matched (detectedVia) and other boards it found (alsoFoundOn). Useats:token(e.g.greenhouse:airbnb) for exact control. - Built-in company lists (
companyLists): about 110 curated companies across AI, fintech, developer tools, consumer tech, B2B SaaS, robotics/defense, European tech and large employers - each verified to have open jobs on 2026-10-30. - Cross-company deduplication: the same board entered twice is scraped once, duplicate job IDs are dropped, and
dedupeSimilar(on by default) drops identical reposts across boards. - Unified filters: keywords (title or description), locations, departments, remote only, posted within N days,
atsFilterto limit platforms. - Change detection:
changeTypenew / updated / removed withchangedFieldsandfirstSeenAt, stored between runs in a named key-value store. - Robust: a wrong or missing company does not fail the run; each company's status is in
RUN_SUMMARY. Respects your maximum cost per run.
Quick start
{"companies": ["stripe.com","Hugging Face","https://jobs.lever.co/palantir","ashby:openai"],"keywords": ["engineer"],"maxJobsPerCompany": 20}
A curated list, limited to remote roles:
{"companyLists": ["ai-companies"],"remoteOnly": true,"maxJobs": 200}
Daily hiring monitor (outputs only changes after the first run):
{"companies": ["notion.so","workable:huggingface","recruitee:bunq"],"changeDetection": true,"skipFirstRunOutput": true,"changeStoreName": "my-hiring-monitor"}
Input
| Field | Description |
|---|---|
companies | Company names, websites, careers/job URLs on any supported ATS, or ats:token. Optional if companyLists is set. |
companyLists | Built-in curated company lists. |
atsFilter | Only use these ATS platforms (empty = all 11). |
autoDetect | Detect the ATS for names/websites (default on). |
keywords / searchInDescription | Keep jobs whose title (or description) contains any keyword. |
locations / departments | Keep jobs whose location / department contains any of these strings. |
remoteOnly / postedWithinDays | Remote only; published in the last N days (JazzHR jobs have no date and are kept). |
includeDescription / includeDescriptionHtml / includeSalary | What to include. |
changeDetection, changeStoreName, includeUnchanged, includeRemoved, skipFirstRunOutput | New / updated / removed tracking. |
onlyNewJobs / monitoringStoreName | Simple mode: only job IDs not seen before. |
dedupeSimilar | Drop identical reposts (default on). |
maxJobsPerCompany / maxJobs | Result limits (0 = no limit). |
Output
Every job has the same fields, whatever the ATS (fields an ATS does not publish are null):
{"ats": "greenhouse","jobId": "8306554","title": "AirCover Specialist, Claims Experience","companyName": "Airbnb","companyToken": "airbnb","url": "https://careers.airbnb.com/positions/8306554?gh_jid=8306554","applyUrl": "https://careers.airbnb.com/positions/8306554?gh_jid=8306554","location": "Canada","allLocations": ["Canada"],"city": null,"region": null,"country": null,"isRemote": true,"workplaceType": "Remote","department": "Community Support","team": null,"employmentType": null,"experienceLevel": null,"publishedAt": "2026-10-28T14:52:05.000Z","updatedAt": "2026-10-28T14:52:05.000Z","salaryMin": 58000,"salaryMax": 68000,"salaryCurrency": "CAD","salaryPeriod": "YEAR","salarySource": "pay_transparency","salaryText": null,"salaryRanges": [{"min": 58000,"max": 68000,"currency": "CAD","title": "Canada Annual Pay Range"}],"descriptionText": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home...","scrapedAt": "2026-10-30T10:49:05.109Z"}
salarySource tells you where the salary came from (the ATS's structured field, or description when parsed from text, with the snippet in salaryText). With change detection, items also get changeType, changedFields and firstSeenAt. Download as JSON, CSV, Excel, XML or HTML, or use the API.
RUN_SUMMARY (default key-value store) lists, per company: input, ats, token, status (ok / not_found / error), detectedVia, alsoFoundOn, jobsOnBoard, jobsMatched, jobsOutput, duplicatesSkipped and change counts.
Job alerts and change detection (new / updated / removed)
Turn on changeDetection and schedule the Actor (for example daily in Schedules in Apify Console). Every run is compared with the previous run that used the same companies and filters:
changeType: "new"- the job appeared since the last run.changeType: "updated"- the title, location, department, employment type, salary or description changed;changedFieldslists which.changeType: "removed"- the job was open last time and is gone now (filled or closed). The item hasjobId,title,url,location,firstSeenAtandremovedAt.- Unchanged jobs are skipped unless you turn on
includeUnchanged. Every output job also getsfirstSeenAt.
The snapshot lives in a named key-value store (changeStoreName, default ats-jobs-changes), so it survives between runs. Use a different store name per monitor. Turn on skipFirstRunOutput to save the baseline silently on the first run. Change counts per company appear in RUN_SUMMARY. If a result limit (maxJobsPerCompany / maxJobs) cuts the output, the jobs that were not output stay pending and come out as new on the next run, so nothing is missed.
{ "companies": ["stripe.com"], "changeDetection": true, "skipFirstRunOutput": true, "changeStoreName": "my-hiring-monitor" }
Prefer something simpler? onlyNewJobs outputs only job IDs not seen before (no updated/removed tracking).
Send changes to Slack, email or a webhook
- Slack / email: in the Actor's Integrations tab, add the Slack or email integration and trigger it on Run succeeded. Because change-detection runs output only changes, the message is your alert.
- Webhook (your own endpoint, Zapier "Catch Hook", n8n "Webhook" node, Make "Custom webhook"): add an HTTP webhook for the event
ACTOR.RUN.SUCCEEDED. The default payload containsresource.defaultDatasetId; fetch the changes fromhttps://api.apify.com/v2/datasets/<defaultDatasetId>/items?clean=true(add&token=...or anAuthorization: Bearerheader) and filter bychangeType.
Use with AI agents (MCP)
This Actor can be called by AI agents through the Apify MCP server. It runs with limited permissions and pay-per-event pricing, so agents only pay for the results they get. To give Claude, Cursor, VS Code or any MCP client a dedicated tool for it, add this server URL:
https://mcp.apify.com?tools=wowlab/all-in-one-ats-jobs-scraper
The agent can then call it with plain inputs such as {"companies": ["stripe.com"], "keywords": ["engineer"], "maxJobs": 20}. Every input field has a description written for agents, and results come back as clean JSON with plain-text descriptions, ready for RAG, classification or summaries. Set maxJobs (and a max total charge in the call options) to keep agent spend predictable.
Integrations: Make, n8n, Zapier, Google Sheets
- Make: use the Apify app's Run an Actor module with
wowlab/all-in-one-ats-jobs-scraper, then Get Dataset Items. - n8n: use the Apify node (Run Actor + Get dataset items), or an HTTP Request node calling
POST https://api.apify.com/v2/acts/wowlab~all-in-one-ats-jobs-scraper/run-sync-get-dataset-items. - Zapier: use the Apify app (Run Actor action, or Finished Actor Run trigger + Fetch Dataset Items).
- Google Sheets, Airtable, Slack, email: connect them in the Actor's Integrations tab, or export the dataset as CSV/Excel/JSON.
- API:
POST https://api.apify.com/v2/acts/wowlab~all-in-one-ats-jobs-scraper/run-sync-get-dataset-itemswith the input as JSON body returns the jobs directly.
Pricing
Pay per result (see the Pricing tab for the current price). No subscription, and with change detection only changed jobs (and removed-job records) are output and charged. Set maxJobs or a maximum cost per run to cap spend.
Tips
- Auto-detection makes a few extra requests per name; for large recurring lists, copy the detected
atsandtokenfromRUN_SUMMARYand useats:tokenentries. - Some companies run several boards (e.g. regional ones).
alsoFoundOnlists the other boards with jobs; add them asats:tokenentries if you want them too. - Name guesses can match a different company with the same name on a smaller ATS. Check
companyName/companyToken, or use the company's website or careers URL instead.
Is it legal?
This Actor reads only the public job postings that companies publish on purpose through each ATS's public job-board endpoints. It collects no personal data and needs no login. You are responsible for how you use the data, so check the terms of the sites you rely on.
FAQ
Why are some fields empty? Each ATS publishes different data. For example Breezy HR's public feed has no description and JazzHR's has no publish date; salary is only present when the company publishes it.
A company returns "not_found". It may use an ATS that is not supported (for example Workday or an in-house system), or a board name different from its brand. Pass its careers page URL.
Only need one ATS? See our Greenhouse Jobs Scraper, Lever Jobs Scraper and Ashby Jobs Scraper, with ATS-specific fields (e.g. Lever lists, Ashby equity flag).