Greenhouse Jobs Scraper: Lever, Ashby, Workday API avatar

Greenhouse Jobs Scraper: Lever, Ashby, Workday API

Pricing

from $1.00 / 1,000 job posting results

Go to Apify Store
Greenhouse Jobs Scraper: Lever, Ashby, Workday API

Greenhouse Jobs Scraper: Lever, Ashby, Workday API

ATS Jobs API: Greenhouse, Lever, Ashby, Workday, Workable & SmartRecruiters jobs scraper. Enter company domains or careers URLs; ATS is auto-detected. One normalized schema with salary, remote flag & dates, filters and new-job monitoring.

Pricing

from $1.00 / 1,000 job posting results

Rating

0.0

(0)

Developer

Adyanth Ganesh

Adyanth Ganesh

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

ATS Jobs API – Greenhouse, Lever, Ashby & Workday Jobs Scraper

ATS Jobs API is a Greenhouse, Lever, Ashby, Workday jobs scraper and API that pulls every open job posting straight from company applicant tracking systems (ATS) – plus Workable and SmartRecruiters – in one normalized format. Just paste company domains (stripe.com), careers page URLs or ATS board links: the Actor auto-detects the ATS and board token for you, applies your filters and can output only new jobs since the last run.

Because data comes from the official public job-board endpoints that power each company's careers page, results are fast, complete, and fresh – no proxies, no browsers, no login.

What does ATS Jobs API do?

  • 🔎 Auto-detects the ATS from a company domain, careers page, ATS board URL or bare board token
  • 🧩 6 ATS platforms in one Actor: Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters
  • 📐 One normalized output schema for every ATS: company, title, department, team, locations, remote flag, workplace type, employment type, posted/updated dates, salary, description (text + HTML), apply URL, job ID
  • 💰 Salary data: structured pay ranges from Ashby, Lever (and Greenhouse on request), plus salary ranges parsed from job descriptions
  • 🎯 Filters: keywords, exclude keywords, locations, remote only, posted within N days, departments, employment types
  • 🔔 Monitoring mode: only new (or changed) postings since the previous run – ideal for job alerts and schedules
  • 🛡️ Robust: retries with backoff, per-company error isolation (one broken board never fails your run), and a per-company run summary
  • ⚡ Fast and cheap: thousands of jobs per minute on the default 256 MB memory setting (large boards are streamed, not loaded into memory)

Supported ATS platforms

ATSExample inputNotes
Greenhousestripe.com, https://boards.greenhouse.io/stripe, greenhouse:stripeFull descriptions; optional structured pay ranges
Leverhttps://jobs.lever.co/spotify, lever:palantirUS and EU (jobs.eu.lever.co) boards, structured salary when published
Ashbynotion.so, https://jobs.ashbyhq.com/openai, ashby:rampStructured compensation, remote flag, secondary locations
Workdayhttps://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSiteAny *.myworkdayjobs.com or myworkdaysite.com careers site
Workablehttps://apply.workable.com/huggingface/, workable:skroutzFull descriptions
SmartRecruitershttps://jobs.smartrecruiters.com/BoschGroup, smartrecruiters:ServiceNowFull descriptions, hybrid/remote flags

How to use ATS Jobs API

  1. Click Try for free / Start.
  2. In Companies, add one company per line – domains, careers URLs, ATS links or board tokens all work.
  3. Optionally set filters (keywords, locations, remote only, posted within N days, departments) and Max jobs per company.
  4. Run the Actor and download your jobs as JSON, CSV, Excel or HTML, or fetch them via the Apify API.
  5. To get alerts, enable Monitoring mode and schedule the Actor (e.g. daily). Each run then returns only postings you haven't seen before.

