ATS Job Board Scraper - Greenhouse, Lever, Ashby, Workable avatar

ATS Job Board Scraper - Greenhouse, Lever, Ashby, Workable

Pricing

$2.00 / 1,000 job listing returneds

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

ATS Job Board Scraper - Greenhouse, Lever, Ashby, Workable

Pull every open job from a company's official ATS job board (Greenhouse, Lever, Ashby, Workable) and get one normalised, deduplicated schema across all of them.

Pricing

$2.00 / 1,000 job listing returneds

Rating

0.0

(0)

Developer

Pablo D

Pablo D

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

ATS Job Board Scraper — Greenhouse, Lever, Ashby & Workable in one schema

Point this Actor at a list of company career pages and get back every open role, from four different applicant tracking systems, in one normalised schema. No API keys, no proxies, no login.

Most job scrapers on the Store cover a single ATS, so tracking 200 companies means running four different Actors and reconciling four different field names. This one takes a mixed list and does the reconciling for you.

What it does

InputA list of company job boards — a careers URL, or provider:token
OutputOne dataset row per open job, identical fields for every ATS
SourcesGreenhouse, Lever, Ashby, Workable — official public job-board APIs
Speed~1 request per company; a 50-company list finishes in about a minute

Use cases

  • Recruiting / talent intelligence — track hiring at a portfolio of companies and see which teams are growing.
  • Job boards and newsletters — build a niche board (e.g. climate tech, Berlin, remote design) from the source of truth rather than a re-scraped aggregator.
  • Sales & market research — job postings are a leading indicator: a company hiring five Salesforce admins is buying Salesforce.
  • Competitive monitoring — schedule a daily run and diff the dataset to get new-role alerts.

Input

Pass the boards in whatever form you have them. All of these work:

{
"companies": [
"https://job-boards.greenhouse.io/stripe",
"https://jobs.lever.co/palantir",
"https://jobs.ashbyhq.com/ramp",
"https://apply.workable.com/blueground/",
"greenhouse:figma",
"lever:leverdemo",
"ashby:ramp"
],
"includeDescription": true,
"remoteOnly": false,
"titleKeywords": ["engineer", "data"],
"postedWithinDays": 30,
"maxJobsTotal": 1000,
"requestDelaySeconds": 1
}

A bare token (stripe) also works — it uses the Default ATS provider setting.

Where do I find a company's board token?

It is the path segment in the careers URL:

ATSCareers URLToken
Greenhousehttps://job-boards.greenhouse.io/**stripe**stripe
Leverhttps://jobs.lever.co/**palantir**palantir
Ashbyhttps://jobs.ashbyhq.com/**ramp**ramp
Workablehttps://apply.workable.com/**blueground**/blueground

If a company's careers page is on their own domain, the ATS is usually still visible in the "Apply" link.

Boards that were live when this Actor was last verified, if you want something to try it on: greenhouse:monzo, lever:leverdemo, ashby:ramp, workable:blueground, workable:skroutz, workable:orfium, workable:epignosis.

Output

One row per job. Every field is present for every ATS (null where that ATS does not publish it):

{
"source": "ashby",
"companySlug": "ramp",
"companyName": null,
"jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"title": "Security Engineer, Cloud",
"url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-.../application",
"location": "New York, NY (HQ)",
"locations": ["New York, NY (HQ)", "Remote (Canada)"],
"country": "USA",
"department": "Engineering",
"team": "Backend",
"employmentType": "FullTime",
"isRemote": true,
"workplaceType": "Hybrid",
"postedAt": "2026-04-07T17:12:35.753000+00:00",
"updatedAt": null,
"salaryText": "$211.4K - $290.6K",
"descriptionText": "About Ramp ...",
"descriptionHtml": "<p>About Ramp ...</p>",
"boardUrl": "https://jobs.ashbyhq.com/ramp",
"scrapedAt": "2026-09-10T10:22:41.010000+00:00"
}

The run also writes a RUN_SUMMARY record to the key-value store with the number of boards processed, jobs pushed, and any boards that failed — handy when you are validating a long list of tokens.

Filters

titleKeywords, excludeTitleKeywords, locationKeywords, remoteOnly, postedWithinDays, maxJobsPerCompany, maxJobsTotal. All filtering happens after the fetch, so filtering does not reduce the number of requests — but maxJobsTotal does cap your dataset size and therefore your cost.

Honest limitations

  • Four ATS platforms, not all of them. SmartRecruiters and Recruitee are deliberately not supported: their robots.txt says Disallow: / for generic clients, so this Actor does not touch them. Workday, Taleo, iCIMS and SAP SuccessFactors have no comparable open board API and are out of scope.
  • Company name. Greenhouse and Workable return the company name; Lever and Ashby do not, so companyName is null for those (the companySlug and boardUrl always identify the company).
  • updatedAt is only published by Greenhouse.
  • Salary is only published by Ashby (and occasionally Lever). Most boards do not expose it.
  • Only public, listed jobs. Confidential or unlisted postings never appear in these APIs, and this Actor does not try to find them.
  • Board tokens must be right. A wrong token returns HTTP 404; turn on Emit an item for failed boards to get those back as rows instead of just log lines.
  • Description size. includeDescription typically multiplies dataset size by 10–30×. Turn it off if you only need titles and links.

How the data is obtained

Every source is the ATS vendor's own public, unauthenticated job-board API, published so that job aggregators can consume it:

  • boards-api.greenhouse.io/v1/boards/{token}/jobs
  • api.lever.co/v0/postings/{token}?mode=json
  • api.ashbyhq.com/posting-api/job-board/{token}
  • apply.workable.com/api/v1/widget/accounts/{token}

There is no login, no captcha solving, no proxy rotation and no browser automation. robots.txt was checked for each host; Lever asks for a one-second crawl delay and the Actor enforces it (the delay input cannot go below 1 second for Lever).

Changelog

See CHANGELOG.md.

Support

Found a bug, or need a field this Actor does not return yet? Open an issue on the Actor's Issues tab, or email pablodevigoalertas@gmail.com. Issues are read first.