ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workable
Pricing
from $0.80 / 1,000 job delivereds
ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workable
Scrape open jobs straight from company career boards on Greenhouse, Lever, Ashby, Workable and SmartRecruiters: title, location, remote, department, posted date, apply link, full description and parsed salary range. Only-new mode for job alerts. No login, no proxy. Pay only per job delivered.
Pricing
from $0.80 / 1,000 job delivereds
Rating
0.0
(0)
Developer
ScrapeMole
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workable and SmartRecruiters jobs with salaries
Scrape open jobs straight from company career boards on Greenhouse, Lever, Ashby, Workable and SmartRecruiters. Paste board links (or just company names) and get every job's title, location, remote/hybrid, department, employment type, posted date, apply link, full description and a parsed salary range (min, max, currency, per year/month/hour).
Schedule it with Only new jobs since the last run and you get, and pay for, only the jobs you haven't seen yet: a job-alert feed for any list of companies.
You only pay for jobs delivered. Unknown companies, invalid links and "no new jobs" notices are reported as clear rows and never charged.
Why this jobs scraper
- First-party data, not a search engine. Jobs come from each company's own applicant tracking system (ATS) through its public job-board API, so they are complete, current and have the real apply link. No login, no CAPTCHAs.
- Five ATSs, one schema. Greenhouse, Lever (US and EU), Ashby, Workable and SmartRecruiters rows all have the same fields.
- Salaries parsed for you. Uses the ATS's own pay data when the company publishes it (Ashby, Greenhouse pay ranges), otherwise finds the range in the description:
$120k–$150k,€60.000 - €75.000 per year,£25/hour,90 000 – 110 000 EUR.salarySourcetells you which. - Auto-detects the ATS. Type
rampornotionand the Actor finds the board. - Fast and cheap. No browser and no proxy: 700 Stripe jobs take a couple of seconds.
What you get
| Field | Description |
|---|---|
jobId, title, url, applyUrl | The job and where to apply |
companyName, company, ats | Company, its board slug and the ATS |
location, locations, country | All locations the job lists |
remote, workplaceType | true for remote jobs; remote, hybrid or onsite when the ATS says |
department, team, employmentType | Org and contract type |
postedAt, updatedAt | ISO dates (when the ATS shows them) |
salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryText, salarySource | Parsed pay range |
description | Plain text (e-mail addresses removed) |
isNew | true in only-new mode |
How to scrape company job boards
- Add companies: board links such as
https://boards.greenhouse.io/stripe,https://jobs.lever.co/spotify,https://jobs.ashbyhq.com/notion,https://apply.workable.com/huggingface,https://jobs.smartrecruiters.com/ServiceNow, orgreenhouse:stripe, or juststripe. - Optional: filter by title keywords, excluded keywords, locations, remote only or posted within N days.
- Optional: turn on Only new jobs since the last run and schedule the Actor.
- Click Start and download JSON, CSV or Excel, or use the API.
Input example
{"companies": ["https://boards.greenhouse.io/stripe", "https://jobs.lever.co/spotify", "notion", "ramp"],"keywords": ["engineer", "data"],"excludeKeywords": ["intern"],"locations": ["New York", "Remote"],"onlyNew": true}
Output example
{"status": "ok","ats": "ashby","company": "notion","companyName": "Notion","title": "Software Engineer, Developer Platform","url": "https://jobs.ashbyhq.com/notion/8c0bf773-e536-45c9-9a6c-8ee478148cc8","applyUrl": "https://jobs.ashbyhq.com/notion/8c0bf773-e536-45c9-9a6c-8ee478148cc8/application","location": "San Francisco, California","locations": ["San Francisco, California", "New York, New York"],"country": "United States","remote": false,"workplaceType": "hybrid","department": "Engineering","employmentType": "FullTime","postedAt": "2026-10-19T17:28:06.956Z","salaryMin": 179000,"salaryMax": 200000,"salaryCurrency": "USD","salaryInterval": "year","salaryText": "$179,000 – $200,000","salarySource": "description","description": "WHO WE ARE\n\nNotion is the collaborative AI workspace…"}
Only new jobs (job alerts)
With Only new jobs since the last run on, the Actor remembers the job IDs it delivered for each company in a named key-value store on your Apify account (scrapemole-ats-jobs-state-<memory name>). The first run returns all matching jobs; later runs return only jobs you haven't received. Closed jobs are forgotten automatically.
- Use a different memory name for each saved search (for example
eng-berlinandsales-us). - Jobs cut off by Max jobs per company are not marked as seen, so they arrive in a later run.
- When nothing is new you get one free
NO_DATArow per company, so you can tell "no new jobs" from "broken". - Connect a webhook, Slack, Make or Zapier to the run to get the new jobs pushed to you.
Pricing
Pay per event, no start fee:
| Event | Free | Starter (Bronze) | Scale (Silver) | Business (Gold) |
|---|---|---|---|---|
job: one job delivered | $0.0015 | $0.0012 | $0.001 | $0.0008 |
1,000 jobs cost $1.20 on the Starter plan. A daily alert for 20 companies usually costs a few cents, because only new jobs are charged. Unknown companies, invalid input and "no new jobs" rows are free. Set a maximum cost per run and the Actor stops cleanly at that budget.
Use cases
- Job boards and aggregators: fresh, first-party listings with apply links and salaries.
- Sales and recruiting signals: which companies are hiring which roles, where, and how fast.
- Salary benchmarks by role, location and company.
- Personal job alerts for your target companies.
- Datasets for AI and labor-market research.
API, Python and AI agents
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("scrapemole/ats-jobs-scraper").call(run_input={"companies": ["stripe", "notion"], "keywords": ["engineer"]})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["companyName"], job["title"], job.get("salaryMin"), job["url"])
Works with schedules, webhooks, Make, Zapier, n8n and Apify's MCP server for AI agents.
FAQ
Which companies work? Any company whose careers page runs on Greenhouse, Lever, Ashby, Workable or SmartRecruiters. Check the link of the company's "Apply" page: boards.greenhouse.io, job-boards.greenhouse.io, jobs.lever.co, jobs.eu.lever.co, jobs.ashbyhq.com, apply.workable.com or jobs.smartrecruiters.com.
A company comes back NOT_FOUND. The slug doesn't exist on that ATS, or the company uses a different ATS or a custom domain. Paste the exact board link from the company's careers page.
Do I need a proxy? No. These are public job-board APIs. Leave the proxy off to keep runs cheap.
Why is salaryMin empty? Many companies don't publish pay. Where laws require it (for example in several US states), it's usually found.
Is this legal? The Actor reads jobs that companies publish for anyone to see through their public job-board APIs, and removes e-mail addresses from descriptions. You are responsible for how you use the data; check the terms that apply to you.
More from ScrapeMole
ScrapeMole builds focused, reliable scrapers for public data: pay per result, no start fees, clear error rows that are never charged, and a RUN_SUMMARY on every run.
- YouTube Transcript & Subtitles Scraper
- Google Trends Scraper
- YouTube Scraper
- YouTube Comments Scraper
- Telegram Channel Scraper
- Amazon Product & Search Scraper
- Google Jobs Scraper
- YouTube Shorts Scraper
- YouTube Channel Scraper
Building an AI agent with its own wallet? The YouTube and Google Trends data is also sold per call over x402 (USDC on Base, no account): see scrapemole.pages.dev. Questions or a missing field? Open an issue on this Actor. ScrapeMole is the maker of this Actor.