Greenhouse, Lever & Ashby Job Scraper API avatar

Greenhouse, Lever & Ashby Job Scraper API

Pricing

from $1.50 / 1,000 job results

Go to Apify Store
Greenhouse, Lever & Ashby Job Scraper API

Greenhouse, Lever & Ashby Job Scraper API

Scrape job postings across 6 ATS — Greenhouse, Lever, Ashby, Recruitee, SmartRecruiters & Personio — into one unified schema. Descriptions, salary, seniority and remote-type included. Change-detection between runs, ATS auto-detect, curated company presets. No login, no browser, pure API.

Pricing

from $1.50 / 1,000 job results

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

2 days ago

Last modified

Share

Job Scraper — Greenhouse, Lever, Ashby, Recruitee, SmartRecruiters & Personio

Scrape job postings across 6 major ATS platforms in a single run — every job comes back in one unified schema, no matter which ATS hosted it. No login, no API key, no browser: this scraper reads each ATS's public JSON/XML endpoint directly, so it's fast, cheap and stable.

Give it a list of company slugs — or skip the research and use a preset list, or let it auto-detect the ATS for you. Get clean, enriched rows with descriptions, salary, seniority and remote-type built in. Try it free — Apify's $5/month free tier covers thousands of jobs.

What this job scraper does

  • Pulls every open posting from Greenhouse, Lever, Ashby, Recruitee, SmartRecruiters and Personio boards.
  • Normalizes six wildly different ATS formats into one flat schema.
  • Auto-detects the ATS when you only have a company name.
  • Enriches every job with seniority (intern → executive) and remote-type (remote / hybrid / onsite).
  • Returns full job descriptions (plain text + HTML), salary where the ATS exposes it, department, team, employment type, apply URL and posted date.
  • Change-detection between runs — get only new and newly-closed jobs.
  • Curated company presets so you can start without researching slugs.
  • Filters by title keyword, location, or remote-only; output profiles to keep payloads lean.

Supported ATS platforms

ATSBoard URLExample slug
Greenhouseboards.greenhouse.io/{slug}stripe
Leverjobs.lever.co/{slug}spotify
Ashbyjobs.ashbyhq.com/{slug}ramp
Recruitee{slug}.recruitee.combunq
SmartRecruitersjobs.smartrecruiters.com/{slug}Visa
Personio{slug}.jobs.personio.depersonio

Most multi-ATS scrapers stop at the big three. This one covers six.

What data you get

One rectangular row per job — identical keys across every ATS:

{
"ats": "ashby",
"company": "ramp",
"title": "Senior Security Engineer, Cloud",
"location": "New York, NY (HQ)",
"remote": true,
"remote_type": "remote",
"department": "Engineering",
"team": "Backend",
"employment_type": "FullTime",
"seniority": "senior",
"salary": "$211.4K - $290.6K",
"url": "https://jobs.ashbyhq.com/ramp/34413f8d-...",
"apply_url": "https://jobs.ashbyhq.com/ramp/34413f8d-...",
"posted_at": "2026-04-07T17:12:35.753+00:00",
"job_id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"global_id": "ashby:ramp:34413f8d-...",
"description_text": "About Ramp\n\nRamp is building...",
"description_html": "<p>About Ramp...</p>"
}
  • global_id ({ats}:{company}:{job_id}) is a stable key for joining, diffing and de-duplicating across runs.
  • seniority and remote_type use the ATS's native fields where present and fall back to title/location inference.
  • salary is filled where the ATS publishes it (Ashby has the cleanest comp data; most boards don't expose salary).

Who uses this scraper

  • Job boards & aggregators — power a niche board from a curated company list; one ETL, six ATS covered.
  • Sales & B2B prospecting — "company X just opened 5 engineering roles" is a hiring signal. Track accounts and route to your CRM.
  • Recruiters & sourcers — pull every open role at target companies, refresh nightly with change-detection.
  • Market & wage researchers — build salary and hiring datasets on a stable, enriched schema.

How to use

  1. Click Try for free.
  2. In the Input tab, either:
    • add companies, e.g. { "ats": "greenhouse", "company": "stripe" } (omit ats to auto-detect), or
    • pick a preset list: top-tech, ai-ml, devtools, fintech.
  3. Optionally set titleKeyword, locationKeyword, remoteOnly, includeDescriptions, outputProfile, or maxJobsPerCompany.
  4. Click Start, then download the dataset as JSON, CSV, or Excel — or pull it via the Apify API.

Daily "new jobs only" feed

Turn on onlyNewSinceLastRun and schedule the actor (hourly/daily). The first run snapshots the jobs; every run after that emits only new jobs (is_new: true) and closed jobs (is_closed: true). Wire it to a webhook, Slack, Zapier or Make for real-time hiring alerts.

How to find a company's slug

The slug is the path segment in the company's careers URL:

  • boards.greenhouse.io/stripestripe
  • jobs.lever.co/spotifyspotify
  • jobs.ashbyhq.com/rampramp
  • bunq.recruitee.combunq
  • jobs.smartrecruiters.com/VisaVisa
  • personio.jobs.personio.depersonio

Why use this scraper

  • Six ATS, one schema — no per-ATS glue code on your side.
  • Public APIs, not HTML scraping — doesn't break on careers-page redesigns, and runs in seconds without a browser.
  • Enriched out of the box — seniority, remote-type, descriptions, salary.
  • Change-detection — track hiring movement, not just snapshots.
  • Pay only for results — a run that finds nothing costs nothing.

Pricing

This actor uses Apify's pay-per-result model: you're charged per job row returned, nothing for companies that come back empty. The actor reads lightweight JSON/XML, so runs are cheap and fast. Apify's free $5/month tier covers thousands of jobs for testing. Tip: set outputProfile to compact or minimal, or use onlyNewSinceLastRun, to keep scheduled runs lean.

FAQ

Do I need a proxy or API key? No. All six ATS expose public job-board endpoints that need no authentication.

What output formats are available? JSON, JSONL, CSV, and Excel via the Apify dataset export, plus the Apify API.

Can I run it on a schedule? Yes — use Apify Scheduler, and combine it with onlyNewSinceLastRun for a new-jobs-only feed wired to a webhook.

What if I don't know which ATS a company uses? Leave out the ats field. The actor probes each platform and uses whichever responds — built-in ATS detection.

What happens if a company's slug is wrong or it switches ATS? It's reported in the run summary's failedTargets and skipped — it never breaks the run.