ATS Jobs Scraper [$2/1k💰] | 116+ Platforms | Hiring Data avatar

ATS Jobs Scraper [$2/1k💰] | 116+ Platforms | Hiring Data

Pricing

from $1.97 / 1,000 results

Go to Apify Store
ATS Jobs Scraper [$2/1k💰] | 116+ Platforms | Hiring Data

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

Ahmed Jasarevic

Maintained by Community

Actor 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"]).

FieldTypeRequiredDefaultNotes
sitesarray<string>ATS board URLs or company slugs, e.g. ["https://boards.greenhouse.io/stripe", "https://jobs.lever.co/spotify"]. ATS auto-detected.
organizationsarray<string>[]Bare company names/slugs, e.g. ["stripe", "notion", "ramp"]. ATS auto-detected from the name.
maxJobsPerSiteinteger0Max postings per site/company. 0 = all.
maxSitesinteger0Max sites to process from the combined list. 0 = all.
maxJobsTotalinteger0Hard ceiling on job rows for the whole run (billing control). 0 = unlimited.
includeFullDescriptionbooleantrueKeep full HTML description. When false, only plain text is kept.
maxConcurrencyinteger10Sites in parallel. Note: the current build processes sites sequentially regardless.
titleKeywordstring""Keep only jobs whose title contains this text (case-insensitive).
keywordsstring""Keep only jobs matching these terms across title and description. Space-separated terms are AND-ed.
locationstring""Keep only jobs whose location contains this text, e.g. "London", "New York", "remote".
departmentstring""Keep only jobs whose department contains this text.
employmentTypestring""Keep only jobs matching employment type, e.g. "full", "part", "contract".
remoteOnlybooleanfalseKeep only jobs flagged as remote.
postedAfterstring""Keep only jobs published on/after YYYY-MM-DD.
includeRawJsonbooleanfalseAttach the original ATS job object to each row (under the raw field).
proxyConfigurationobjectApify proxy onRoute requests through the Apify proxy. Default {"useApifyProxy": true}.
stateKeystring""Accepted input for change detection; see note below.
onlyNewOrUpdatedbooleanfalseAccepted input (requires stateKey); see note below.
excludeBoilerplatebooleanfalseAccepted input to strip boilerplate sections; see note below.
translateToEnglishbooleanfalseAccepted input for translation; see note below.
enrichEmailsbooleanfalseAccepted input for company contact-email enrichment; see note below.

⚠️ Note on optional flags: stateKey, onlyNewOrUpdated, excludeBoilerplate, translateToEnglish and enrichEmails are 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.

FieldTypeDescription
idstringUnique posting ID from the source ATS
titlestringJob title
companystringCompany name
sitestringSite/company slug
departmentstringDepartment or team
teamstringTeam (when provided by the source)
locationstringPrimary location
allLocationsarray<string>All posting locations
remotestringWorkplace type: remote, hybrid, onsite or null
isRemotebooleanFully remote?
employmentTypestringCommitment, e.g. Full-time, Contract
descriptionstringFull HTML description (when includeFullDescription is on)
descriptionPlainstringPlain-text description
applyUrlstringDirect application URL
hostedUrlstringCanonical posting URL on the ATS board
countrystringISO country code of the primary location (when available)
createdAtstringPosting creation date (ISO 8601)
sourcestringATS platform, e.g. greenhouse, lever, ashby, workday
rawobjectOriginal 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 postedAfter to 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.

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 }
  • Output field list: id, title, company, site, department, team, location, allLocations, remote, isRemote, employmentType, description, descriptionPlain, applyUrl, hostedUrl, country, createdAt, source (+ raw when includeRawJson: true).
  • Behaviors an agent should know:
    • Key facts about the input schema: sites is required; organizations is optional and merged with sites (then sliced by maxSites).
    • Filter fields are applied server-side after fetch — filters reduce billed dataset rows, so prefer setting titleKeyword/keywords/location/department/employmentType/remoteOnly/postedAfter over 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) — maxConcurrency has no effect in the current build; plan long lists accordingly.
    • includeRawJson adds 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/maxSites to bound agent-triggered runs.

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.