ATS Job Scraper: Greenhouse, Lever, Ashby & More
Pricing
$1.00 / 1,000 job scrapeds
ATS Job Scraper: Greenhouse, Lever, Ashby & More
Scrape live jobs from any careers page on Greenhouse, Lever, Ashby, SmartRecruiters or Recruitee. Paste a careers URL or company slug and get clean, normalized jobs with salary, location, remote flag and full description. Track new and removed jobs between runs.
Pricing
$1.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Birchwood Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
What is ATS Job Scraper?
Scrape live job postings straight from company career pages. Paste a careers URL or a company name and get clean, normalized job data from Greenhouse, Lever, Ashby, SmartRecruiters and Recruitee (Workable in beta). You get salary ranges, remote / hybrid / on-site, locations, departments and full descriptions. There's also a monitoring mode that returns only the jobs posted since your last run.
Use it as a Greenhouse scraper, Lever scraper, Ashby scraper or general careers-page job scraper, or as an unofficial jobs API for the thousands of companies that host their job boards on these ATS platforms. Run it in Apify Console with no code, or call it from the API, schedule it, and send results to Google Sheets, Slack, Make, Zapier or n8n.
You pay $1.00 per 1,000 jobs. There's no monthly rental and no extra charge for platform usage.
Why use this ATS Job Scraper?
- Live data from the source. Every run reads the employer's own public job board, so you get the jobs that are open right now, not a cached database copy that's hours or days old.
- One Actor, five ATS platforms. Mix Greenhouse, Lever, Ashby, SmartRecruiters and Recruitee companies in one run. Every platform comes back in the same output format.
- Paste any careers page. Give it
https://www.notion.com/careersand it finds the ATS behind the page by itself. You don't need to know if a company uses Greenhouse or Ashby. - Salary data where it exists. Structured pay ranges come from Greenhouse pay transparency, Ashby compensation, Lever salary ranges and Recruitee salary fields. When a job has none of those, we pull the range out of the description text.
- Monitoring mode (new jobs only). Schedule it hourly or daily and you get, and pay for, only the jobs that are new since the previous run. Turn on Report removed jobs to also get the jobs that closed, at no charge.
- Reliable and low-maintenance. It uses the official public job-board endpoints that ATS vendors publish for career sites. No browser, no login, no cookies, no proxies needed. Runs are fast: in our test, about 1,000 jobs with full descriptions finished in roughly 10 seconds.
- No personal data. We never collect recruiter names, hiring-manager emails or applicant data. You only get job postings.
What can you use this job scraper for?
- 🧑💼 Job boards & aggregators: fill a niche job board with fresh, direct-apply jobs.
- 📈 Hiring signals for sales (B2B intent): see which target accounts are hiring for roles like "Data Engineer" or "Head of Security".
- 🕵️ Competitive intelligence: track competitors' headcount plans, new teams and new office locations.
- 💰 Salary benchmarking: collect posted pay ranges by title, location and company.
- 🤖 AI agents & automations: feed jobs into n8n, Make, Zapier, Google Sheets, Slack or your own LLM pipeline.
- 🎓 Research: study labor-market trends, remote-work share and skills demand.
Which ATS platforms and career pages are supported?
| ATS | Example input |
|---|---|
| Greenhouse | https://boards.greenhouse.io/airbnb, https://job-boards.greenhouse.io/figma, greenhouse:stripe |
| Lever | https://jobs.lever.co/palantir, lever:palantir (EU boards: jobs.eu.lever.co/...) |
| Ashby | https://jobs.ashbyhq.com/ramp, ashby:notion |
| SmartRecruiters | https://jobs.smartrecruiters.com/ServiceNow, smartrecruiters:ServiceNow |
| Recruitee | https://bunq.recruitee.com, recruitee:bunq |
| Workable (beta) | https://apply.workable.com/acme |
| Any careers page | https://www.notion.com/careers (we detect the ATS behind it) |
| Just a name | stripe (we try every supported ATS and keep the one with jobs) |
How to scrape jobs from company career pages
- Click Try for free.
- Under Companies, add one careers URL or company slug per line.
- Optionally add filters: title keywords, excluded words, locations, departments, remote only, or posted within N days.
- Click Start. Download the results as JSON, CSV, Excel or XML, or call them through the API.
- To keep it updated, turn on Only new jobs since last run and add a Schedule (for example, daily at 8:00).
Input example
{"companies": ["https://boards.greenhouse.io/airbnb","https://jobs.lever.co/palantir","https://jobs.ashbyhq.com/ramp","https://jobs.smartrecruiters.com/ServiceNow","https://www.notion.com/careers"],"titleKeywords": ["engineer", "developer"],"excludeTitleKeywords": ["intern"],"locationKeywords": ["United States", "Remote"],"remoteOnly": false,"postedWithinDays": 30,"onlyNewJobs": false,"includeDescription": true,"descriptionFormat": "text","maxJobsPerCompany": 0,"maxJobs": 0}
What job data can you extract?
Output example
Every job has the same fields, whatever ATS it came from:
{"id": "ashby:ramp:34413f8d-26bf-4bbc-8ade-eb309a0e2245","ats": "ashby","companySlug": "ramp","companyName": "Ramp","jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","title": "Security Engineer, Cloud","department": "Engineering","team": "Backend","employmentType": "FullTime","workplaceType": "hybrid","isRemote": true,"location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],"country": "USA","postedAt": "2026-04-07T17:12:35.753000Z","updatedAt": null,"salaryMin": 211400,"salaryMax": 290600,"salaryCurrency": "USD","salaryPeriod": "year","salaryText": "$211.4K - $290.6K","url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application","descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams...","changeStatus": null,"sourceBoard": "ashby:ramp","scrapedAt": "2026-10-04T15:24:10.512Z"}
In monitoring mode, changeStatus is new or existing, and closed jobs show up as removed. Each run also saves a RUN_SUMMARY record in the key-value store with the number of open jobs per company and any inputs that couldn't be resolved.
Output fields
| Field | Description |
|---|---|
companyName, companySlug, ats | Who is hiring and on which ATS |
title, department, team, employmentType | Role details |
workplaceType, isRemote | remote, hybrid or onsite when the ATS provides it |
location, locations, country | Primary location plus all listed locations |
postedAt, updatedAt | ISO-8601 UTC timestamps (when the ATS provides them) |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText | Structured pay range, or a range taken from the description text |
url, applyUrl | Job page and direct apply link |
descriptionText / descriptionHtml | Full job description |
changeStatus | new / existing / removed in monitoring mode |
How much does it cost to scrape jobs from Greenhouse, Lever or Ashby?
This Actor uses pay-per-event pricing:
| Event | Price |
|---|---|
| Job scraped (one job saved to your dataset) | $0.001 ($1.00 per 1,000 jobs) |
| Removed-job records (monitoring mode) | Free |
Platform usage is included in the price, so you pay only per job. Set Maximum cost per run in the run options and the Actor stops cleanly when it reaches that limit.
Example costs: 1 company with 300 open jobs costs $0.30. Monitoring 50 companies daily, if about 200 new jobs show up per day, costs about $0.20/day.
FAQ
Is it legal to scrape job postings? This Actor reads only public job postings that employers publish so candidates can find them. It goes through the public job-board endpoints that ATS vendors provide for career pages. It doesn't log in, get around any access controls, or collect personal data. You're still responsible for how you use the data. Follow the terms of the sites involved and the laws that apply to you (for example GDPR if you add personal data later).
How do I find a company's slug?
Open the company's careers page and click on any job. The URL shows the ATS and the slug, for example jobs.lever.co/palantir/... → lever:palantir. Or just paste the careers page URL and the Actor detects it for you.
Why did a company return "No public job board found"?
It may use an ATS we don't support yet (Workday, iCIMS, Taleo, etc.), have its board hidden, or have no open jobs. The RUN_SUMMARY record lists every input that couldn't be resolved. Open an issue with the company name and we'll take a look.
How does "Only new jobs" know what I've already seen?
It stores the job IDs from the previous run in a named key-value store (ats-job-scraper-state) in your Apify account. The first run returns everything. After that, you only get, and pay for, new jobs. To start over, delete that store.
Do I need proxies? No. The endpoints are public, so runs work without a proxy. Proxy settings are there only as an optional extra.
Can I use it through the API, with Make, Zapier or n8n, or with an AI agent? Yes. Like any Apify Actor, you can run it from the Apify API, the JS or Python clients, MCP, or integrations with Make, Zapier, n8n, Google Sheets, Slack and webhooks.
Which ATS is coming next? Workday, Personio, Teamtailor and BambooHR are on the roadmap. Open an issue to vote for one.
Other Actors by Birchwood Data
| Actor | What it does |
|---|---|
| Text to JSON: Extract Structured Data from Any Document | Turn job descriptions, emails, invoices, PDFs and Word docs into clean JSON that matches your own schema. Pairs well with this scraper: pull out skills, seniority or tech stack from descriptionText. |
Support
Found a bug or need a feature? Open an issue on the Issues tab and we will get back to you as soon as possible.