Greenhouse, Lever & Ashby Jobs Scraper (ATS Jobs API) avatar

Greenhouse, Lever & Ashby Jobs Scraper (ATS Jobs API)

Pricing

from $0.80 / 1,000 job listings

Go to Apify Store
Greenhouse, Lever & Ashby Jobs Scraper (ATS Jobs API)

Greenhouse, Lever & Ashby Jobs Scraper (ATS Jobs API)

Get every open job from company career boards on Greenhouse, Lever, Ashby, Workable and SmartRecruiters in one normalized feed: title, location, remote flag, department, employment type, dates, apply URL and optional description. Detects new and closed jobs.

Pricing

from $0.80 / 1,000 job listings

Rating

0.0

(0)

Developer

Datawright Labs

Datawright Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Get every open job from any list of companies that hire through Greenhouse, Lever, Ashby, Workable or SmartRecruiters in one normalized dataset: title, department, location, remote flag, workplace type, employment type, posted/updated dates, job URL, apply URL, salary range where published, and optionally the full job description. Paste career page URLs, get a clean job feed.

It reads each company's official public job board API (the same feed that powers the company's own careers page), so it is fast, cheap and stable. No browser, no login, no proxies.

What can this job board scraper do?

  • 5 ATS platforms in one Actor: Greenhouse, Lever (US and EU), Ashby, Workable and SmartRecruiters.
  • One schema for all platforms. Every job has the same fields whatever ATS the company uses.
  • Paste any board URL (https://boards.greenhouse.io/figma, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/ramp, https://apply.workable.com/huggingface, https://careers.smartrecruiters.com/Ubisoft2), use platform:slug (greenhouse:figma), or just a bare slug (notion), which is tried on every platform.
  • Filters: title keywords (include/exclude), location keywords, remote only, posted within N days, max jobs per company.
  • New / closed job detection (monitor mode): give your watch-list a name and schedule the Actor. Each job is labelled new or existing, and jobs that disappeared since the last run are output as closed.
  • Per-company error report: a bad slug doesn't fail the run; see the COMPANIES record in the key-value store.
  • Job postings only. No personal data (no recruiter names or emails) is collected.

Use cases

  • Job seekers & job boards: aggregate openings from hundreds of target companies into one feed.
  • Recruiting & talent intelligence: track which teams competitors are hiring for and where.
  • Sales signals: a company suddenly hiring 10 data engineers is a buying signal; push new jobs to your CRM or Slack.
  • Market research: measure hiring trends by department, location or remote share.
  • Niche job sites: power a remote-only, AI-only or region-specific job board.

Input

FieldDescriptionDefault
companiesBoard URLs, platform:slug or slugs2 sample boards
includeDescriptionAdd plain-text job descriptionsfalse
titleKeywords / excludeTitleKeywordsTitle include / exclude words–
locationKeywordsLocation must contain one of these–
remoteOnlyOnly remote jobsfalse
postedWithinDaysOnly recently posted jobs (0 = all)0
maxJobsPerCompanyCap per company (0 = all)0
monitorStateKeyName of your watch-list for new/closed detection–
onlyNewJobsOutput only new (and closed) jobsfalse

Example input:

{
"companies": [
"https://boards.greenhouse.io/figma",
"https://jobs.lever.co/spotify",
"https://jobs.ashbyhq.com/ramp",
"workable:huggingface",
"smartrecruiters:Ubisoft2"
],
"titleKeywords": ["engineer", "data"],
"remoteOnly": false,
"monitorStateKey": "my-target-companies"
}

Output

One row per job. Export as JSON, CSV, Excel, HTML or via the API.

{
"platform": "ashby",
"companySlug": "ramp",
"company": "Ramp",
"jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"title": "Security Engineer, Cloud",
"department": "Engineering",
"team": "Backend",
"location": "New York, NY (HQ) / Remote (Canada) / Remote (US) / Miami, FL",
"country": "USA",
"workplaceType": "hybrid",
"isRemote": true,
"employmentType": "full-time",
"postedAt": "2026-04-07T17:12:35.753Z",
"updatedAt": null,
"jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",
"compensation": "$211.4K – $290.6K β€’ Offers Equity",
"changeType": "new",
"firstSeenAt": "2026-10-19T03:49:39.016Z",
"scrapedAt": "2026-10-19T03:49:39.016Z"
}

Field availability by platform

Not every ATS publishes every field. Missing values are null.

FieldGreenhouseLeverAshbyWorkableSmartRecruiters
departmentβœ…βœ…βœ…βœ…βœ… (when set)
workplaceTypefrom location textβœ…βœ…remote onlyremote / hybrid
employmentTypeβŒβœ…βœ…βœ…βœ…
postedAtβœ…βœ…βœ…βœ… (date)βœ…
updatedAtβœ…βŒβŒβŒβŒ
compensation❌when publishedwhen published❌❌
descriptionTextβœ…βœ…βœ…βœ…βœ… (1 extra request per job)

isRemote is true when the ATS marks the job remote or remote-eligible (e.g. Ashby's remote flag, Workable's telecommuting) or the location says "Remote".

Example tasks

Copy one of these into the JSON tab of the input (or save it as a Task) to get started quickly.

Remote engineering jobs at a list of startups

{
"companies": [
"https://jobs.ashbyhq.com/ramp",
"greenhouse:figma",
"lever:spotify"
],
"titleKeywords": [
"engineer",
"developer"
],
"remoteOnly": true
}

Daily new-job alerts (schedule this daily and connect Slack/email)

{
"companies": [
"greenhouse:figma",
"https://jobs.ashbyhq.com/ramp",
"https://apply.workable.com/huggingface"
],
"monitorStateKey": "my-target-companies",
"onlyNewJobs": true
}

Jobs posted in the last 7 days in Canada, with descriptions

{
"companies": [
"https://jobs.ashbyhq.com/ramp",
"greenhouse:figma"
],
"locationKeywords": [
"Canada",
"Toronto",
"Vancouver"
],
"postedWithinDays": 7,
"includeDescription": true
}

How much does it cost to scrape Greenhouse, Lever and Ashby jobs?

You pay $0.001 per job saved ($1 per 1,000 jobs). Jobs removed by your filters, closed-job markers and failed boards are free, and there is no start fee.

JobJobs returnedCost
1 company board (~100 open jobs)100$0.10
1,000 jobs1,000$1
200 target companies, ~50 jobs each10,000$10
Daily monitor of 200 companies in "only new jobs" mode (~150 new jobs/day)~4,500/month~$4.50/month
  • Apify's free plan includes $5 of monthly credit, i.e. about 5,000 jobs a month for free.
  • Paid Apify plans get automatic discounts: Silver -10%, Gold and above -20%.
  • Set Maximum cost per run to hard-cap spend.

Greenhouse / Lever jobs scraper vs. the alternatives

This ActorCalling each ATS API yourselfSingle-platform scrapersJob data vendors
Greenhouse, Lever (US + EU), Ashby, Workable, SmartRecruitersβœ… all 5βœ… 5 different APIs to learn❌ one eachβœ…
One normalized schema (remote flag, workplace type, salary)βœ…DIY mappingβŒβœ…
Auto-detects the platform from a careers URL or slugβœ…βŒβŒβ€“
New / closed job detection between runsβœ… built inDIY staterarelyβœ…
No personal data (no recruiter names/emails)βœ…βœ…variesvaries
Cost model$1 per 1,000 jobsfree + your timeper resultannual contract

Use it as an API (Python, JavaScript, cURL, MCP)

Every Apify Actor is also a REST API, so you can call this Greenhouse / Lever / Ashby jobs API from your own code, a no-code tool or an AI agent.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("datawright-labs/ats-jobs-scraper").call(run_input={"companies": ["https://boards.greenhouse.io/figma", "https://jobs.lever.co/spotify"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('datawright-labs/ats-jobs-scraper').call({"companies": ["https://boards.greenhouse.io/figma", "https://jobs.lever.co/spotify"]});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL (run and get results in one request)

curl -X POST "https://api.apify.com/v2/acts/datawright-labs~ats-jobs-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"companies": ["https://boards.greenhouse.io/figma", "https://jobs.lever.co/spotify"]}'

AI agents (MCP)

Add https://mcp.apify.com/?tools=datawright-labs/ats-jobs-scraper to Claude, Cursor or any MCP client and the agent can run it as a tool.

Results can also go straight to Google Sheets, Slack, Make, Zapier, n8n, Airbyte or a webhook via Apify integrations, and you can run it on a Schedule.

FAQ

How do I find a company's board slug?

Open the company's careers page and click a job. The URL shows the ATS and slug, e.g. jobs.lever.co/<slug>/... or boards.greenhouse.io/<slug>/jobs/.... Some companies host Greenhouse on their own domain; look for gh_jid= in links, or try the bare company name as a slug.

Is scraping these job boards allowed?

The Actor only reads the public job board endpoints that Greenhouse, Lever, Ashby, Workable and SmartRecruiters provide for publishing job listings, and it collects no personal data. You are responsible for how you use the data; respect each company's terms if you republish listings.

Does it support Workday, iCIMS or Taleo?

Not yet. These don't offer a comparable public JSON job board API. Request them on the Issues tab.

How does new/closed detection work?

With monitorStateKey set, the Actor saves the job IDs it saw for each board in a named key-value store (ats-job-feed-monitor). On the next run with the same key it compares. Closed-job detection is skipped for boards when maxJobsPerCompany is set, because the Actor then doesn't see the full board.

Can I run it on a schedule and get alerts?

Yes. Create a Schedule, turn on onlyNewJobs, and connect Slack, email, Google Sheets, Zapier, Make or a webhook integration.

Is there a Greenhouse jobs API?

Yes: Greenhouse publishes a public Job Board API (boards-api.greenhouse.io/v1/boards/<slug>/jobs) for every company board. This Actor calls it for you, adds pagination, normalization and new-job detection, and merges it with Lever, Ashby, Workable and SmartRecruiters.

How do I get all jobs from Lever (jobs.lever.co)?

Paste https://jobs.lever.co/<company> (or lever:<company>) into companies. Both the US (api.lever.co) and EU (api.eu.lever.co) Lever postings APIs are supported.

Can I scrape Ashby job boards?

Yes. Paste https://jobs.ashbyhq.com/<company>; the Actor uses Ashby's public posting API and returns compensation when the company publishes it.

Can I build a niche job board or job alert with this?

Yes. Keep a list of target companies, set monitorStateKey + onlyNewJobs, schedule it daily and send new jobs to Slack, Google Sheets, Airtable or your site via webhook.

More tools from Datawright Labs

Made by Datawright Labs: reliable, fairly priced web data tools. Questions or a missing feature? Open an issue on the Issues tab; we usually reply within a day.