ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workable & more
Pricing
$1.50 / 1,000 job results
ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workable & more
Get all open jobs from company career pages on Greenhouse, Lever, Ashby, Recruitee, Personio, SmartRecruiters and Workable. Paste a careers URL or just a company name. Unified rows, salary, only new jobs.
Pricing
$1.50 / 1,000 job results
Rating
0.0
(0)
Developer
Henri De Witte
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
24 days ago
Last modified
Categories
Share
Get all open jobs from company career pages in one clean, unified format. Works with the 7 most used applicant tracking systems (ATS):
Greenhouse · Lever · Ashby · Recruitee · Personio · SmartRecruiters · Workable
Paste a job board link, a company's own careers page, or just a company name: the Actor finds the right job board for you. Turn on "Only new jobs since the last run" and schedule it daily to get new job alerts or hiring signals in Google Sheets, Slack, n8n, Make or Zapier.
- ✅ 7 job board systems in one Actor, one output format
- ✅ Auto-detect: paste
https://careers.company.comornotionand it finds the job board - ✅ Filters: keywords, exclude words, locations (accents ignored), remote only, posted in the last X days
- ✅ Salary ranges when the company publishes them (Greenhouse, Lever, Ashby, Recruitee, Personio)
- ✅ Clean plain-text descriptions (AI-ready) or the original HTML
- ✅ Uses the official public job board APIs: fast, no browser, no login, no CAPTCHA
- ✅ GDPR-friendly: recruiter names and emails are never collected, and emails/phone numbers inside descriptions are removed
What can you use it for?
- Sales teams (hiring signals): a company that hires 5 data engineers needs data tools. Track your target accounts daily.
- Recruiters and agencies: monitor the career pages of your clients and competitors.
- Job boards and newsletters: build a niche job feed (e.g. "remote Python jobs in Europe").
- Job seekers: get an alert the day your dream company opens a role.
- Market research: compare hiring by department, location and salary.
How to use it
- Add one or more companies (one per line). Any of these works:
- a job board link:
https://boards.greenhouse.io/airbnb,https://jobs.lever.co/palantir,https://jobs.ashbyhq.com/notion,https://bunq.recruitee.com,https://tado.jobs.personio.de,https://jobs.smartrecruiters.com/BoschGroup,https://apply.workable.com/name - a short form:
greenhouse:airbnb,lever:palantir,ashby:notion,recruitee:bunq,personio:tado,smartrecruiters:BoschGroup,workable:name - the company's own careers page:
https://www.company.com/careers(the Actor looks for the job board link on that page) - just a name:
notion(the Actor tries every system and uses the first one with jobs)
- a job board link:
- Optional: add keywords, locations or turn on remote only.
- Click Start. Download the jobs as JSON, CSV, Excel, or use the API.
- For daily alerts: turn on Only new jobs since the last run and create a Schedule.
Input example
{"companies": ["https://boards.greenhouse.io/airbnb", "lever:palantir", "notion", "https://bunq.recruitee.com"],"keywords": ["engineer", "data"],"excludeKeywords": ["intern"],"locations": ["Belgium", "Netherlands", "remote"],"remoteOnly": false,"postedWithinDays": 30,"descriptionFormat": "text","maxResults": 500,"onlyNewSinceLastRun": true}
| Field | Default | Meaning |
|---|---|---|
companies | – | Job board links, short forms, careers pages or names. Max 500. |
keywords | [] | Keep jobs whose title, department or team contains any of these words. |
excludeKeywords | [] | Skip jobs whose title contains any of these words. |
locations | [] | Keep jobs in any of these places (city, country, 2-letter code, or remote). |
remoteOnly | false | Only remote jobs. |
postedWithinDays | empty | Only jobs posted in the last X days (jobs without a date are kept). |
descriptionFormat | text | text, html or none. |
maxJobsPerCompany | empty | Stop after X jobs per company. |
maxResults | 1000 | Maximum jobs (and maximum cost) per run. |
onlyNewSinceLastRun | false | Only return jobs that an earlier run with the same list of companies did not. |
Output example
{"id": "greenhouse:airbnb:7995153","ats": "greenhouse","companySlug": "airbnb","companyName": "Airbnb","jobId": "7995153","title": "Business Development Manager","department": "Sales","team": null,"employmentType": null,"workplaceType": "hybrid","isRemote": false,"location": "Berlin, Germany","locations": ["Berlin, Germany"],"countryCode": null,"postedAt": "2026-06-10T12:50:56.000Z","updatedAt": "2026-09-30T00:00:54.000Z","url": "https://careers.airbnb.com/positions/7995153?gh_jid=7995153","applyUrl": "https://careers.airbnb.com/positions/7995153?gh_jid=7995153","salaryMin": 71000,"salaryMax": 84000,"salaryCurrency": "EUR","salaryPeriod": "year","description": "Airbnb was born in 2007 when two hosts welcomed three guests ...","scrapedAt": "2026-10-08T10:29:47.948Z"}
Every row has the same fields, whatever the job board. Missing values are null (or an empty list), never left out.
Pricing
Pay per result: $1.50 per 1,000 jobs ($0.0015 per job). You only pay for jobs that end up in your dataset. Duplicates are never charged, and companies that are not found cost nothing. Set a maximum cost per run and the Actor stops cleanly when it is reached.
Free Apify plan: a run returns at most 100 jobs. Upgrade to a paid Apify plan to get all results.
FAQ
Is this legal? Yes. The Actor only reads the public job board APIs and feeds that these systems offer for career websites (the same data anyone sees on the company's job page). It does not log in, does not bypass protections and keeps a polite request rate.
What about personal data? Job postings are about companies, not people. The Actor never collects recruiter names or emails, and removes email addresses and phone numbers that appear inside job descriptions.
My company is "not found". Use the exact name from the job board URL (e.g. boards.greenhouse.io/airbnb). Names are sometimes different from the brand name. If the company uses another system (Workday, Taleo, Teamtailor, ...) it is not supported yet: open an issue.
Why is the description empty for some jobs? Some companies publish only a title. With descriptionFormat: none descriptions are skipped on purpose (faster runs).
How does "only new" work? The Actor remembers which jobs it returned for the same list of companies and skips them next time. Change the list of companies and it counts as a new search. Changing filters does not reset the memory.
Limitations
- Only public job boards on the 7 supported systems.
- SmartRecruiters needs one extra request per job for the description; choose
nonefor very large companies if you only need titles. - Salary is only available when the company publishes it.
- If a job board changes its format, some fields may be empty until the Actor is updated.
Support
Found a problem or need another job board system? Open an issue on the Issues tab.