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
1
Total users
0
Monthly active users
19 days ago
Last modified
Categories
Features
Share
Multi-ATS Jobs Scraper - Nine ATS Platforms, One Schema
The Multi-ATS Jobs Scraper collects public job listings from nine applicant-tracking-system families and normalizes them into one dataset. Provide careers URLs from Greenhouse, Lever, Ashby, SmartRecruiters, Personio, Workable, BambooHR, Jobvite or Workday, and receive titles, companies, locations, descriptions and apply links in a consistent schema.
Use it for a multi-company job board, hiring monitoring, remote-role comparison or an HR-tech product. This build covers the nine ATS platforms below; it does not identify an arbitrary company from a bare name, so use a recognizable ATS URL or domain.
Main Use Cases for Multi-ATS Job Data
- Multi-company job boards - combine vacancies from several employers into one searchable dataset.
- Recruiting pipelines - feed normalized roles into a CRM, ATS, alerting tool or candidate-matching workflow.
- Remote-work analysis - compare remote, hybrid and on-site roles by company and location.
- Salary and role benchmarking - analyze title, department and employment-type patterns across ATS sources.
- Job-board enrichment - add description, apply URL, company and location data to an existing vacancy list.
- AI job agents - give an LLM a stable, normalized job schema across otherwise incompatible ATS APIs.
How It Works

