ATS Job Scraper – Greenhouse, Lever, Workday & More avatar

ATS Job Scraper – Greenhouse, Lever, Workday & More

Pricing

from $1.70 / 1,000 job postings

Go to Apify Store
ATS Job Scraper – Greenhouse, Lever, Workday & More

ATS Job Scraper – Greenhouse, Lever, Workday & More

Scrape live job postings from company career sites across Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Recruitee, and BambooHR. Enter company names or career-page URLs, auto-detect the ATS, and get clean structured job data.

Pricing

from $1.70 / 1,000 job postings

Rating

0.0

(0)

Developer

Saulius Saulenas

Saulius Saulenas

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

ATS Job Scraper — Greenhouse, Lever, Ashby, Workday, Workable & more

Get live job postings straight from company career sites — not from a stale database, not from LinkedIn. Give this Actor a list of company names (or career-page URLs) and it automatically finds each company's job board across 8 ATS platforms and returns every open position as clean, structured data:

PlatformDetectionDescriptionsTypical users
Greenhouse✅ automatic✅ includedStripe, Duolingo, Figma…
Lever✅ automatic✅ includedSpotify, Palantir…
Ashby✅ automatic✅ included (+ salary ranges)OpenAI, Linear, Ramp…
Workday✅ auto for many tenants (URL always works)✅ includedNVIDIA and much of the Fortune 500
Workable✅ automatic✅ includedThousands of SMBs
SmartRecruiters✅ automatic✅ includedBosch, Visa, IKEA…
Recruitee✅ automatic✅ includedEuropean scale-ups
BambooHR✅ automatic✅ includedUS SMBs

Workday and Workable coverage is what sets this Actor apart — most cheap ATS scrapers skip the platform where most enterprise jobs actually live.

Why teams use it

  • Recruiting & talent intelligence — monitor competitors' hiring by team, seniority, location.
  • Job boards & aggregators — fill your board with fresh, deduplicated postings straight from the source.
  • Sales & lead generation — a company hiring "Head of RevOps" or "Kubernetes Engineer" is a buying signal. Track your target-account list daily and route new postings to your CRM.
  • Market research — salary transparency (Ashby publishes ranges), remote-work trends, hiring velocity.

What makes it different

  1. Company names in, jobs out. No slugs, no URLs, no homework. "Stripe" is enough — the Actor probes all 8 platforms and finds the board. (URLs work too, in any format, including plain careers pages which get sniffed for embedded boards.)
  2. Monitoring mode (onlyNewJobs): schedule the Actor daily and receive each job exactly once, ever — only postings it hasn't returned before. You pay per new job, so a daily run over a 500-company watchlist costs cents on a quiet day.
  3. Honest data. Fields the source platform doesn't expose (e.g. true posting dates on SmartRecruiters) come back as null with the raw value preserved — never guessed.
  4. No proxies, no per-seat SaaS fee, no rate-limit drama. These are the same public APIs that power the companies' own career pages.

Input

