ATS Job Board Scraper
Pricing
from $2.00 / 1,000 results
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
Maintained by CommunityActor 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.
jobIdis 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 supported —
boards.eu.greenhouse.ioandjobs.eu.lever.coroute 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
| Field | Type | Description | Example |
|---|---|---|---|
startUrls | array | Job board URLs — any mix of the four platforms. | https://boards.greenhouse.io/stripe |
titleFilter | string | Only jobs whose title contains every word (case-insensitive). | "senior engineer" |
locationFilter | string | Only jobs whose location fields contain this text. | "remote" |
maxJobsPerCompany | integer | Cap per board (0 = uncapped). | 100 |
maxJobs | integer | Hard 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:updatedAtis Greenhouse-only, structured salary is Lever-only,salaryTextalso comes from Ashby,requisitionIdmostly from Workday and Greenhouse. descriptionis decoded to readable plain text (Greenhouse's entity-escaped HTML included) — ready for LLM pipelines.postedAtfor Workday is the posting date at day precision.
Tips and tricks
- New-jobs monitor: schedule a daily run over your target companies and diff
jobIdsets — additions are new postings, removals are filled/closed roles. - Buying-signal lead gen: run weekly over a prospect list with
titleFiltertuned 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, ormyworkdayjobs.comin the URL or the apply buttons. - Workday costs more requests: its API serves one job per request. Set
maxJobsPerCompanyon huge tenants (NVIDIA has 2,000+ postings), and usetitleFilter— 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.