ATS Jobs Scraper [$2/1k💰] | 116+ Platforms | Hiring Data
Pricing
from $1.97 / 1,000 results
ATS Jobs Scraper [$2/1k💰] | 116+ Platforms | Hiring Data
Scrape live job postings from 116+ ATS platforms - Greenhouse, Lever, Ashby, Workday and more for hiring-intelligence monitoring, sales prospecting, and job board data. Auto-detect the ATS from any company name or careers URL at $0.002 per result.
Pricing
from $1.97 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Multi-ATS Jobs Scraper — Extract Job Postings from 116+ ATS Platforms
Extract live job postings from 116+ applicant tracking systems (ATS) — Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Personio, Workable, BambooHR, Jobvite and 100+ more — for job board data, hiring-intelligence monitoring, and career-site automation. Paste a company's careers URL or just its name: the ATS is auto-detected and the right API is used, with all results normalized into a single schema for $0.002 per saved job.
Main Use Cases
- Competitor hiring monitoring — detect open roles, department growth, and expansion signals across your competitive set, on a schedule.
- Sales prospecting & lead generation — open roles are buying signals; pair them with account lists to time outreach.
- Building job databases & job-board APIs — ingest structured roles from hundreds of companies without one integration per ATS.
- Talent intelligence & recruiting research — analyze hiring velocity, remote vs. onsite mix, and departmental openings across companies or geographies.
- Remote & hybrid job tracking — filter any company's live roles by remote status, location, title, department, or posting date.
- Careers-page data for AI agents & LLM apps — feed clean, normalized job postings to internal tools, agents, or RAG pipelines.
How the ATS Auto-Detection Works
Most scrapers need you to know the platform in advance. This actor reads the URL itself: boards.greenhouse.io → Greenhouse, jobs.lever.co → Lever, jobs.ashbyhq.com → Ashby, *.myworkdayjobs.com → Workday, plus SmartRecruiters, Personio, Workable, BambooHR, Jobvite and 116+ more. Pass a bare company name like stripe or ramp and the correct ATS board is detected and queried automatically. No manual integration per company.
Each platform has its own optimized fetcher module:
- Lever → Lever's official public Postings API (one request returns all postings)
- Greenhouse → the public Greenhouse board API
- Ashby → the public Ashby jobs API
- SmartRecruiters → the public SmartRecruiters company API
- 100+ others → optimized requests to each platform's public careers JSON/API
All requests run through the Apify proxy (on by default) and every module retries with exponential backoff.
Build Business-Talent Databases Without One Integration Per ATS
Every platform's results are normalized to a single output schema, so one run can mix Greenhouse, Lever, Ashby, Workday and smaller ATS boards and still produce one clean dataset. That means:
- One schema to document, store, and expose to your team or an AI agent
- Filters that run server-side, so you only pay for the rows you keep
- Output you can export as JSON, CSV, Excel or HTML from the Apify dataset
Input
The actor takes ATS board URLs and/or company names. All fields below come from the input schema (required: ["sites"]).
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
sites | array<string> | ✅ | — | ATS board URLs or company slugs, e.g. ["https://boards.greenhouse.io/stripe", "https://jobs.lever.co/spotify"]. ATS auto-detected. |
organizations | array<string> | – | [] | Bare company names/slugs, e.g. ["stripe", "notion", "ramp"]. ATS auto-detected from the name. |
maxJobsPerSite | integer | – | 0 | Max postings per site/company. 0 = all. |
maxSites | integer | – | 0 | Max sites to process from the combined list. 0 = all. |
maxJobsTotal | integer | – | 0 | Hard ceiling on job rows for the whole run (billing control). 0 = unlimited. |
includeFullDescription | boolean | – | true | Keep full HTML description. When false, only plain text is kept. |
maxConcurrency | integer | – | 10 | Sites in parallel. Note: the current build processes sites sequentially regardless. |
titleKeyword | string | – | "" | Keep only jobs whose title contains this text (case-insensitive). |
keywords | string | – | "" | Keep only jobs matching these terms across title and description. Space-separated terms are AND-ed. |
location | string | – | "" | Keep only jobs whose location contains this text, e.g. "London", "New York", "remote". |
department | string | – | "" | Keep only jobs whose department contains this text. |
employmentType | string | – | "" | Keep only jobs matching employment type, e.g. "full", "part", "contract". |
remoteOnly | boolean | – | false | Keep only jobs flagged as remote. |
postedAfter | string | – | "" | Keep only jobs published on/after YYYY-MM-DD. |
includeRawJson | boolean | – | false | Attach the original ATS job object to each row (under the raw field). |
proxyConfiguration | object | – | Apify proxy on | Route requests through the Apify proxy. Default {"useApifyProxy": true}. |
stateKey | string | – | "" | Accepted input for change detection; see note below. |
onlyNewOrUpdated | boolean | – | false | Accepted input (requires stateKey); see note below. |
excludeBoilerplate | boolean | – | false | Accepted input to strip boilerplate sections; see note below. |
translateToEnglish | boolean | – | false | Accepted input for translation; see note below. |
enrichEmails | boolean | – | false | Accepted input for company contact-email enrichment; see note below. |
⚠️ Note on optional flags:
stateKey,onlyNewOrUpdated,excludeBoilerplate,translateToEnglishandenrichEmailsare part of the input schema but are not yet implemented in the current build — they do not change the output today. Use the implemented filters (titleKeyword,keywords,location,department,employmentType,remoteOnly,postedAfter),includeRawJson, and the cap fields for reliable behavior.
Output
Each dataset item is one job posting, normalized across all 116+ ATS platforms.
| Field | Type | Description |
|---|---|---|
id | string | Unique posting ID from the source ATS |
title | string | Job title |
company | string | Company name |
site | string | Site/company slug |
department | string | Department or team |
team | string | Team (when provided by the source) |
location | string | Primary location |
allLocations | array<string> | All posting locations |
remote | string | Workplace type: remote, hybrid, onsite or null |
isRemote | boolean | Fully remote? |
employmentType | string | Commitment, e.g. Full-time, Contract |
description | string | Full HTML description (when includeFullDescription is on) |
descriptionPlain | string | Plain-text description |
applyUrl | string | Direct application URL |
hostedUrl | string | Canonical posting URL on the ATS board |
country | string | ISO country code of the primary location (when available) |
createdAt | string | Posting creation date (ISO 8601) |
source | string | ATS platform, e.g. greenhouse, lever, ashby, workday |
raw | object | Original ATS payload (only when includeRawJson: true) |
Example Input
{"sites": ["https://boards.greenhouse.io/stripe","https://jobs.lever.co/palantir","https://jobs.ashbyhq.com/ramp"],"organizations": ["notion"],"maxJobsPerSite": 100,"maxJobsTotal": 300,"remoteOnly": false,"includeFullDescription": true,"proxyConfiguration": { "useApifyProxy": true }}
Example Output
{"id": "ac978161-6f46-4f6b-ad9e-a258e642751c","title": "Administrative Business Partner","company": "Palantir Technologies","site": "palantir","department": "Administrative","team": "Administrative","location": "London, United Kingdom","allLocations": ["London, United Kingdom"],"remote": "hybrid","isRemote": false,"employmentType": "Full-time","description": "<div>...</div>","descriptionPlain": "...","applyUrl": "https://jobs.lever.co/palantir/ac978161-6f46-4f6b-ad9e-a258e642751c/apply","hostedUrl": "https://jobs.lever.co/palantir/ac978161-6f46-4f6b-ad9e-a258e642751c","country": "GB","createdAt": "2024-03-25T21:10:16.463Z","source": "lever"}
Scrape Jobs Across 116+ ATS Platforms for $0.002 per Result
This actor is pay-per-result: $0.002 per saved dataset item (plus the standard actor-start event). Server-side filters and the maxJobsPerSite / maxJobsTotal / maxSites caps are the main billing controls — a filtered run only charges you for the rows you actually keep.
Free Apify accounts get a capped preview (the first 10 results) so you can validate output and schema before paying anything.
Integrations & Automation
- Apify API — run the actor and pull datasets programmatically (REST, Python or JavaScript).
- Scheduling — run daily or weekly from Apify Console to keep a hiring-intelligence feed fresh; pair with
postedAfterto surface only new roles. Recurring monitoring is the standard pattern for competitor-hiring and talent-intelligence use cases. - Webhooks — notify your CRM, Slack, or internal tool on each run completion.
- Dataset export — JSON, CSV, Excel, XML, RSS from the Apify dataset, ready for job boards and analytics.
Related Actors
- LinkedIn Jobs Scraper (curious_coder/linkedin-jobs-scraper) — the most-used job scraper on Apify; LinkedIn board coverage.
- Job Board Scraper (openclawai/job-board-scraper) — LinkedIn, Indeed, Glassdoor, Google Jobs and ZipRecruiter in one actor.
- Indeed Job Scraper (ahmed_jasarevic/indeed-job-scraper) — salary and company data from Indeed.
- Glassdoor Scraper Pro (ahmed_jasarevic/glassdoor-scraper) — reviews, jobs and salaries to enrich talent research.
- Wellfound Scraper (ahmed_jasarevic/wellfound-scraper) — startup jobs, salary and equity data.
Use this actor for company-owned career sites and ATS boards (the freshest, most complete source of open roles) and pair it with the board scrapers above for a full market view.
FAQ
Why use this actor instead of the official Greenhouse or Lever API?
Those APIs are per-company: you integrate once per employer and per ATS, and you still need to know which ATS each company uses. This actor auto-detects the ATS from a URL or company name and normalizes 116+ platforms into one schema, so one integration covers every company's careers page — with server-side filters and no per-company code.
What are the alternatives to this actor?
Alternatives depend on coverage: career-site-job-listing-api covers 54+ ATS from an aggregated index (higher per-result price); job-board-scraper covers LinkedIn/Indeed/Glassdoor boards rather than career sites; single-platform actors exist for Greenhouse only. This actor's edge is coverage (116+ ATS, including long-tail platforms) plus direct-from-careers-page freshness at $0.002/result.
How do I scrape Greenhouse jobs?
Pass a boards.greenhouse.io URL or the company name in sites/organizations — e.g. "https://boards.greenhouse.io/stripe". The actor detects Greenhouse and uses the Greenhouse board API. Any company on Greenhouse works identically.
Can it scrape Workday jobs?
Yes — *.myworkdayjobs.com URLs (e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite) are detected and scraped. Workday powers thousands of enterprise career sites, so this is the go-to path for Fortune-500 roles.
Can I get remote jobs only?
Yes — set remoteOnly: true. Combined with location: "remote" and employmentType, you can build a clean remote/hybrid job feed.
How much does scraping 100 jobs cost?
$0.002 per saved result → $0.20 for 100 jobs, plus the standard actor-start event. Filters and caps keep runs below effective billing.
How do I build a job board or job database from this?
Run with a list of sites/organizations, keep includeFullDescription on, export the dataset as JSON/CSV, and schedule the run daily for fresh postings. maxJobsTotal bounds each run's cost.
How accurate and fresh is the data?
Because rows come from each company's own ATS board/API, postings are as fresh as the source — typically updated within hours of a role being opened or closed, with no third-party aggregation lag.
SEO Keywords
ats jobs scraper, career site job listing api, ats job scraping, greenhouse job scraper, greenhouse job board api, lever jobs api, ashby jobs scraper, workday jobs scraper, smartrecruiters jobs api, company career page scraper, scrape company career pages, hiring signal data, competitor hiring monitoring, hiring data api, job posting data, talent intelligence, job board api, job aggregator api, remote jobs scraper, remote job data, careers page data, job data export, startup jobs api, recruiting data, 116 ats platforms
For AI Agents & LLM Apps
If you're calling this actor from an agent (via the Apify MCP server or the Apify API), here's the operational reference:
- Purpose: returns one normalized dataset item per open job posting from any of 116+ ATS platforms, given ATS board URLs or company names.
- Minimal working input:
{ "sites": ["https://boards.greenhouse.io/stripe"] }
- Variant inputs (real modes):
- Bare company names:
{ "organizations": ["ramp", "notion"], "maxJobsPerSite": 50 } - Filtered/remote feed:
{ "sites": ["https://jobs.lever.co/spotify"], "remoteOnly": true, "location": "Berlin", "maxJobsTotal": 100 }
- Bare company names:
- Output field list:
id, title, company, site, department, team, location, allLocations, remote, isRemote, employmentType, description, descriptionPlain, applyUrl, hostedUrl, country, createdAt, source(+rawwhenincludeRawJson: true). - Behaviors an agent should know:
- Key facts about the input schema:
sitesis required;organizationsis optional and merged withsites(then sliced bymaxSites). - Filter fields are applied server-side after fetch — filters reduce billed dataset rows, so prefer setting
titleKeyword/keywords/location/department/employmentType/remoteOnly/postedAfterover post-processing to control cost. - Free (non-paying) runs are capped at 10 dataset rows regardless of input.
- Runs process sites sequentially (not in parallel) —
maxConcurrencyhas no effect in the current build; plan long lists accordingly. includeRawJsonadds the full original ATS object per row — heavier output, useful for debugging or extra fields.- Default proxy is on (
useApifyProxy: true) — keep it unless you know you don't need it. - Billing: PAY_PER_EVENT — $0.002 per dataset result + $0.0005 actor-start event (per GB). Use
maxJobsTotal/maxJobsPerSite/maxSitesto bound agent-triggered runs.
- Key facts about the input schema:
Legal & Compliance Disclaimer
This actor scrapes publicly available job postings from third-party applicant tracking systems (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, and others). It is an independent tool and is not affiliated with, endorsed by, or sponsored by any of these platforms. It only reads publicly published career-page and job-board data — no login bypass, no CAPTCHA solving. Users are responsible for complying with each platform's Terms of Service and with applicable law in their jurisdiction when using this data. Output contains job-posting information (not personal contact data); if you use it for outreach, ensure you comply with applicable marketing and data-protection rules.