ATS Job Board Scraper avatar

ATS Job Board Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
ATS Job Board Scraper

ATS Job Board Scraper

Scrape job postings from any company's Greenhouse, Lever, Ashby, or Workday board into one normalized dataset: titles, departments, locations, remote status, salaries, posting dates, and full descriptions. Paste career-page URLs, filter by title or location, and export clean JSON via API.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Banea Teodor

Banea Teodor

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Categories

Share

ATS Job Board Scraper (Greenhouse, Lever, Ashby, Workday)

What does ATS Job Board Scraper do?

This Actor extracts job postings from the four applicant tracking systems behind most tech and enterprise career pages — Greenhouse, Lever, Ashby, and Workday — and returns them as one normalized dataset. Paste any mix of job board URLs; the platform is detected automatically, and every posting comes back in the same shape: title, department, team, locations, remote/hybrid status, employment type, salary when published, posting date, apply link, and the full description as clean plain text.

It uses the platforms' official/public JSON APIs — no browser, no HTML parsing — so it's fast, reliable, and doesn't break when career pages get redesigned.

Why use this Actor?

  • Four ATS platforms, one schema — monitor a whole portfolio or market without caring which ATS each company uses. Rows from Stripe (Greenhouse), Spotify (Lever), OpenAI (Ashby), and NVIDIA (Workday) stack in one table.
  • Hiring signals for sales and investing — a company opening sales roles is buying tools; one opening offices in a new country is expanding. jobId is stable, so diffing runs reveals new and closed positions.
  • Recruiting and job-board feeds — complete postings with clean plain-text descriptions, ready for AI matching, classification, or repost.
  • Filters that save money — title and location filters (e.g. "engineer" + "remote") are applied before billing, and on Workday the title filter even skips fetching non-matching jobs.
  • Salary data where it exists — Lever's structured ranges (min/max/currency/interval) and Ashby's compensation summaries ("$257K – $335K").
  • EU boards supportedboards.eu.greenhouse.io and jobs.eu.lever.co route to the right regional APIs automatically.

How much does it cost?

You pay per job returned. Greenhouse, Lever, and Ashby boards cost one request per company regardless of size, so scraping a 700-job board is as cheap as a 7-job one. Workday needs one request per job (its API only exposes details individually) — still just a few cents per company. Use maxJobsPerCompany and maxJobs to bound any run.

Input

FieldTypeDescriptionExample
startUrlsarrayJob board URLs — any mix of the four platforms.https://boards.greenhouse.io/stripe
titleFilterstringOnly jobs whose title contains every word (case-insensitive)."senior engineer"
locationFilterstringOnly jobs whose location fields contain this text."remote"
maxJobsPerCompanyintegerCap per board (0 = uncapped).100
maxJobsintegerHard ceiling across all boards.1000

Supported URL shapes: boards.greenhouse.io/{company} (also job-boards.…, boards.eu.…, and /embed/job_board?for={company}), jobs.lever.co/{company} (also jobs.eu.…), jobs.ashbyhq.com/{company}, {tenant}.wd5.myworkdayjobs.com/{site} (any wdN, with or without a locale segment).

Output

One row per job posting:

{
"platform": "lever",
"company": "spotify",
"companyName": null,
"sourceUrl": "https://jobs.lever.co/spotify",
"jobId": "a0fa7da3-4c3c-4fa2-97bd-7d6eb01eb9e5",
"requisitionId": null,
"title": "Android Engineer - Advertising",
"url": "https://jobs.lever.co/spotify/a0fa7da3-4c3c-4fa2-97bd-7d6eb01eb9e5",
"applyUrl": "https://jobs.lever.co/spotify/a0fa7da3-4c3c-4fa2-97bd-7d6eb01eb9e5/apply",
"department": "Engineering",
"team": "Advertising R&D",
"location": "New York, NY",
"additionalLocations": [],
"country": "US",
"isRemote": true,
"workplaceType": "remote",
"employmentType": "Permanent",
"salaryMin": 120000,
"salaryMax": 160000,
"salaryCurrency": "USD",
"salaryInterval": "per-year-salary",
"salaryText": "120000 - 160000 USD per year salary",
"postedAt": "2026-03-18T22:07:05.234Z",
"updatedAt": null,
"description": "Spotify's Advertising R&D team is looking for…",
"scrapedAt": "2026-08-27T16:30:00.000Z",
"runId": "AbC123..."
}

Field notes:

  • Platforms publish different fields — what a platform doesn't provide is null, never omitted: updatedAt is Greenhouse-only, structured salary is Lever-only, salaryText also comes from Ashby, requisitionId mostly from Workday and Greenhouse.
  • description is decoded to readable plain text (Greenhouse's entity-escaped HTML included) — ready for LLM pipelines.
  • postedAt for Workday is the posting date at day precision.

Tips and tricks

  • New-jobs monitor: schedule a daily run over your target companies and diff jobId sets — additions are new postings, removals are filled/closed roles.
  • Buying-signal lead gen: run weekly over a prospect list with titleFilter tuned to the roles that signal budget for your product (e.g. "data engineer" for a data-tooling vendor).
  • Remote-jobs board: locationFilter: "remote" across many boards produces a ready-to-publish feed.
  • Finding board URLs: a company's careers page usually links or redirects to its ATS — look for greenhouse.io, lever.co, ashbyhq.com, or myworkdayjobs.com in the URL or the apply buttons.
  • Workday costs more requests: its API serves one job per request. Set maxJobsPerCompany on huge tenants (NVIDIA has 2,000+ postings), and use titleFilter — it's applied before the per-job fetches.

Integrations

The dataset works with every Apify integration: export to JSON, CSV, Excel, push to Google Sheets, trigger webhooks on finish, or query via the Apify API from Python/Node — for example a scheduled run feeding new postings into a Slack channel or an Airtable pipeline via the Apify API.