Greenhouse, Lever, Ashby & Workday Job Board Scraper avatar

Greenhouse, Lever, Ashby & Workday Job Board Scraper

Pricing

from $0.96 / 1,000 job records

Go to Apify Store
Greenhouse, Lever, Ashby & Workday Job Board Scraper

Greenhouse, Lever, Ashby & Workday Job Board Scraper

Scrape every open position from company career sites on Greenhouse, Lever, Ashby, Workday or SmartRecruiters via their public job-board APIs: title, location, department, salary, posted date, description snippet, apply link. Keyword + location filters, incremental mode, first record in ~1 s.

Pricing

from $0.96 / 1,000 job records

Rating

0.0

(0)

Developer

Matthew Curtis

Matthew Curtis

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Also SmartRecruiters — five ATS platforms, one Actor.

Scrape every open position from any company career site hosted on Greenhouse, Lever, Ashby, Workday or SmartRecruiters — five applicant-tracking systems behind tens of thousands of career pages — through their public job-board APIs. No browser, no login, no HTML parsing: a whole Greenhouse, Lever or Ashby board arrives in one request, so the first job record lands in about a second and a 1,000-job board costs a few seconds of compute.

Paste career-site URLs (or a single job URL for an instant lookup), optionally filter by keywords and location, and get one clean record per job: title, company, location(s), country, remote / hybrid / onsite, department, team, employment type, salary range when the company publishes one, requisition id, posted and updated dates, a description snippet and the apply link. Ids are stable across runs, so scheduled runs with knownIds only pay for new postings.

What it does

ATSCareer-site URL shapeTransportJobs per request
Greenhouseboards.greenhouse.io/<company>, job-boards.greenhouse.io/<company>, …/embed/job_board?for=<company>Job Board API (boards-api.greenhouse.io)whole board (content + pay ranges)
Leverjobs.lever.co/<company>, jobs.eu.lever.co/<company>Postings API (api.lever.co)whole board
Ashbyjobs.ashbyhq.com/<company>Posting API (api.ashbyhq.com) with compensationwhole board
Workday<tenant>.wd<n>.myworkdayjobs.com/[<locale>/]<site>the career site's own JSON (/wday/cxs/…/jobs)20 per page (+1 per job with details)
SmartRecruitersjobs.smartrecruiters.com/<Company>, careers.smartrecruiters.com/<Company>Posting API (api.smartrecruiters.com)100 per page (+1 per job with details)

A single job URL on any of the five (…/airbnb/jobs/8306554, jobs.lever.co/palantir/<uuid>, jobs.ashbyhq.com/openai/<uuid>, a Workday /job/<location>/<title>_<REQ> link, jobs.smartrecruiters.com/<Company>/<id>-…) returns that one job. The short forms greenhouse:airbnb, lever:palantir, ashby:openai, smartrecruiters:BoschGroup work too.

Custom-domain career pages (careers.example.com) are out of scope unless they are one of the hosted URLs above — the Actor cannot know which ATS sits behind an arbitrary domain. Open the company's "View all jobs" link and paste the hosted URL instead.

Input

FieldTypeDefaultDescription
boardsstring[]["https://boards.greenhouse.io/airbnb"]Career-site URLs, single job URLs or ats:company short forms. Several boards share maxItems.
querystring—Keywords: every word must appear in the title, department, team, location or employment type (case-insensitive). Workday and SmartRecruiters are also searched server-side first, so large boards stay cheap.
locationstring—Keep only jobs whose location text, country code or workplace type contains this (London, US, remote).
maxItemsinteger500Total records to return across all boards (1–10,000).
fetchDetailsbooleanfalseWorkday and SmartRecruiters list rows carry no description; turn this on to open each of their jobs (one extra request per job) for the description snippet, employment type and country. Greenhouse, Lever and Ashby lists already contain everything, so no extra requests are made for them.
knownIdsstring[][]id values you already have: skipped without a request, and a page made only of known ids stops pagination.
proxyConfigurationobjectApify ProxyDatacenter proxies work; the APIs are public.

Output

One record per job. Field names follow the convention shared by all mdcurt Actors (id, url, title, location, postedAt, description ≤ 300 chars, kind, source, scrapedAt).