{
"companies": ["Stripe", "Duolingo", "OpenAI", "Bosch Group"],
"careerPageUrls": ["https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],
"titleKeywords": ["engineer", "developer"],
"locationKeywords": ["Remote", "London"],
"postedAfter": "7d",
"onlyNewJobs": false,
"includeDescriptions": true,
"maxJobsPerCompany": 500,
"maxTotalJobs": 5000
}

Everything except companies/careerPageUrls is optional. Filters: titleKeywords, titleExcludeKeywords, locationKeywords, remoteOnly, postedAfter (YYYY-MM-DD or 7d/24h/2w).

Output

One record per job posting:

{
"id": "ashby:openai:8f2a…",
"platform": "ashby",
"companyName": "OpenAI",
"title": "Software Engineer, Applied AI",
"url": "https://jobs.ashbyhq.com/openai/8f2a…",
"applyUrl": "https://jobs.ashbyhq.com/openai/8f2a…/application",
"location": "San Francisco",
"locations": ["San Francisco", "Remote"],
"remote": true,
"workplaceType": "remote",
"department": "Engineering",
"team": "Applied AI",
"employmentType": "FullTime",
"salaryMin": 257000,
"salaryMax": 335000,
"salaryCurrency": "USD",
"salaryInterval": "year",
"salaryRaw": "$257K – $335K",
"postedAt": "2026-07-30T18:04:11.000Z",
"descriptionHtml": "<p>…full posting…</p>",
"descriptionText": "…plain-text version…",
"matchConfidence": "verified",
"scrapedAt": "2026-08-11T09:12:44.000Z"
}

matchConfidence tells you how the company was matched: url (you gave the board URL), verified (the board's own API confirmed the company name), exact-slug (you typed the exact board slug), or guessed (slug derived from the company name and the platform doesn't expose a name to verify against — for guessed boards companyName is the board slug, never your input text, so a mismatched board can't masquerade as your target company).

Export as JSON, CSV, Excel or feed it to the Apify API, n8n, Make, Zapier, or your warehouse like any Apify dataset. A per-company breakdown (which platform was detected, jobs found, companies with no board) is saved to the SUMMARY key of the run's key-value store.

Monitoring mode — get each job once, pay for it once

Set onlyNewJobs: true and set a fixed monitorId (e.g. "my-watchlist"). The Actor remembers every job it has already returned for that monitor — durably, updated as the run progresses — and outputs only new postings on subsequent runs. Combine with Apify Schedules for a zero-maintenance "new jobs at my target companies" feed.

Two things worth knowing:

  • If you don't set monitorId, one is derived from your company list — which means editing the list starts a fresh memory and re-delivers currently open jobs. A fixed monitorId keeps the memory when your watchlist evolves (the run log warns about this too).
  • Avoid running two monitors with the same monitorId at the same instant; overlapping runs may deliver the same brand-new job twice.

Pricing

$2.00 per 1,000 job postings returned, plus a symbolic $0.00005 per Actor start. Platform usage (compute, storage) is included — you pay only for the results.

  • 5 companies, ~150 jobs → about $0.30
  • Daily monitoring of 50 companies, ~40 new jobs/day → about $0.08/day
  • Full pull of a 5,000-job enterprise watchlist → about $10.00

maxJobsPerCompany (default 500) and maxTotalJobs (default 5,000) cap every run, and Apify's per-run cost limit is always enforced — you can never be surprised by a bill.

Good to know

  • Descriptions on Workday, SmartRecruiters, Workable and BambooHR require one extra request per job (that's how those platforms work). Runs are still fast; set includeDescriptions: false if you only need titles/locations/links and want maximum speed.
  • Workday auto-detection finds most tenants from the company name alone (it discovers the career-site token automatically). For unusual setups, paste the career-site URL — the one containing myworkdayjobs.com — and it always works.
  • posting dates: postedAt is only filled when the platform exposes a real date. SmartRecruiters only publishes a "released" timestamp that refreshes constantly, so SR jobs have postedAt: null and the raw timestamp in postedAtRaw. Workday exposes relative dates ("Posted 5 Days Ago") which are converted to approximate dates and kept raw in postedAtRaw.
  • A company isn't found? The summary lists exactly what was tried. Companies whose careers run on unsupported systems (e.g. iCIMS, Taleo, Phenom) won't be detected — tell us which platform you're missing and it moves up the roadmap.
  • Pasting a single job's URL (e.g. boards.greenhouse.io/acme/jobs/12345) scrapes that company's whole board — board URLs and job URLs share the same slug. Use titleKeywords to narrow the output if you only need certain roles.
  • EU-hosted boards (boards.eu.greenhouse.io, jobs.eu.lever.co) are fully supported.
  • Is this legal? The Actor reads the same public, unauthenticated APIs that render each company's own public careers page — no logins, no personal data, only public job advertisements.

Roadmap

Personio, Teamtailor, iCIMS, JazzHR adapters · salary extraction from description text · webhook alerts. Missing something? Open an issue on the Actor's page.