ATS Jobs Scraper - Greenhouse, Lever, Ashby & Workable API avatar

ATS Jobs Scraper - Greenhouse, Lever, Ashby & Workable API

Pricing

from $1.50 / 1,000 jobs

Go to Apify Store
ATS Jobs Scraper - Greenhouse, Lever, Ashby & Workable API

ATS Jobs Scraper - Greenhouse, Lever, Ashby & Workable API

ATS jobs scraper for Greenhouse jobs, Lever jobs, Ashby jobs and Workable jobs: every open job from company career pages in one unified schema (title, department, location, remote, salary, posted date, apply URL, description). Official job board APIs. $1.50 per 1,000 jobs.

Pricing

from $1.50 / 1,000 jobs

Rating

0.0

(0)

Developer

OFFGRID LABS

OFFGRID LABS

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Security

Limited permissions

Share

ATS jobs scraper: Greenhouse, Lever, Ashby and Workable jobs in one format

TL;DR: ATS Jobs Scraper collects every open job from company career pages hosted on Greenhouse, Lever, Ashby and Workable and returns them in one unified schema: title, department, location, remote flag, salary range (where published), posted date, apply URL and description. It is built for sales teams tracking hiring signals, job boards, recruiters, researchers and AI agents. You pay $1.50 per 1,000 jobs saved; boards that aren't found cost nothing.

  • Hiring-signal tracking: watch target accounts' ATS jobs for sales triggers
  • Aggregate Greenhouse jobs, Lever jobs, Ashby jobs and Workable jobs into one job board
  • Recruiter market mapping: which companies post which roles where
  • Salary-range research from published pay bands

It reads each vendor's official public job board API (the same feeds that power the companies' own career pages), so there is no browser, no login and no CAPTCHA.

What data you get

One dataset row per open job.

FieldWhat it isExample
ats, company, companyNameATS vendor, board slug, company name when the ATS provides itashby, ashby
jobId, titleATS job ID and job titleEngineering Manager - EU
department, teamDepartment and teamEngineering, EMEA Engineering
location, locations[], countryPrimary location, all listed locations, countryRemote - European Union
remote, workplaceTypeRemote flag and workplace typetrue, Remote
employmentTypeFull-time, part-time, contract... (where provided)FullTime
postedAt, updatedAtISO 8601 timestamps (where provided)2024-03-04T14:29:08.532Z
jobUrl, applyUrlJob page and application pagehttps://jobs.ashbyhq.com/ashby/...
salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryTextPay range where the company publishes it150000, 250000, EUR, 1 YEAR
descriptionText, descriptionHtmlFull description as text (default) and optional HTMLHi, I'm Colin...
sourceUrl, scrapedAtAPI endpoint used and scrape timehttps://api.ashbyhq.com/posting-api/...

