ATS Job Scraper — Greenhouse, Lever, Ashby, Workday avatar

ATS Job Scraper — Greenhouse, Lever, Ashby, Workday

Pricing

from $0.00005 / actor start

Go to Apify Store
ATS Job Scraper — Greenhouse, Lever, Ashby, Workday

ATS Job Scraper — Greenhouse, Lever, Ashby, Workday

Give it company domains. It finds their ATS automatically and returns every open job in one normalized schema, with parsed salary. No cookies, no proxies, no board tokens to hunt down.

Pricing

from $0.00005 / actor start

Rating

0.0

(0)

Developer

ATS Data

ATS Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

ATS Job Scraper — Greenhouse, Lever, Ashby & Workday

Give it a company domain. Get back every open job, in one clean schema, with parsed salary.

No board tokens to hunt down. No cookies. No proxies. No login.

Input: ["stripe.com", "ramp.com", "palantir.com"]
Output: 1,022 jobs — normalized, deduplicated, salary parsed

What you actually get

Real rows from a single run across four different ATS platforms — one schema, no per-platform handling on your side:

Job titleCompanyLocationLevelSalaryATS
Security Engineer, CloudrampNew York, NY (HQ) +3mid$211,400–290,600/yrashby
Backend Software Engineer - Application DevelopmentpalantirPalo Alto, CAmid$135,000–200,000/yrlever
Account Executive, AI Startups (Hunter)stripeSan Francisco +1midnullgreenhouse
Software Engineer, Linux GraphicsnvidiaUS, CA, Santa Claramidnullworkday

Salary reads null when the company doesn't publish one — it is never guessed or filled in.

Straight to a spreadsheet

Export as CSV and nested fields flatten with / — no post-processing:

title,companySlug,department,locations/0,workplaceType,seniority,salary/min,salary/max,salary/currency,postedAt,source
"Security Engineer, Cloud",ramp,Engineering,"New York, NY (HQ)",hybrid,mid,211400,290600,USD,2026-04-07,ashby
Backend Software Engineer - Application Development,palantir,Dev,"Palo Alto, CA",hybrid,mid,135000,200000,USD,2026-06-18,lever
"Account Executive, AI Startups (Hunter)",stripe,Startups - Account Executives (NA),San Francisco,,mid,,,,2026-08-19,greenhouse
"Software Engineer, Linux Graphics",nvidia,,"US, CA, Santa Clara",,mid,,,,2026-08-25,workday

Full records also carry jobId, employmentType, applyUrl, descriptionText, descriptionHtml, contentHash and scrapedAt. Turn off includeDescription for a smaller, faster payload.


Why this one

Most ATS scrapers make you do the hard part: find the company's board slug, figure out which ATS they use, then run a different scraper for each one and reconcile four different output shapes.

This Actor does all of that for you.

Typical ATS scraperThis Actor
InputBoard slug you must find yourselfCompany domain
ATS coverageOne per ActorGreenhouse + Lever + Ashby + Workday
Output shapeDifferent per ATSOne schema for all
SalaryRaw text, if anyParsed {min, max, currency, period}
Change trackingBuilt in (new / updated / closed)
ProxiesOften requiredNone

Change tracking — turn it into a hiring monitor

Set onlyNewJobs: true, schedule the Actor daily, and each run returns only what changed:

  • added — jobs posted since the last run
  • updated — title, salary, location or description changed
  • removed — job closed or pulled (a signal in itself)

The first run stores a baseline. Every run after that is a diff.

Use it for:

  • Sales intelligence — a company opening 12 engineering roles is a buying signal
  • Recruiting — know about a role the hour it goes live
  • Market research — track hiring velocity and comp by company, team and level
  • Job boards — keep a live index without re-ingesting everything

Input

FieldTypeDefaultDescription
companiesarrayDomains (stripe.com) or board URLs (jobs.lever.co/palantir)
onlyNewJobsbooleanfalseReturn only added/changed jobs vs. the previous run
trackingKeystringdefaultTrack multiple company lists independently
includeRemovedJobsbooleanfalseAlso emit jobs that disappeared
includeDescriptionbooleantrueInclude full description text and HTML
maxJobsPerCompanyinteger0Cap per company (0 = no limit)
workdayFetchDetailsbooleantrueWorkday needs one extra request per job for descriptions

Board URLs are accepted directly, so you can skip resolution when you already know the board:

{
"companies": [
"stripe.com",
"jobs.lever.co/palantir",
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
]
}

Output

Every record has the same shape regardless of which ATS it came from:

{
"jobId": "ashby:ramp:34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"source": "ashby",
"companySlug": "ramp",
"companyDomain": "ramp.com",
"title": "Security Engineer, Cloud",
"department": "Engineering",
"team": "Backend",
"locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],
"workplaceType": "hybrid",
"employmentType": "FullTime",
"seniority": "mid",
"salary": { "min": 211400, "max": 290600, "currency": "USD", "period": "year" },
"descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams…",
"descriptionHtml": "…",
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-…/application",
"postedAt": "2026-04-07T17:12:35.753Z",
"scrapedAt": "2026-08-24T18:03:28.104Z",
"contentHash": "593a0ec77ef05d3c",
"changeType": "added"
}

contentHash changes only when the job's meaningful content changes — use it for your own diffing.

seniority is derived from the title: intern, junior, mid, senior, principal, manager, director, executive.


Salary parsing

Ashby exposes structured compensation, so those values are exact. For Greenhouse, Lever and Workday the range is parsed out of the posting text, handling the formats companies actually use:

$173,000.00 - $259,600.00/yr → 173000259600 USD/year
€55k–€70k per year → 5500070000 EUR/year
USD 90000 to 120000 annually → 90000120000 USD/year
The salary range is $10,000/month → 10000 USD/month

Version numbers, headcounts and date ranges are not mistaken for salary.

Coverage measured against live boards:

BoardJobsPostings stating salaryParsed
Ashby / ramp137137137 (100%)
Lever / palantir308234234 (100%)
Greenhouse / databricks824450444 (99%)

Companies that don't publish salary return salary: null. Nothing is invented.


Speed

No browser, no proxies — just the public JSON endpoints each ATS already serves.

BoardJobsTime
Greenhouse / databricks8240.5 s
Greenhouse / stripe5770.7 s
Lever / palantir3081.4 s
Ashby / ramp1370.3 s

Workday is slower by design: its list endpoint returns no descriptions, so each job needs one extra request.

Set workdayFetchDetails: false to skip that — much faster and cheaper, but descriptions come back empty and jobs open in several offices read "2 Locations" instead of naming them. With the default (true) you get the full description and the real location.


Supported ATS

ATSInput accepted
Greenhousedomain, boards.greenhouse.io/<slug>, job-boards.greenhouse.io/<slug>
Leverdomain, jobs.lever.co/<slug>
Ashbydomain, jobs.ashbyhq.com/<slug>
Workdaydomain, <tenant>.wd*.myworkdayjobs.com/<site>

More ATS platforms are being added. Need one in particular? Open an issue on the Actor and it gets prioritized.


Notes

  • Only public job board data is collected — the same pages any visitor can open. No accounts, no logins, no personal candidate data.
  • If a company's careers page can't be matched to a supported ATS, that company is skipped with a warning and the rest of the run continues.
  • A company can have more than one board. The one with the most open jobs is used as primary; the others are still reported.