ATS Job Scraper API - Greenhouse, Lever, Ashby, SmartRecruiters avatar

ATS Job Scraper API - Greenhouse, Lever, Ashby, SmartRecruiters

Pricing

$5.00 / 1,000 job scrapeds

Go to Apify Store
ATS Job Scraper API - Greenhouse, Lever, Ashby, SmartRecruiters

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

AutomateLab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

31 minutes ago

Last modified

Categories

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

  1. Add the actor to your Apify account and open the Input tab.
  2. Pick the ATS board the company runs on (greenhouse, lever, ashby, or smartrecruiters).
  3. Enter the org: the board slug (e.g. stripe) or the full career URL.
  4. Set max_jobs (default 50; 0 = all) and keep include_description on for full descriptions.
  5. 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

FieldTypeDefaultDescription
boardselectgreenhouseWhich ATS hosts the board: greenhouse, lever, ashby, smartrecruiters.
orgstringstripeJob-board slug (stripe) or career URL (https://job-boards.greenhouse.io/stripe).
max_jobsinteger50Maximum postings to return; 0 = no limit.
include_descriptionbooleantrueInclude 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"
}
FieldMeaning
titleJob title as posted on the ATS board.
locationPrimary location (secondary locations appended when the board provides them).
department / teamBoard-provided org structure; null when the ATS does not expose it.
remoteRemote-work flag; native boolean where available, location-based heuristic on boards without one.
urlCanonical public job posting page.
apply_urlDirect application link when the board exposes one.
posted_atPosting date as ISO-8601.
descriptionFull job description as cleaned plain text (HTML stripped).
board / orgSource ATS and org slug for multi-company merges.
raw_refKey-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: 5 first (≈ $0.025) to confirm the org slug and board before large pulls.
  • Merge multiple companies: keep board and org in the output so combined pulls stay attributable.
  • Skip detail lookups on SmartRecruiters with include_description: false when 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.

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.