ATS Jobs Scraper - Greenhouse, Lever & Ashby Boards avatar

ATS Jobs Scraper - Greenhouse, Lever & Ashby Boards

Pricing

Pay per usage

Go to Apify Store
ATS Jobs Scraper - Greenhouse, Lever & Ashby Boards

ATS Jobs Scraper - Greenhouse, Lever & Ashby Boards

Pull every open job from any company's Greenhouse, Lever or Ashby board in one schema, or give it company domains and let it discover which ATS and board token they use.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Bora Sipahi

Bora Sipahi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Most companies do not run their own job site. They rent one from an applicant tracking system, and the three most common for technology and growth companies, Greenhouse, Lever and Ashby, all publish every open job through a public, keyless JSON API. ATS Jobs Scraper reads those APIs and returns every job in one consistent schema, whichever system the company uses.

It also solves the part nobody else sells: finding the board in the first place. Give it company domains and it visits their careers pages, probes all three APIs, and tells you which ATS and which board token each company uses. That index is cached, so you pay for a discovery once and reuse it for free on every later run.

No proxies, no browser, no login. A run over three boards with a thousand jobs finishes in seconds.

Two ways to use it

Boards you already know. Fill Boards with the system and token from the board URL:

  • boards.greenhouse.io/stripe is {"ats": "greenhouse", "token": "stripe"}
  • jobs.lever.co/veeva is {"ats": "lever", "token": "veeva"}
  • jobs.ashbyhq.com/ramp is {"ats": "ashby", "token": "ramp"}

Companies you only know by website. Fill Company domains with ["stripe.com", "ramp.com"]. The Actor resolves each domain to its board, then fetches the jobs. Turn on Discover only to get just the board list without the jobs.

Then filter with Search query, Departments, Locations, Remote only and Posted within (days), and download the dataset as JSON, CSV or Excel. For a daily feed of only new postings, turn on Incremental mode and add a Schedule.

Output

Every job row has the same fields regardless of system:

FieldMeaning
ats, boardToken, companyName, companyDomainWhere the job came from
jobId, requisitionIdStable ids, e.g. greenhouse:stripe:8172508
title, department, team, employmentTypeBasics; employment type is normalised to full-time, part-time, contract, internship
locationName, locationCountry, isRemoteLocation as published plus a remote flag
minSalary, maxSalary, currencyWhen the board publishes a range (Lever and Ashby do for many jobs, Greenhouse for some)
descriptionSnippetFirst 300 characters of the description, always included
descriptionHtml, descriptionTextThe full text, only when Include full description is on
applyUrl, canonicalUrlDeep links to the official listing and application form
publishedAt, updatedAtISO timestamps
aiDisclaimer, aiOptOutRequestUrlGreenhouse's automated-decision disclosure fields, carried through unchanged
scrapedAtRun timestamp

In Discover only mode each row is a board: companyDomain, ats, boardToken, boardUrl, jobCount, companyName, discoveredVia.

Pricing

Three events, all listed on the Pricing tab:

  • job-listing, once per job row saved. Filtered-out, duplicate and already-delivered jobs are never charged.
  • job-detail, once per job row when Include full description is on. Off by default.
  • board-discovered, once per board found for a company domain. Cached boards and boards you supply yourself are free.

Set Maximum jobs to cap a run. No platform usage is passed on to you.

Input example

{
"companyDomains": ["stripe.com", "ramp.com", "zoox.com"],
"searchQuery": "engineer, developer",
"remoteOnly": true,
"postedWithinDays": 14,
"includeFullDescription": false,
"maxItems": 500
}

Output example

{
"ats": "lever",
"boardToken": "zoox",
"companyName": "Zoox",
"jobId": "lever:zoox:f4746da4-8eb8-43e2-b7ce-bf3c7cf9640d",
"title": "Autonomy System Test Engineer",
"department": "Software",
"team": "Software Quality Assurance",
"employmentType": "full-time",
"locationName": "Foster City, CA",
"locationCountry": "US",
"isRemote": false,
"minSalary": 144000,
"maxSalary": 193000,
"currency": "USD",
"descriptionSnippet": "Zoox is building the first ground-up, fully autonomous vehicle fleet...",
"applyUrl": "https://jobs.lever.co/zoox/f4746da4-8eb8-43e2-b7ce-bf3c7cf9640d/apply",
"canonicalUrl": "https://jobs.lever.co/zoox/f4746da4-8eb8-43e2-b7ce-bf3c7cf9640d",
"publishedAt": "2026-08-12T16:02:11.000Z",
"scrapedAt": "2026-09-07T00:30:00.000Z"
}

Data sources and what we do with them

All three vendors document their job board endpoints as public, unauthenticated read APIs. The Actor only reads listed, open postings; it never touches applications, candidates or anything behind a login. Job descriptions are the employer's text, so the full description is opt-in and every row deep-links to the official listing and apply page. Recruiter e-mail addresses and phone numbers pasted into descriptions are removed by default. Greenhouse's AI-disclosure fields are passed through so downstream users who need them for local hiring law can keep them.

Workday is deliberately not included: it has no documented public API and blocks datacenter traffic.

  • Pair with a Slack or e-mail integration and Incremental mode for a daily "new jobs at these companies" digest.
  • Use Discover only to build a company-to-ATS index once and feed the tokens into any other tooling you run.

FAQ

Discovery found nothing for a domain. The company either uses a different ATS (Workday, SmartRecruiters, iCIMS, a custom site) or embeds the board in a way the careers page does not expose. Supply the board token directly if you know it.

Why are salaries empty for a company? The board only exposes salary when the employer publishes one. Lever and Ashby expose a structured range when present, Greenhouse exposes pay ranges on some boards.

Is the same job across two boards deduplicated? Within a run each job id is delivered once. The same role posted on two different systems is rare; if you need cross-system deduplication, use the title and companyName fields downstream.

Something broke? Open an issue on the Actor's Issues tab. The three APIs are checked several times a day and the Actor is updated when a vendor changes its payload.