Fields an ATS does not publish are null (for example, Greenhouse's public API has no structured salary or employment type). A per-company summary (jobs on board, jobs saved, boards not found) is saved in the key-value store record RUN_SUMMARY.

ATSBoard URL patternNotes
Greenhouseboards.greenhouse.io/<slug>Remote detected from the location text
Leverjobs.lever.co/<slug> (EU: lever-eu:<slug>)Remote detected from the location text
Ashbyjobs.ashbyhq.com/<slug>Includes published compensation
Workableapply.workable.com/<slug>

Use cases

  • Hiring signals for sales and investors: see which companies are hiring for which teams and where, and track changes over time.
  • Job boards and aggregators: feed niche job boards with fresh, structured postings straight from the source ATS.
  • Recruiting and talent intelligence: monitor open roles, locations, remote policies and published salary ranges.
  • Labor market research: build datasets of roles, departments and compensation across hundreds of companies.

How to scrape Greenhouse, Lever, Ashby and Workable jobs

  1. Add companies to Companies / job board URLs, one per line:
    • Board URLs: https://boards.greenhouse.io/gitlab, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/ashby, https://apply.workable.com/huggingface
    • ats:slug pairs: greenhouse:gitlab, lever:spotify, lever-eu:acme, ashby:ashby, workable:huggingface
    • Bare slugs: gitlab - the scraper checks all four ATSs and uses the board with the most jobs.
  2. Optional filters: Job title contains, Exclude title keyword, Keyword scope (title only by default, or title + description), Location contains, Department or team contains, Remote jobs only, Posted within last N days.
  3. Click Start and download the jobs as JSON, CSV, Excel or HTML.

Tip: explicit board URLs are the most accurate, because some slugs also exist as abandoned boards on another ATS.

Input example

{
"companies": ["https://boards.greenhouse.io/gitlab", "lever:spotify", "https://jobs.ashbyhq.com/ashby", "workable:huggingface"],
"keyword": "engineer",
"remoteOnly": false,
"postedWithinDays": 30,
"maxJobsPerCompany": 0,
"includeDescription": true
}

Output example

{
"ats": "ashby",
"company": "ashby",
"companyName": null,
"jobId": "7458d4e9-da2e-47bd-98cb-adfda43d42b2",
"title": "Engineering Manager - EU",
"department": "Engineering",
"team": "EMEA Engineering",
"location": "Remote - European Union",
"locations": ["Remote - European Union", "Spain", "Italy"],
"country": "European Union",
"remote": true,
"workplaceType": "Remote",
"employmentType": "FullTime",
"postedAt": "2024-03-04T14:29:08.532Z",
"updatedAt": null,
"jobUrl": "https://jobs.ashbyhq.com/ashby/7458d4e9-da2e-47bd-98cb-adfda43d42b2",
"applyUrl": "https://jobs.ashbyhq.com/ashby/7458d4e9-da2e-47bd-98cb-adfda43d42b2/application",
"salaryMin": 150000,
"salaryMax": 250000,
"salaryCurrency": "EUR",
"salaryInterval": "1 YEAR",
"salaryText": "€150K – €250K • Offers Equity • Offers Bonus",
"descriptionText": "Hi, I'm Colin, Director of Engineering, Europe. ...",
"descriptionHtml": null,
"sourceUrl": "https://api.ashbyhq.com/posting-api/job-board/ashby?includeCompensation=true",
"scrapedAt": "2026-11-03T00:55:20.365Z"
}

The dataset has two views: Overview - one row per job and All fields - jobs with descriptions.

How much does it cost to scrape ATS job boards?

Pay per event: you pay only for jobs saved after your filters. Compute and proxy costs are included. The price is the same on every Apify plan.

EventCharged whenPrice
resultOne job saved$1.50 per 1,000 ($0.0015 each)
apify-actor-startOnce per run (Apify's standard start fee)$0.00005

Worked examples

  • 1,000 jobs = 1,000 × $0.0015 = $1.50 (+ $0.00005 start fee).
  • 50 companies × 40 matching jobs = 2,000 jobs = $3.00.
  • Weekly refresh of the same 2,000 jobs for a month (4 runs) = $12.00; use Posted within last N days = 7 to pay only for new postings.
  • Companies whose board is not found and jobs removed by filters are not charged.

Set Maximum cost per run in the run options; the scraper stops cleanly at the limit.

How it compares

This actorCalling each ATS API yourselfScraping career pages with a browser
ATS coverageGreenhouse, Lever (US + EU), Ashby, WorkableOne integration per vendorPer-site selectors
SchemaOne unified schema, null where a field doesn't exist4 different formats to mapWhatever the page shows
Salary, remote, posted dateNormalized fields where publishedYou parse each formatOften missing
ATS auto-detection from a slugYesNoNo
Cost$1.50 per 1,000 jobs, no compute billYour time + hostingBrowser compute per page

FAQ

Which ATS platforms are supported?

Greenhouse, Lever (US and EU instances), Ashby and Workable public job boards. Workday and SmartRecruiters are not supported yet.

How do I find a company's Greenhouse, Lever, Ashby or Workable slug?

Open its careers page and look at the job links: boards.greenhouse.io/<slug>, jobs.lever.co/<slug>, jobs.ashbyhq.com/<slug> or apply.workable.com/<slug>. Or paste that URL directly.

Can I get salary ranges from job postings?

Yes, where the company publishes them through the ATS: Ashby, Lever and Workable expose structured pay ranges for many postings (salaryMin, salaryMax, salaryCurrency, salaryInterval). Greenhouse's public API has no structured salary field.

How do I get only new jobs?

Set Posted within last N days (for example 7 for a weekly schedule). Jobs without a posted date are excluded when this filter is set.

How do I get only remote jobs?

Turn on Remote jobs only. Ashby and Workable mark remote jobs explicitly; for Greenhouse and Lever the scraper uses "remote" in the location text.

The scraper uses the job board APIs that these ATS vendors publish for displaying public job listings, and only reads publicly posted jobs. Job descriptions can mention recruiters or hiring managers by name; if you store or process that, you are the data controller and must follow applicable privacy law (for example GDPR).

Why are some jobs missing a posted date?

Not every ATS exposes it for every posting. Such jobs are excluded only when you use Posted within last N days.

Can an AI agent use this jobs API?

Yes. Through the Apify MCP server an agent can find it with search-actors, read the input schema and run it, for example "list remote engineering jobs at these 20 companies". See Integrations.

Something wrong?

Open an issue on the Issues tab; we aim to respond within 24 hours.

Integrations

  • API: POST https://api.apify.com/v2/acts/offgrid-labs~ats-jobs-feed/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN> with the input JSON as the body returns the jobs directly (runs under 5 minutes; otherwise start a run and read its dataset).
  • Python / JavaScript: pip install apify-client / npm install apify-client, then client.actor("offgrid-labs/ats-jobs-feed").call(run_input={...}).
  • No-code: Apify's integrations for Make, Zapier and n8n, plus Google Sheets, Slack, webhooks and Schedules (for example a weekly job feed into a sheet).
  • MCP / AI agents: add https://mcp.apify.com?tools=offgrid-labs/ats-jobs-feed to your MCP client to expose this actor as a tool.

Changelog

  • 2026-11-06 · keywordScope input: keyword and exclude-keyword filters can now match the full description text too (title+description); the default title scope keeps previous results byte-identical. Jobs filtered out are never saved or charged.
  • 2026-11-06 · excludeKeyword input: drop jobs whose title contains a keyword (for example senior); excluded jobs are not charged.
  • 2026-11-03 · Default memory raised from 256 MB to 512 MB after an out-of-memory failure on a scheduled run with large boards.
  • 2026-11-03 · Output schema with Overview and All fields views; Store title aligned with search intent.
  • 2026-11-03 · First release: Greenhouse, Lever (US/EU), Ashby and Workable public board APIs, ATS auto-detection, title/location/department/remote/date filters, RUN_SUMMARY.
ActorWhat it does
Tech Stack DetectorDetect the CMS, e-commerce platform, analytics and CDN of the companies you track
Company Registry Lookup (KYB)Official company records (UK, France, Norway, Finland) for the employers you track
Shopify ScraperProducts, variants and prices from any Shopify store

// OFFGRID LABS ─────────────────────────────────────────────
// status: monitored 24/7 by a self-hosted agent swarm
// health checks: every 6h · auto-repair + rollback on failure
// sources: official public APIs and open data only
// support: open an issue — human-reviewed response within 24h
// ───────────────────────────────────────────────────────────