ATS Jobs Scraper — Greenhouse, Lever, Ashby & SmartRecruiters
Pricing
from $1.00 / 1,000 results
ATS Jobs Scraper — Greenhouse, Lever, Ashby & SmartRecruiters
Scrape job postings from Greenhouse, Lever, Ashby & SmartRecruiters into one normalized JSON feed. Auto-detects the ATS, dedupes, filters remote. No proxies.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Fabrikit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape job postings from any company that hires through Greenhouse, Lever, Ashby or SmartRecruiters and get them back as one clean, normalized dataset — the same 21 fields whether the job came from a Greenhouse board or a Lever posting. Feed it company slugs (or just company names — the Actor auto-detects the ATS), and export to JSON, CSV, Excel, Google Sheets or your database.
What you get from a single run:
- Every open job at every company you list — title, location, remote flag, department, employment type, salary range when published, direct apply URL and posting dates — deduplicated, in one schema.
- Zero setup and zero breakage risk: the Actor reads the official public job-board APIs of the four ATS vendors, not their HTML. No API key, no login, no proxies, no browser — runs finish in seconds and don't break when a careers page changes its CSS.
- A per-company summary (jobs found, which ATS was detected, any errors) in the run's key-value store, so pipelines can verify coverage automatically.
Example output item (real Ashby posting):
{"ats": "ashby","company": "ramp","sourceId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","title": "Security Engineer, Cloud","location": "New York, NY (HQ)","allLocations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],"remote": true,"workplaceType": "hybrid","department": "Engineering","team": "Backend","employmentType": "FullTime","url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application","publishedAt": "2026-04-07T17:12:35.753Z"}
How to scrape Greenhouse jobs (or Lever, Ashby, SmartRecruiters)
- Add one entry per company to companies. Two formats work:
ats:slugwhen you know the platform —greenhouse:stripe,lever:spotify,ashby:ramp,smartrecruiters:Devoteam.- A bare slug (e.g.
stripe) — the Actor probes all four platforms and picks the one that has the company's board. No need to know which ATS they use.
- Press Start. Results land in the dataset within seconds and can be downloaded as JSON, CSV or Excel, or pushed to Sheets, webhooks, Zapier, Make or the Apify API.
The slug is the identifier in the company's careers URL:
| ATS | Careers URL pattern | Example slug |
|---|---|---|
| Greenhouse | boards.greenhouse.io/<slug> or job-boards.greenhouse.io/<slug> | stripe |
| Lever | jobs.lever.co/<slug> | spotify |
| Ashby | jobs.ashbyhq.com/<slug> | ramp |
| SmartRecruiters | careers.smartrecruiters.com/<slug> | Devoteam |
Example input
{"companies": ["greenhouse:stripe","lever:spotify","ashby:ramp","smartrecruiters:Devoteam","some-company-slug"],"maxJobsPerCompany": 50,"remoteOnly": false,"includeDescription": false}
- companies (required) — list of
ats:slugor bare slugs (auto-detected). - maxJobsPerCompany — cap per company;
0= unlimited. The form prefills50so your first run stays small and cheap — set it to0for full boards. - remoteOnly — only output jobs detected as remote. Instant remote-jobs API for any company.
- includeDescription — add the full plain-text job description to each item (larger dataset; not available for SmartRecruiters, whose list API doesn't include it).
Scrape remote jobs only
{"companies": ["greenhouse:stripe", "ashby:ramp"],"remoteOnly": true,"maxJobsPerCompany": 0}
ATS job board API — output fields
Every item has the same fields, regardless of the source ATS:
| Field | Type | Description |
|---|---|---|
ats | string | Source platform: greenhouse, lever, ashby, smartrecruiters |
company | string | The company slug you passed in |
companyName | string | Company display name when the API provides it |
sourceId | string | Posting ID in the source ATS |
title | string | Job title |
location | string | null | Primary location as shown on the posting |
allLocations | string[] | All listed locations/offices |
remote | boolean | null | true if detected as remote, null if the source doesn't say |
workplaceType | string | null | remote, hybrid, onsite, or null |
department | string | null | Department |
team | string | null | Team / function, when the ATS distinguishes it |
employmentType | string | null | e.g. FullTime, Permanent, Full-time |
salaryMin | number | null | Lower bound of salary range (Lever) |
salaryMax | number | null | Upper bound of salary range (Lever) |
salaryCurrency | string | null | Salary currency (Lever) |
salaryInterval | string | null | Salary interval, or Ashby's compensation summary string |
url | string | Public posting URL |
applyUrl | string | Direct application URL |
publishedAt | string | null | ISO 8601 first-published date |
updatedAt | string | null | ISO 8601 last-updated date (Greenhouse) |
description | string | null | Plain-text description (only if includeDescription) |
scrapedAt | string | ISO 8601 timestamp of this run |
What can you build with a jobs scraper?
- Niche job boards — remote-only, one industry, one country — fed automatically on a schedule.
- Recruiting intelligence & talent mapping: who is hiring for which roles, right now, across your whole target list.
- Sales & investing signals: a competitor opening 30 engineering roles is a growth signal you can query daily.
- Lead generation for recruiters and agencies: companies actively hiring for the roles you place.
- Salary benchmarking from the postings that publish ranges (Lever ranges, Ashby compensation summaries).
- LLM pipelines: one consistent schema means one prompt — pipe the dataset into an LLM via Apify integrations or MCP.
Pricing — pay per result, nothing else
This Actor uses Apify's pay-per-event model and charges per job returned (event job-result, US$1.00 per 1,000 jobs, i.e. US$0.001 per job) on top of standard Apify platform usage. No subscription, no rental fee, no proxy costs — because the Actor talks to official public APIs, runs are fast and compute usage is minimal. A 50-company sweep returning 5,000 jobs costs about US$5 in events. You only pay for jobs actually delivered to your dataset.
FAQ
Does Greenhouse have a public API for job postings? Yes — Greenhouse, Lever, Ashby and SmartRecruiters all publish official, unauthenticated job-board APIs. This Actor reads those endpoints directly, which is why it needs no API key, no login and no proxies, and why it's far more reliable than scrapers that parse careers-page HTML.
How do I find a company's board slug?
Open the company's careers page and look at the URL: boards.greenhouse.io/stripe → slug stripe; jobs.lever.co/spotify → spotify; jobs.ashbyhq.com/ramp → ramp; careers.smartrecruiters.com/Devoteam → Devoteam. If you're unsure which ATS a company uses, just pass the bare slug and the Actor auto-detects it.
Can I export the jobs to CSV or Excel? Yes. Every Apify dataset can be downloaded as CSV, Excel, JSON, XML or HTML, or synced to Google Sheets — no code needed.
Is it legal to scrape job postings? This Actor only reads job data that the ATS vendors themselves publish through official public APIs intended for exactly this purpose (powering careers pages and job boards). It collects no personal data — only public job postings.
Does it include salary data?
When the source publishes it: Lever postings expose numeric salary ranges (salaryMin/salaryMax/salaryCurrency), Ashby exposes a compensation summary string. Greenhouse and SmartRecruiters boards rarely publish salary via their list APIs.
Can it monitor jobs on a schedule?
Yes — schedule the Actor in Apify Console (hourly, daily, weekly) and connect the dataset to Sheets, a webhook or your ATS of choice. sourceId is stable per posting, so downstream dedup across runs is trivial.
What if a company isn't on any of the four platforms?
The Actor logs a warning and records it in the run's SUMMARY (key-value store) with "error": "ATS not detected" — the run continues with the remaining companies.
More scrapers by Fabrikit
- App Reviews Scraper — App Store & Google Play — scrape reviews from both mobile stores in one run and one schema: rating, text, version, helpful votes and developer replies.
Technical details
- Data sources (all official, public, unauthenticated):
- Greenhouse:
boards-api.greenhouse.io/v1/boards/<slug>/jobs?content=true - Lever:
api.lever.co/v0/postings/<slug>?mode=json(paginated) - Ashby:
api.ashbyhq.com/posting-api/job-board/<slug>(with compensation data) - SmartRecruiters:
api.smartrecruiters.com/v1/companies/<slug>/postings(paginated)
- Greenhouse:
- Auto-detection probes all four APIs and picks the first platform where the slug has a non-empty board.
- Items are deduplicated within a run by
ats:company:sourceId. - Plain HTTP with a 30 s timeout per request; no headless browser, no proxy usage.
- A per-company run summary is stored in the key-value store under
SUMMARY.