Multi-ATS Job Scraper — Greenhouse, Lever, Ashby, Workday
Pricing
$3.00 / 1,000 job scrapeds
Multi-ATS Job Scraper — Greenhouse, Lever, Ashby, Workday
Scrape jobs from the 5 biggest ATS platforms in one dataset — Greenhouse, Lever, Ashby, SmartRecruiters & Workday. Full descriptions, salaries, locations, departments & apply links. Auto-detects the ATS from a careers URL or company name. Monitor mode emits only new jobs.
Pricing
$3.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
Multi-ATS Job Scraper — Greenhouse, Lever, Ashby, SmartRecruiters & Workday
Scrape job postings from the 5 biggest applicant tracking systems (ATS) in one run — Greenhouse, Lever, Ashby, SmartRecruiters, and Workday — into a single, unified, richly-structured dataset. Paste a careers URL or just a company name and the actor auto-detects the ATS, pulls every public posting, and normalizes it: full job descriptions, salary ranges, locations & geo, departments, employment type, and direct apply links — the same column layout no matter which ATS the job came from.
No login, no cookies, no browser — fast, direct API extraction straight from each company's own career board, with monitor mode to capture only newly-posted jobs on a schedule.
Why this job scraper?
Most job scrapers cover one ATS, or one job aggregator that's hours-to-days stale and strips the fields that matter. This actor reads each company's live career board directly — so the data is as fresh as the company's own careers page — and merges five different ATS formats into one clean schema. It ships the richest job dataset in the category:
| Data | Single-ATS / aggregator scrapers | This actor |
|---|---|---|
| Greenhouse + Lever + Ashby + SmartRecruiters + Workday | ❌ one at a time | ✅ all five, one dataset |
| Auto-detect ATS from a company name or URL | ❌ | ✅ |
| Full job description (HTML and plain text) | partial | ✅ |
| Salary range + currency + equity flag | ❌ usually null | ✅ when published |
| City / region / country + lat-long geo | partial | ✅ |
| Department, team, employment type, experience level | ❌ | ✅ |
| Direct apply URL + canonical job URL | partial | ✅ |
| Requisition ID, posted/updated dates | ❌ | ✅ |
| Employer custom fields (division, brand, contract…) | ❌ | ✅ (SmartRecruiters) |
| Unified columns across every ATS | ❌ | ✅ |
| Monitor mode — only new postings | ❌ | ✅ |
Use cases
- Recruiting & sourcing intelligence — track who's hiring, for what, and where, across hundreds of companies' real career boards in one feed.
- Sales & lead generation — a new job posting is a buying signal. Monitor target accounts for roles that signal budget, expansion, or a new initiative (e.g. "Head of RevOps", "first Data Engineer"), and reach out the day it appears.
- Job boards & aggregators — power a niche job site with fresh, structured, deduplicated postings — including descriptions and salaries — without scraping each ATS yourself.
- Labor-market & compensation research — analyze salary ranges, remote/hybrid mix, and hiring velocity by company, department, and location.
- Competitive monitoring — watch competitors' headcount plans: which teams are growing, which markets they're entering, how fast they post.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the Multi-ATS Job Scraper, add companies (a careers URL, an
ats:tokenshorthand, or a plain company name), and click Start. - Watch results stream into the dataset table — one clean row per job, same columns for every ATS.
- Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.
Input
{"companies": ["https://boards.greenhouse.io/figma","lever:palantir","ashby:openai","https://careers.smartrecruiters.com/BoschGroup","https://salesforce.wd12.myworkdayjobs.com/External_Career_Site"],"searchTerms": ["engineer", "data"],"locationFilters": ["remote", "london"],"includeDescription": true,"includeCompensation": true,"maxItemsPerCompany": 200,"onlyNewItems": false}
- companies — one entry per company. Each can be:
- a careers/board URL (most reliable):
https://boards.greenhouse.io/figma,https://jobs.lever.co/palantir,https://jobs.ashbyhq.com/openai,https://careers.smartrecruiters.com/BoschGroup,https://salesforce.wd12.myworkdayjobs.com/External_Career_Site; - an
ats:tokenshorthand:greenhouse:figma,lever:palantir,ashby:openai,smartrecruiters:BoschGroup; - a plain company name to auto-detect across Greenhouse, Lever, Ashby and SmartRecruiters. Workday always needs a URL (its address encodes the data-center and career-site, which can't be guessed from a name).
- a careers/board URL (most reliable):
- searchTerms — optional keyword filter; a job is kept if any term appears in its title, department, tags, or description.
- locationFilters — optional location filter (
remote,london,united states, …) matched against location, city, region, and country. - includeDescription (default true) — full description (HTML + plain text). Free for Greenhouse/Lever/Ashby; adds one detail request per job for SmartRecruiters/Workday.
- includeCompensation (default true) — parse salary ranges and equity flags where published.
- includeRawData (default false) — attach the complete original ATS object under
raw. - maxItemsPerCompany / maxItems (default 0 = no limit) — caps for test runs or budget control.
- onlyNewItems (default false) — monitor mode: emit only postings not seen in previous runs (see below).
- dedupStoreName (default
ats-jobs-state) — named store holding seen job IDs for monitor mode. - proxyConfiguration — proxy settings (default Apify datacenter proxy; residential is not needed).
Output
One clean record per job, identical columns across every ATS:
{"ats": "greenhouse","companyName": "Figma","companySlug": "figma","jobId": "5822886004","title": "Staff Software Engineer, Platform","url": "https://boards.greenhouse.io/figma/jobs/5822886004","applyUrl": "https://boards.greenhouse.io/figma/jobs/5822886004","descriptionHtml": "<div class=\"content-intro\"><p>Figma is growing…</p></div>","descriptionText": "Figma is growing our team of passionate creatives and builders…","department": "Engineering","team": "Platform","jobFunction": null,"employmentType": "Full-time","experienceLevel": null,"location": "San Francisco, CA","locations": ["San Francisco, CA", "New York, NY"],"isRemote": false,"workplaceType": "hybrid","city": "San Francisco","region": "CA","country": "US","postalCode": "94103","latitude": 37.7765,"longitude": -122.3963,"salaryMin": 230000,"salaryMax": 310000,"salaryCurrency": "USD","salaryInterval": "year","salaryRaw": "$230K – $310K • Offers Equity","hasEquity": true,"requisitionId": "2178","postedAt": "2026-04-17T12:21:54.000Z","updatedAt": "2026-04-17T16:25:57.000Z","tags": ["Engineering"],"customFields": [{ "label": "Division", "value": "Product" }],"companyInput": "https://boards.greenhouse.io/figma","scrapedAt": "2026-06-12T12:00:00.000Z"}
What to expect (field coverage)
Different ATS platforms expose different fields, and many are populated only when the employer filled them in. Verified across all five platforms, you can typically expect:
| Field | Greenhouse | Lever | Ashby | SmartRecruiters | Workday |
|---|---|---|---|---|---|
| Title, URL, apply URL | ✅ | ✅ | ✅ | ✅ | ✅ |
| Full description | ✅ | ✅ | ✅ | ✅ (detail call) | ✅ (detail call) |
| Department / team | ✅ | ✅ | ✅ | ✅ | — |
| Location | ✅ | ✅ | ✅ | ✅ + lat-long | ✅ |
| Salary range | when set | when set | often | rarely | — |
| Requisition ID | ✅ | — | — | ✅ | ✅ |
| Posted / updated dates | ✅ | ✅ | ✅ | ✅ | ✅ |
A blank field means the employer didn't publish it for that posting — not that scraping failed. Nothing is dropped, so you always get the richest record available from each board.
Monitor only new jobs
Turn on onlyNewItems and the actor saves every job ID it has seen in a named key-value store (dedupStoreName), then on each later run emits only postings that weren't there before. Combined with a daily Schedule, you get a clean feed of just the new roles at your target companies — perfect for hiring-signal alerts and job-board ingestion.
- The first run emits everything (and seeds the store); subsequent runs emit only the delta.
- Monitor mode is the actor's own dedupe layer — it complements, and does not conflict with, Apify Schedules (a cron trigger) or the Console Monitoring tab (charts & alerts).
- Use a distinct
dedupStoreNameper independent monitor (e.g. per client or per company set) so their states don't mix. - If you schedule frequent runs, enable the Schedule's exclusive option so a new run doesn't start before the previous one finishes writing its state.
- Heads-up: a quiet run legitimately returns 0 items, which can trip a Console Monitoring "results lower than N" alert — expected behavior, not an error.
Automate & schedule
Run this actor on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it hourly/daily/weekly to track new postings at your target companies; pair with
onlyNewItemsfor a new-jobs-only feed. - Webhooks — trigger downstream actions (CRM import, Slack alert, job-board ingest) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/multi-ats-job-scraper').call({companies: ['https://boards.greenhouse.io/figma','lever:palantir','ashby:openai',],searchTerms: ['engineer'],onlyNewItems: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} new job postings`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new job postings straight into your ATS, CRM, or spreadsheet.
- Slack — get notified when a monitored company posts a new role.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find all remote data engineering roles at these ten companies and list salary and apply links" and let it run the scraper for you.
More scrapers from scrapesage
Build a complete hiring-intelligence & lead-gen stack:
- LinkedIn Jobs Scraper — job postings from LinkedIn as hiring-intent signals.
- Eventbrite Scraper — events plus organizer leads (ticket prices, emails, socials).
- Sched Conference Scraper — speakers, sessions, and sponsors from Sched conference sites.
- Whova Event Scraper — attendees, agendas, and sponsors from Whova event apps.
- Swapcard Exhibitor Scraper — exhibitor lists and contacts from Swapcard-powered events.
- Facebook Ad Library Scraper — competitor ad intelligence on Meta & Instagram.
- Google Ads Transparency Scraper — who's advertising what on Google.
- Reddit Scraper — posts, comments, users, and communities.
- Airbnb Scraper — listings, prices, and availability.
Tips
- The careers URL is the most reliable input. Plain company names are auto-detected by trying common slugs — great for Greenhouse/Lever/Ashby/SmartRecruiters, but if a name doesn't resolve, paste the board URL or use an
ats:tokenshorthand. Workday always needs the URL. - Listing-only, faster runs: set
includeDescription: falseto skip the per-job detail calls on SmartRecruiters and Workday (Greenhouse/Lever/Ashby always include descriptions for free). - Big boards: use
maxItemsPerCompanyfor quick tests; the actor paginates the whole board by default. - Salaries are richest on Ashby, Lever, and Greenhouse — many US postings publish ranges and equity; SmartRecruiters/Workday rarely do.
- Recurring monitoring: combine
onlyNewItemswith Schedules and a webhook to push new roles into your CRM the moment they appear.
FAQ
Which ATS platforms are supported? Greenhouse, Lever, Ashby, SmartRecruiters, and Workday — the five most widely used by mid-market and enterprise employers. One run can mix all of them.
How do I find a company's careers URL? It's the page their "Apply" / "Open roles" links point to — e.g. boards.greenhouse.io/<company>, jobs.lever.co/<company>, jobs.ashbyhq.com/<company>, careers.smartrecruiters.com/<Company>, or <company>.wdN.myworkdayjobs.com/<Site>. Paste that, or just try the company name.
Does it need an API key or login? No. It reads each company's public career-board API — the same data their own careers page shows — no key, cookie, or login required.
Why does a plain company name sometimes not resolve? Auto-detection guesses the board token by trying common slug spellings. Unusual slugs (or any Workday tenant) can't be guessed — paste the careers URL or use ats:token and it works every time.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
How do I monitor companies for new jobs automatically? Turn on onlyNewItems, create a Schedule (e.g. daily), and optionally add a webhook or Zapier zap to push new postings into your CRM as they appear.
A field is empty — why? Different ATS platforms expose different fields, and many (salary, department, requisition ID) are filled in only when the employer chooses to. Empty means the employer didn't publish it — never that the scraper skipped it.
Is scraping job boards legal? This actor collects publicly available data only. You're responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and each site's terms.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests — more ATS platforms, more fields — are welcome; this actor is actively maintained.