The Actor accepts careers URLs in sites and additional organization URLs or domains in organizations. It detects the ATS family from the host and URL pattern, then calls that platform's public job endpoint. The current fetcher set covers Greenhouse, Lever, Ashby, SmartRecruiters, Personio, Workable, BambooHR, Jobvite and Workday. Other ATS providers are not supported by this build.
A source URL must contain a recognizable ATS domain or board identifier. A bare company name such as "Acme" is not enough to discover the correct board. Use the URL you see when you open the company careers page, such as a boards.greenhouse.io or jobs.lever.co address. After detection, the Actor lists the board's jobs and, when full descriptions are enabled, fetches the selected job records.
Every vacancy is mapped into a common 18-field schema. Company, title, location, department, employment type and remote flags are normalized where the source exposes them. includeFullDescription controls whether the long description is fetched; includeRawJson preserves the platform payload for debugging or downstream custom parsing. Filters such as titleKeyword, keywords, location, department, employmentType, remoteOnly and postedAfter are applied to normalized fields.
The current build processes supported sources in a conservative sequence. maxConcurrency is accepted by the input schema but is not used by the crawler. Several automation-oriented switches, including stateKey, onlyNewOrUpdated, excludeBoilerplate, translateToEnglish and enrichEmails, are also placeholders with no effect in this build. The free preview is limited to 10 jobs.
Input
Start with one or more careers URLs. Limits and filters are optional; use a small maxJobsTotal for the first run.
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
sites | string[] | Yes | ["https://boards.greenhouse.io/lattice"] | Careers-site URLs from a supported ATS platform. Each source is processed separately. |
organizations | string[] | No | [] | Additional organization URLs or recognizable ATS domains. Bare company names do not auto-detect. |
maxJobsPerSite | integer | No | 0 | Maximum jobs from each site. 0 means no per-site cap. |
maxSites | integer | No | 0 | Maximum source sites to process. 0 means no site cap. |
maxJobsTotal | integer | No | 0 | Overall job cap. 0 means no total cap. |
includeFullDescription | boolean | No | true | Fetch the full job description instead of a short listing summary. |
maxConcurrency | integer | No | 10 | Accepted by the schema but not used by the current sequential crawler. |
titleKeyword | string | No | empty | Keep jobs whose title contains this text. |
keywords | string | No | empty | Keep jobs whose searchable text contains these terms. |
location | string | No | empty | Filter by normalized location text. |
department | string | No | empty | Filter by department or team. |
employmentType | string | No | empty | Filter by full-time, part-time, contract or another source label. |
remoteOnly | boolean | No | false | Keep only roles marked as remote. |
postedAfter | string | No | empty | Keep roles posted after the supplied date or timestamp. |
includeRawJson | boolean | No | false | Add the original ATS payload to each output row for debugging. |
stateKey | string | No | empty | Accepted for compatibility; change tracking is not implemented in this build. |
onlyNewOrUpdated | boolean | No | false | Accepted for compatibility; no stateful diffing is performed. |
proxyConfiguration | object | No | Apify proxy | Proxy settings for requests to ATS platforms. |
A supported URL is essential. If a source is rejected, open the company careers page and copy the final ATS URL rather than a marketing careers-page URL that redirects through JavaScript. Filters only exclude a job when the relevant normalized field is present; a missing location or department is not treated as a mismatch.
Output
The dataset uses one normalized schema for every ATS. A normal job row contains 18 fields, with optional raw JSON when requested.
| Field group | Fields | What you get |
|---|---|---|
| Identity | id, title, company, site, source | Stable or source-derived job ID, title, company, ATS platform and source URL. |
| Classification | department, team, employmentType | Department, team and employment type when the ATS publishes them. |
| Location | location, allLocations, remote, isRemote, country | Primary location, all listed locations, remote flags and country. |
| Description | description, descriptionPlain | HTML and plain-text job descriptions when full details are enabled. |
| Application | applyUrl, hostedUrl | Application destination and the hosted ATS job URL. |
| Time | createdAt | Original posting timestamp when available. |
| Debug | rawJson | Optional original ATS payload controlled by includeRawJson. |
Not every ATS supplies the same fields. department, team, employmentType, country and createdAt can be null, and allLocations can contain several strings. remote and isRemote preserve source signals rather than inferring remote status from the description.
Pricing
The Actor uses pay-per-event pricing. A start event is charged per run and each normalized job row is charged as a result.
| Event | FREE | BRONZE | SILVER | GOLD+ |
|---|---|---|---|---|
| Actor start, per run | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
| Job result | $0.002 | $0.00199 | $0.00198 | $0.00197 |
That is approximately $2.00 per 1,000 jobs on FREE and slightly less on higher tiers. A run across 20 employers with 100 jobs each writes up to 2,000 rows, or roughly $4.00 on the free tier. The free preview is limited to 10 jobs, and rows excluded by filters are not billed.
Example Input
{"sites": ["https://boards.greenhouse.io/lattice","https://jobs.lever.co/example-company","https://jobs.ashbyhq.com/example"],"maxJobsPerSite": 50,"maxJobsTotal": 100,"includeFullDescription": true,"titleKeyword": "engineer","remoteOnly": true,"includeRawJson": false}
This checks three supported ATS boards, keeps up to 50 jobs per board and 100 overall, and narrows the result to remote engineering roles. A company must have a recognizable ATS URL for detection to work.
Example Output
{"id": "gh-1234567","title": "Senior Backend Engineer","company": "Example Company","site": "greenhouse","department": "Engineering","team": "Platform","location": "Remote - Europe","allLocations": ["Remote - Europe", "London, UK"],"remote": true,"isRemote": true,"employmentType": "Full-time","description": "<p>Build and operate distributed services.</p>","descriptionPlain": "Build and operate distributed services.","applyUrl": "https://boards.greenhouse.io/example/jobs/1234567","hostedUrl": "https://boards.greenhouse.io/example/jobs/1234567","country": "GB","createdAt": "2026-10-01T09:00:00.000Z","source": "https://boards.greenhouse.io/example"}
The normalized row keeps both HTML and plain text when available. Exact field presence depends on the ATS; the schema remains stable so jobs from different sources can be combined.
Integrations and Automation
Run on demand, on a schedule, through the Apify API or Apify MCP, or from Zapier, Make and n8n. Export JSON, CSV, Excel, XML or HTML, or push jobs to Google Sheets, Airtable, a database, a search index or a webhook.
A multi-employer job board can key on applyUrl or id, then update title, location and description when a newer snapshot arrives. A recruiting team can filter by department and location, send new roles to a shared inbox, or sync them into an internal ATS.
Do not rely on stateKey or onlyNewOrUpdated for deduplication in this build; they are placeholders. Store a stable job key and compare snapshots in your own pipeline. Keep source and site to audit which ATS produced each record.
Related Actors
- Greenhouse Boards Scraper - job listings from Greenhouse career boards.
- Lever Jobs Scraper - open roles and descriptions from Lever boards.
- Ashby Jobs Scraper - job data from Ashby-hosted career pages.
FAQ
The listing says 116+ platforms. Why does this README say nine?
The store title is broader than the current build. The source implements nine ATS fetchers: Greenhouse, Lever, Ashby, SmartRecruiters, Personio, Workable, BambooHR, Jobvite and Workday. This README documents what the build actually supports.
Can I enter a company name instead of a URL?
No. Bare names such as "Stripe" or "Shopify" are not auto-detected. Use a URL from the company careers page that contains a supported ATS domain or board identifier.
Does maxConcurrency speed up a run?
Not in this build. The input is accepted, but the current crawler processes supported sources conservatively. Do not expect a concurrency increase from changing it.
Why are stateKey and onlyNewOrUpdated not working?
They are accepted for forward compatibility but are not implemented in the current source. The Actor does not persist state or compare jobs between runs. Store your own key and diff snapshots.
How many jobs are included in the free preview?
The free preview is limited to 10 jobs across the run. Each written job is charged as a result, so use filters and maxJobsTotal to keep test runs small.
For AI Agents and LLM Apps
The Actor gives agents a shared job schema across nine ATS platforms, reducing source-specific parsing. It is callable through the Apify API and Apify MCP.
- One row represents one job posting. Use
applyUrloridas the stable key and keepsitefor provenance. - Supported platforms are Greenhouse, Lever, Ashby, SmartRecruiters, Personio, Workable, BambooHR, Jobvite and Workday; do not assume arbitrary ATS support.
remoteandisRemoteare source-derived. Do not replace them with keyword guesses unless you clearly label the inference.- Several advanced inputs are placeholders in this build, including
maxConcurrency,stateKey,onlyNewOrUpdated,excludeBoilerplate,translateToEnglishandenrichEmails. - The free preview returns at most 10 jobs, and filtered-out rows are not billed as results.
Legal and Compliance
This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by any applicant tracking system or employer. It reads publicly available job listings for research, aggregation and recruiting workflows. Each ATS and employer may impose its own terms and robots guidance, which still apply.
Job descriptions and application data can contain personal or confidential information. Do not use the output to circumvent access controls, republish full descriptions without permission, or make automated employment decisions that violate anti-discrimination law. Follow applicable privacy and accessibility requirements when displaying jobs to candidates.
SEO Keywords
multi ATS scraper, ATS jobs scraper, Greenhouse scraper, Lever scraper, Ashby scraper, SmartRecruiters scraper, Personio scraper, Workable scraper, BambooHR scraper, Jobvite scraper, Workday scraper, job board scraper, multi company jobs, normalized job data, career page scraper, hiring data, remote job scraper, job listings API, recruiting data, ATS API alternative