How ATS auto-detection works

  • ATS URLs (Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters) are parsed directly.
  • Company domains and careers pages are scanned for links to ATS boards; at the same time the likely board tokens (e.g. stripe for stripe.com) are checked against every supported ATS.
  • Bare tokens (e.g. notion) are checked against Greenhouse, Lever, Ashby, Workable and SmartRecruiters; the board with the most open jobs wins.
  • Use a prefix like lever:acme to skip detection. Workday sites need their careers URL (or must be linked from the company's careers page) because Workday URLs can't be guessed from a domain.

Input example

{
"companies": [
"stripe.com",
"https://jobs.lever.co/spotify",
"notion",
"https://apply.workable.com/huggingface/",
"https://jobs.smartrecruiters.com/BoschGroup",
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
],
"keywords": ["engineer", "data scientist"],
"locations": ["New York", "Remote"],
"postedWithinDays": 14,
"maxJobsPerCompany": 100,
"monitoringMode": false
}

Output example

Each job posting is one dataset item with the same fields regardless of ATS:

{
"company": "Ramp",
"title": "Machine Learning Engineer",
"department": "Engineering",
"team": "Applied AI",
"location": "New York, NY (HQ)",
"locations": ["New York, NY (HQ)", "Remote (US)"],
"country": "USA",
"remote": true,
"workplaceType": "Hybrid",
"employmentType": "Full-time",
"postedAt": "2026-09-23T19:39:11Z",
"updatedAt": null,
"salaryMin": 200000,
"salaryMax": 330000,
"salaryCurrency": "USD",
"salaryInterval": "YEAR",
"salaryText": "$200K - $330K",
"salarySource": "structured",
"descriptionText": "About Ramp\n\nRamp is building ...",
"descriptionHtml": "<h1>About Ramp</h1><p>...",
"jobUrl": "https://jobs.ashbyhq.com/ramp/2a1b...",
"applyUrl": "https://jobs.ashbyhq.com/ramp/2a1b.../application",
"ats": "ashby",
"atsBoardToken": "ramp",
"atsBoardUrl": "https://jobs.ashbyhq.com/ramp",
"jobId": "2a1b...",
"requisitionId": null,
"sourceInput": "https://jobs.ashbyhq.com/ramp",
"scrapedAt": "2026-10-08T06:39:38Z"
}

In monitoring mode every item also has changeType: new or changed.

The dataset has ready-made views: Overview, Salaries, New & changed (monitoring) and Full details. A per-company SUMMARY record (detected ATS, board URL, jobs found/saved, errors) is stored in the run's key-value store.

Use cases

  • Job boards & aggregators: build niche job boards (remote, AI, fintech, climate…) from hundreds of company career sites.
  • Recruiting & sales intelligence: track which companies are hiring, for which teams and where – a strong buying-intent signal for B2B sales and staffing agencies.
  • Job alerts: schedule monitoring mode and push new postings to Slack, email, Google Sheets or your ATS via Apify integrations, Make, Zapier or n8n.
  • Labor-market & salary research: analyze pay ranges, remote share and hiring velocity across companies and ATS platforms.
  • AI agents & RAG: feed clean, structured job data (text + HTML) to LLM pipelines.

Pricing

This Actor uses pay-per-event pricing – you pay for job postings saved to your dataset, plus a tiny fee per run.

EventPrice
Job posting saved (job-result)$1.50 per 1,000 jobs ($0.0015 per job)
Actor start (actor-start)$0.005 per run

Platform usage (compute) is included. Set Maximum cost per run in run options to cap your spending – the Actor stops cleanly as soon as the limit is reached and never saves jobs it can't charge for. Companies that fail or return no jobs cost nothing; a monitoring run that finds no new postings costs only the start fee.

Tips for best results

  • Use Max jobs per company to keep test runs small; leave it empty for full career sites.
  • Turn off Include job descriptions for the fastest runs when you only need titles, locations and links (especially for Workday and SmartRecruiters, which need one extra request per job for descriptions).
  • Keywords and locations match whole words, case-insensitive (US matches "Austin, TX, US" but not "Austria"); enable Also match keywords in job description for broader keyword matching.
  • Filters are lenient about missing data: jobs whose ATS doesn't publish a posting date or employment type are kept by Posted within last N days and Employment types.
  • Use a separate Monitoring state store name for each independent alert/schedule.

Combine career-site jobs with Google Jobs for full coverage, or start from company names.

All of these are maintained by the same developer and export flat JSON, CSV or Excel, so you can feed one tool's dataset into the next.

FAQ

Is it legal to scrape jobs from ATS job boards? The Actor only reads public job postings from the same public endpoints that power companies' own careers pages. It doesn't log in or collect personal data. You should still make sure your use of the data complies with applicable laws and the sites' terms.

Why didn't my company domain get detected? Some companies host their careers pages on a separate domain, behind bot protection, or use an ATS that isn't supported. Paste the URL of the job board itself (e.g. the link of any job posting) or use a prefixed token such as greenhouse:acme. The run summary shows why each company failed.

Which ATS platforms are not supported? iCIMS, Taleo, SuccessFactors, BambooHR, Personio, Recruitee, Teamtailor and other ATSs aren't supported yet. Let us know via the Issues tab which ones you need.

How many jobs can I get from a Workday site? Workday's public search API can cap or truncate results for very large employers (often around 2,000 postings). For such employers, use keywords (they are sent to Workday's own search) to reach more specific roles.

How does monitoring mode work? For each company the Actor stores the IDs and a fingerprint (title, locations, department, employment type, salary) of jobs it has saved, in a named key-value store in your account. The next run outputs only postings that are new or whose fingerprint changed. The first run saves everything and creates the baseline. Jobs that were not saved because of Max jobs per company / Max jobs in total are not remembered, so they appear on a later run. Entries not seen for 120 days are cleaned up automatically.

Do I need proxies? No. The Actor uses public JSON endpoints and works without proxies.

Can I use it via API or with AI agents? Yes. Run it via the Apify API, the Apify client for Python/JavaScript, integrations, or the Apify MCP server, and read the results from the default dataset.

I found a bug or need a feature. Please open an issue in the Issues tab – feedback is very welcome and usually handled quickly.