ATS Job Scraper API - Greenhouse, Lever, Ashby, SmartRecruiters
Pricing
$5.00 / 1,000 job scrapeds
ATS Job Scraper API - Greenhouse, Lever, Ashby, SmartRecruiters
Scrape job postings from Greenhouse, Lever, Ashby and SmartRecruiters into one unified dataset: title, location, remote flag, department, apply URL, posted date and full plain-text description. Model-ready JSON/JSONL export. $0.005 per job, no start fee, nothing charged for failed requests.
Pricing
$5.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
AutomateLab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
31 minutes ago
Last modified
Share
ATS Job Scraper API scrapes job postings from the four biggest applicant tracking systems — Greenhouse, Lever, Ashby, and SmartRecruiters — into one unified, model-ready dataset: title, location, department, team, remote flag, apply URL, posted date, and the full job description as cleaned plain text (HTML stripped). Success-only billing: you pay $0.005 per successfully delivered job, with no actor-start fee and nothing charged for failed requests or empty boards.
What does ATS Job Scraper do?
ATS Job Scraper fetches public job postings straight from a company's applicant tracking system and returns them as clean JSON records with stable field names. One run covers one company's board on one ATS — e.g. Stripe's Greenhouse board, a startup's Lever board, or an Equinox SmartRecruiters careers page. Point it at the board slug or paste the career-site URL; you get back job records with descriptions ready to drop into a pipeline, an API, or an LLM workflow.
Results are delivered to the run dataset and downloadable as JSON, JSONL, CSV, Excel, or HTML — or fetched via the Apify dataset API for automation. Runs finish in seconds, need no proxy, and work from the Apify Console, the API, schedules, or webhooks.
- Input:
{ "board": "greenhouse" | "lever" | "ashby" | "smartrecruiters", "org": "<slug or career URL>", "max_jobs": 50, "include_description": true } - Output: one unified record per job (see Output) plus a raw-payload reference in the key-value store.
Why use ATS Job Scraper?
- One actor, four ATS boards. Incumbent scrapers cover a single platform or add a flat actor-start fee that makes tiny runs cost $0.0135+ (agentx/all-jobs-scraper advertises a $0.01 minimum start event). This actor has no start fee — a 1-job run costs $0.005.
- Full plain-text job descriptions by default. Most job scrapers return titles and links only; here every delivered job carries its complete description as cleaned plain text — no HTML cleanup on your side.
- Unified schema across boards. Greenhouse, Lever, Ashby, and SmartRecruiters all normalize to the same record shape, so you can merge hiring data across companies and platforms without field mapping.
- Feed LLM and RAG pipelines — semantic search over postings, job-matching agents, fine-tuning data for recruiting models (see Model-ready job descriptions).
- Cheap talent-market monitoring. Schedule runs per company to track new postings, remote-friendly roles, or department growth over time.
How to scrape jobs from Greenhouse, Lever, Ashby, and SmartRecruiters
- Add the actor to your Apify account and open the Input tab.
- Pick the ATS board the company runs on (
greenhouse,lever,ashby, orsmartrecruiters). - Enter the org: the board slug (e.g.
stripe) or the full career URL. - Set
max_jobs(default 50;0= all) and keepinclude_descriptionon for full descriptions. - Run. Download the dataset as JSON, JSONL, CSV, Excel, or HTML — or fetch it via the dataset API.
Scrape Greenhouse job postings
Find a company on Greenhouse at boards.greenhouse.io/<org> (e.g. boards.greenhouse.io/stripe). Pass either the org slug (stripe) or the full URL — both work. Remote roles are detected from the posting's location and office data.
Scrape Lever job postings
Lever boards live at jobs.lever.co/<org> (e.g. jobs.lever.co/ridezum). Pass the slug or URL. Commitment, department, team, and workplace type come straight from the posting.
Scrape Ashby job postings
Ashby boards live at jobs.ashbyhq.com/<org>. Ashby is the richest of the four: every record ships with the remote flag, workplace type, secondary locations, and apply URL you need to route candidates without extra calls.
Scrape SmartRecruiters job postings
SmartRecruiters careers pages live at careers.smartrecruiters.com/<company>. Descriptions are fetched per posting (one lightweight request per job, verified unthrottled); jobs still deliver even if a single detail lookup fails.
Model-ready job descriptions
Every job description ships as cleaned plain text — HTML stripped, entities decoded, whitespace collapsed — one record per job with stable field names. That means job-corpus builders get records that drop straight into LLM pipelines, semantic search, job-matching models, and RAG indexes without scraping or HTML cleanup on your side. Turn descriptions off with include_description: false when you only need the metadata layer.
LLM-ready output and JSONL export
The unified schema is stable across all four boards: title, location, department, team, remote, url, apply_url, posted_at, description, board, org, raw_ref. Download results as JSON, CSV, Excel, or HTML, or fetch JSONL for training/eval pipelines directly from the dataset API:
https://api.apify.com/v2/datasets/<datasetId>/items?format=jsonl
That makes the output a natural fit for RAG pipelines, fine-tuning data, and LLM agents that read job postings mid-task (job-matching, salary research, hiring-market digests).
How much does it cost to scrape job postings?
Pay-per-event: $0.005 per successfully delivered job posting. No actor-start fee, and no minimum spend per run.
- Charged: each job record successfully fetched from the ATS board and delivered to the dataset.
- Not charged: invalid or unknown orgs (free error record), unreachable boards (free error record), and empty boards — an org with zero postings delivers a free summary record and charges $0.
Example math: 50 jobs ≈ $0.25 per run; 1,000 jobs/mo ≈ $5.00/mo. Apify free-tier credits apply as usual.
Input
| Field | Type | Default | Description |
|---|---|---|---|
board | select | greenhouse | Which ATS hosts the board: greenhouse, lever, ashby, smartrecruiters. |
org | string | stripe | Job-board slug (stripe) or career URL (https://job-boards.greenhouse.io/stripe). |
max_jobs | integer | 50 | Maximum postings to return; 0 = no limit. |
include_description | boolean | true | Include the full plain-text description (HTML stripped). |
{"board": "smartrecruiters","org": "https://careers.smartrecruiters.com/equinox","max_jobs": 100,"include_description": true}
Output
One dataset record per delivered job:
{"title": "Engineering Manager - EU","location": "Remote - European Union","department": "Engineering","team": "EMEA Engineering","remote": true,"url": "https://jobs.ashbyhq.com/ashby/7458d4e9-da2e-47bd-98cb-adfda43d42b2","apply_url": "https://jobs.ashbyhq.com/ashby/7458d4e9-da2e-47bd-98cb-adfda43d42b2/application","posted_at": "2024-03-04T14:29:08.532+00:00","description": "Hi — we're hiring an Engineering Manager for Europe...","board": "ashby","org": "ashby","raw_ref": "raw-ashby-ashby.json"}
| Field | Meaning |
|---|---|
title | Job title as posted on the ATS board. |
location | Primary location (secondary locations appended when the board provides them). |
department / team | Board-provided org structure; null when the ATS does not expose it. |
remote | Remote-work flag; native boolean where available, location-based heuristic on boards without one. |
url | Canonical public job posting page. |
apply_url | Direct application link when the board exposes one. |
posted_at | Posting date as ISO-8601. |
description | Full job description as cleaned plain text (HTML stripped). |
board / org | Source ATS and org slug for multi-company merges. |
raw_ref | Key-value store key holding the raw upstream payload for the run. |
Failed lookups and empty boards deliver free error/summary records instead of jobs — you can download the dataset in various formats such as JSON, JSONL, HTML, CSV, or Excel.
Tips
- Test cheaply: run with
max_jobs: 5first (≈ $0.025) to confirm the org slug and board before large pulls. - Merge multiple companies: keep
boardandorgin the output so combined pulls stay attributable. - Skip detail lookups on SmartRecruiters with
include_description: falsewhen you only need postings metadata — other boards include descriptions in the same request either way. - Automate: schedule the actor (e.g. daily per company) and consume the dataset via API, webhooks, or integrations — no browser automation involved, runs are compute-cheap and fast.
FAQ, disclaimers, and support
Which companies can I scrape?
Any organization that publishes its jobs on a public Greenhouse, Lever, Ashby, or SmartRecruiters board. If an org slug is wrong or the board is empty, you get a free zero-charge record.
Are failed requests charged?
No. You pay only for successfully delivered job postings ($0.005 per job). Invalid orgs, unknown boards, and network failures deliver free error records, and an empty org delivers a zero-charge summary — $0.
Can I use scraped job postings for AI training and RAG?
Yes — job postings are public, descriptions arrive as plain text, and JSONL export feeds training/evaluation pipelines directly. Always validate your specific use against the ATS terms and applicable GDPR rules; postings reflect what companies publish publicly.
Is scraping job postings legal?
The actor reads public job-board data through each ATS's public jobs feed. Validate your use case against the source site's terms and your jurisdiction; do not use the data for prohibited purposes.
Something is missing or broken?
Open an issue on the actor's Issues tab — feedback and board-org requests are welcome, and custom scraping solutions are available.
Also from the same team on Apify Store: Email Validation & Fraud Risk Scoring API and Content Moderation API — Perspective API Alternative.