ATS Job Postings Scraper (Greenhouse, Lever, Ashby, Workable)
Pricing
from $1.50 / 1,000 job results
ATS Job Postings Scraper (Greenhouse, Lever, Ashby, Workable)
Pricing
from $1.50 / 1,000 job results
Rating
0.0
(0)
Developer
LowfieldLabs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
ATS Job Postings Scraper — Greenhouse, Lever, Ashby, Workable
What does ATS Job Postings Scraper do?
Give it a list of companies — as careers-page URLs, provider:slug pairs, or even bare
company slugs — and it returns one clean, identically-shaped JSON record per job
posting, no matter which of the four supported applicant-tracking systems (ATS) the
company uses: Greenhouse, Lever, Ashby, or Workable. It auto-detects the ATS when you
don't specify one, so you don't need to know which system each company runs.
Typical uses: job-board aggregation, hiring-signal lead generation ("which of these 200 companies are hiring sales engineers right now?"), recruiting market research, competitor hiring intel, and feeding structured job data to AI agents and workflows. Because every provider is normalized to the same schema, downstream code handles one format instead of four.
Input
| Field | Type | Description |
|---|---|---|
companies | array (required) | One entry per company: careers URL (https://boards.greenhouse.io/stripe, https://jobs.lever.co/…, https://jobs.ashbyhq.com/…, https://apply.workable.com/…), explicit provider:slug (greenhouse:stripe, lever:plaid, ashby:ramp, workable:blueground), or a bare slug to auto-detect. |
keywords | array | Keep only jobs whose title (or description, if fetched) contains ANY of these, case-insensitive. |
locationContains | string | Keep only jobs whose location contains this text, e.g. "new york" or "remote". |
remoteOnly | boolean | Keep only jobs the board explicitly marks remote. |
maxAgeDays | integer | Drop postings older than this many days (jobs with no date are kept). |
maxJobsPerCompany | integer | Safety cap per company (default 200). |
includeDescription | boolean | Also fetch the full job description where the ATS provides it. |
Example input:
{"companies": ["greenhouse:stripe", "https://jobs.ashbyhq.com/ramp"],"keywords": ["engineer"],"remoteOnly": false,"maxJobsPerCompany": 100}
Output
One dataset record per job posting, always in this shape (download as JSON, CSV or Excel from the run's Dataset tab, or via the Apify API):
{"provider": "greenhouse","company": "stripe","id": "7954688","title": "Backend Engineer, Payments","url": "https://stripe.com/jobs/search?gh_jid=7954688","location": "New York, NY","remote": null,"department": "Engineering","employment_type": null,"published_at": "2026-06-12T18:30:00+00:00","description_html": null,"description_text": null}
Fields the source board doesn't expose are null rather than guessed. remote is true
or false only when the board says so explicitly.
Is it legal to scrape these job boards? (ToS position)
This Actor reads only the public, documented job-board APIs that Greenhouse, Lever, Ashby and Workable themselves publish for exactly this purpose — the same postings shown on each company's public careers page. There are no logins, no paywalls, no personal data, and no bot-evasion tricks: it makes a single request per company per run. If a company's board is private or removed, the Actor simply reports it as unresolved.
Pricing
Pay-per-event: a small flat Actor start fee per run plus a per-job job result fee — you pay only for jobs actually returned, never for unresolved companies or filtered-out postings. Exact prices are shown on this Actor's page.
FAQ
Which ATS platforms are supported? Greenhouse, Lever, Ashby and Workable. More (SmartRecruiters, Recruitee) are planned — tell us via the Issues tab if you need one.
How do I find a company's slug? From its careers-page URL: in
https://boards.greenhouse.io/stripe the slug is stripe. Or just pass the whole URL.
A company comes back "unresolved" — why? Its board may be private, empty, hosted on an unsupported ATS, or use a different slug than you guessed. The run's status message and log list every unresolved entry.
Can I run this on a schedule? Yes — use Apify Schedules to run it hourly/daily and diff new postings downstream.
Who maintains this? Lowfield Labs — a small automation studio. This Actor is built and maintained with AI-assisted engineering; issues filed on the Actor's Issues tab are triaged continuously.