ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workable avatar

ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workable

Pricing

from $0.80 / 1,000 job delivereds

Go to Apify Store
ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workable

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

ScrapeMole

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

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. salarySource tells you which.
  • Auto-detects the ATS. Type ramp or notion and the Actor finds the board.
  • Fast and cheap. No browser and no proxy: 700 Stripe jobs take a couple of seconds.

What you get

FieldDescription
jobId, title, url, applyUrlThe job and where to apply
companyName, company, atsCompany, its board slug and the ATS
location, locations, countryAll locations the job lists
remote, workplaceTypetrue for remote jobs; remote, hybrid or onsite when the ATS says
department, team, employmentTypeOrg and contract type
postedAt, updatedAtISO dates (when the ATS shows them)
salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryText, salarySourceParsed pay range
descriptionPlain text (e-mail addresses removed)
isNewtrue in only-new mode

How to scrape company job boards

  1. 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, or greenhouse:stripe, or just stripe.
  2. Optional: filter by title keywords, excluded keywords, locations, remote only or posted within N days.
  3. Optional: turn on Only new jobs since the last run and schedule the Actor.
  4. 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-berlin and sales-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_DATA row 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:

EventFreeStarter (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 ApifyClient
client = 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.

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.