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

ATS Job Scraper - Greenhouse, Lever, Ashby, Workday

Pricing

from $1.00 / 1,000 job postings

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

ATS Job Scraper - Greenhouse, Lever, Ashby, Workday

Job postings from Greenhouse, Lever, Ashby, Workday and SmartRecruiters in one normalized schema, via official public APIs. Give it a company domain and it finds the ATS for you.

Pricing

from $1.00 / 1,000 job postings

Rating

0.0

(0)

Developer

Lee Robidas

Lee Robidas

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Share

ATS Jobs Scraper — Greenhouse, Lever, Ashby, SmartRecruiters & Workday in one schema

Pull job postings from company career boards across five applicant tracking systems and get back one normalized schema. No API keys, no login, no proxies.

Give it a company domain and it works out which ATS they use on its own.

Why this one

Every other job-board Actor covers a single platform. If you track hiring across 200 companies, they're spread over Greenhouse, Lever, Ashby and SmartRecruiters — so you end up running three or four Actors and reconciling three or four different JSON shapes by hand.

This Actor does that for you:

  • One schema. A Greenhouse job and a SmartRecruiters job come out with identical fields.
  • Automatic ATS detection. You supply ramp.com; it finds ashby:ramp. Nobody memorises board slugs for 200 companies, and every other Actor makes you.
  • Official public APIs. These are the endpoints the boards themselves are built on — not HTML scraping. Nothing breaks when a careers page gets redesigned, and there are no proxy costs or blocks.
  • Business data only. Job postings, not personal profiles.

Input

Any combination of three ways to name a board:

{
"companyDomains": ["ramp.com", "stripe.com", "linear.app"],
"boards": ["greenhouse:stripe", "ashby:ramp", "smartrecruiters:BoschGroup"],
"boardUrls": ["https://jobs.lever.co/spotify"],
"includeDescription": true,
"titleKeywords": ["engineer"],
"locationKeywords": ["London", "Remote"],
"departments": ["Engineering"],
"remoteOnly": false,
"postedAfter": "2026-07-01",
"maxJobsPerBoard": 500
}

remoteOnly keeps postings whose remote status is unstated, because most boards omit the flag — filtering them out would silently drop the majority of Greenhouse results.

Output

{
"id": "ashby:34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"platform": "ashby",
"boardSlug": "ramp",
"company": null,
"title": "Security Engineer, Cloud",
"url": "https://jobs.ashbyhq.com/ramp/34413f8d-...",
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-.../application",
"location": "New York, NY (HQ)",
"locations": ["New York, NY (HQ)", "Remote (US)", "Remote (Canada)", "Miami, FL"],
"remote": true,
"department": "Engineering",
"team": "Backend",
"employmentType": "Full Time",
"descriptionHtml": "<h1><strong>About Ramp</strong></h1>...",
"descriptionText": "About Ramp\nRamp is building...",
"compensation": { "min": 211400, "max": 290600, "currency": "USD", "interval": "year" },
"postedAt": "2026-04-07T17:12:35.753+00:00",
"updatedAt": null
}

Fields a platform doesn't publish come back null rather than guessed. remote is only true/false when the posting says so — it is never inferred from a city name.

Coverage

PlatformDescriptionsPay bandsNotes
Greenhousein list responseWhole board in one request
Leverin list responseyesRequirements and benefits sections included
Ashbyin list responseyesStructured pay bands, multiple locations
SmartRecruiters+1 request per jobPaginated; handles boards of 5,000+ postings
Workday+1 request per jobPages at 20; see the note below

Verified against live boards: Stripe (548 jobs), Ramp (125), Spotify (105), Ubisoft (279), Bosch (4,712), Workday (337), NVIDIA (2,000).

Workday boards are addressed as workday:tenant.wdN/SiteName, for example workday:nvidia.wd5/NVIDIAExternalCareerSite. Pasting the board URL into boardUrls works too and is easier. Workday's list endpoint returns placeholders rather than data — locations come back as "6 Locations" and dates as "Posted Today" — so real locations and publish dates require includeDescription: true, which fetches each posting. With it off, this Actor returns null rather than passing Workday's placeholder text off as a location.

Detection

companyDomains resolves in two passes: read the company's careers pages for a board link, then fall back to deriving a slug from the domain and verifying it against each ATS. Detection succeeds on roughly three quarters of typical startup and mid-market domains. Large enterprises on Workday or SuccessFactors are not covered yet — pass those boards explicitly if they use one of the four supported systems.

Pricing

Pay per event: a small charge to start a run, per job returned, and per company domain successfully resolved to a board. You are not charged for domains that resolve to nothing.