{
"kind": "listing",
"id": "ashby:openai:240d459b-696d-43eb-8497-fab3e56ecd9b",
"ats": "ashby",
"board": "openai",
"company": null,
"url": "https://jobs.ashbyhq.com/openai/240d459b-696d-43eb-8497-fab3e56ecd9b",
"applyUrl": "https://jobs.ashbyhq.com/openai/240d459b-696d-43eb-8497-fab3e56ecd9b/application",
"title": "Research Engineer",
"location": "San Francisco",
"locations": ["San Francisco"],
"country": "United States",
"remote": null,
"workplaceType": null,
"department": "Research",
"team": "Research",
"employmentType": "FullTime",
"salary": "$250K – $445K • Offers Equity",
"salaryMin": 250000,
"salaryMax": 445000,
"currency": "USD",
"requisitionId": null,
"postedAt": "2025-04-05T00:03:20.653Z",
"updatedAt": null,
"description": "By applying to this role, you will be considered for Research Engineer roles across all teams at OpenAI…",
"source": { "ats": "ashby", "board": "openai" },
"scrapedAt": "2026-11-02T00:24:49.000Z"
}
  • id is <ats>:<board>:<native id> (Greenhouse job id, Lever/Ashby UUID, Workday requisition id such as JR2028280, SmartRecruiters posting id) — stable across runs and safe to feed back as knownIds.
  • salary / salaryMin / salaryMax / currency are filled only when the company publishes a range (Ashby compensation, Greenhouse pay-transparency ranges, Lever salary ranges). Workday and SmartRecruiters do not expose structured pay.
  • postedAt is the board's publish date; Workday only says "Posted N Days Ago", which is converted to a date at day precision (null for "30+ Days Ago").
  • workplaceType is remote / hybrid / onsite when the board states it (or the title/location says so), otherwise null.
  • kind is listing for list-call records and detail for Workday/SmartRecruiters jobs opened with fetchDetails.

The key-value store holds a SUMMARY record: boards by ATS, jobs seen and filtered out, pages stopped by known ids, duplicates, failed requests, p95 latency, time to first record and compute seconds.

Pricing

Pay per event: $0.005 per run start + $0.0012 per job record (tier discounts for paid plans). A one-job lookup costs $0.0062; a full 800-job Ashby board costs under $1. That is 40 % under the $0.002 median of Greenhouse/Lever/Ashby/Workday scrapers on the Store because a whole board is one request — there is no browser and no per-job fetch to pay for.

Monitoring new postings cheaply (incremental mode)

Schedule the Actor and pass the id values of your last dataset as knownIds: known jobs are skipped without a request, and on Workday / SmartRecruiters pagination stops at the first page made only of known ids, so a daily run pays for new postings only. Pair it with mdcurt/dataset-diff-monitor to get an alert when a company opens, changes or closes a role.

Speed (live tests, datacenter egress)

  • One-job lookup: first record in 0.9 s, run done in ~4 s.
  • Lever board, 301 jobs, keyword filter: 60 records in 8.5 s (the Lever API returns full descriptions, ~6 MB for a 300-job board).
  • Ashby + Greenhouse, 949 jobs, location filter: 150 records, first in 1.2 s, run done in 5 s (~5,000 records/minute).
  • Workday + SmartRecruiters with details: 80 detail records in 27 s (~180 records/minute, 85 requests).
  • Seven boards, 3,000 records with details: see tests.md.

Limitations

  • Only the five hosted ATS URL shapes above; custom-domain career pages, Workable (rate-limited from datacenter IPs), Taleo, iCIMS, SuccessFactors and BambooHR are not supported in this version.
  • Description is a ≤ 300-character plain-text snippet, never the full posting (link to url for the rest). E-mail addresses and phone numbers that appear in posting text are redacted.
  • Workday tenants that require a locale or a non-standard site path work when you paste the exact career-site URL; the Actor keeps the locale you give it.
  • Keyword matching is per word against title/department/team/location/employment type; it is not a full-text search of descriptions (Workday and SmartRecruiters are narrowed server-side with the same words first).
  • Ashby has no single-job endpoint: a single Ashby job URL fetches the board once and returns that job.

Changelog

  • 1.0.0 — first release: Greenhouse, Lever, Ashby, Workday, SmartRecruiters; keyword + location filters; details for Workday/SmartRecruiters; incremental knownIds; salary fields.