ATS Job Postings Scraper – Workday, Greenhouse, Lever & Careers avatar

ATS Job Postings Scraper – Workday, Greenhouse, Lever & Careers

Pricing

$1.00 / 1,000 jobs

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

ATS Job Postings Scraper – Workday, Greenhouse, Lever & Careers

Job postings scraper for company career sites: every open job listing from Workday, Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable, Personio, Breezy, Teamtailor & Rippling in one schema — title, department, location, remote, salary, date. Hiring data from career URLs or websites.

Pricing

$1.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Forever Tools

Forever Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 minutes ago

Last modified

Share

Company Jobs Scraper — Workday, Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable, Personio, Breezy, Teamtailor, Rippling

Get every open job at the companies you care about in one clean, unified schema, straight from the official public job-board endpoints of eleven widely used applicant tracking systems (ATS).

Input is flexible: paste job-board URLs, ats:slug pairs, bare board names, or just company websites: the actor finds the careers page and detects which ATS the company uses.

Great for: job boards & aggregators, hiring-intent signals for sales (who's hiring SDRs in Berlin?), recruiting & sourcing, competitor/team-growth tracking, labour-market research, and AI agents that need live job data.

Input example

{
"companies": [
"https://www.figma.com",
"https://jobs.ashbyhq.com/notion",
"greenhouse:stripe",
"https://jobs.lever.co/palantir",
"ServiceNow",
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
],
"keywords": ["engineer", "data"],
"locations": ["London", "Remote"],
"postedWithinDays": 30
}

Output (one row per job, same fields for every ATS)

{
"company": "Stripe",
"ats": "greenhouse",
"boardSlug": "stripe",
"jobId": "8172503",
"title": "Abuse Research Engineer",
"department": "Security Analytics",
"location": "Remote from the US",
"remote": true,
"workplaceType": null,
"employmentType": null,
"salaryMin": null, "salaryMax": null, "salaryCurrency": null, "salaryPeriod": null,
"postedAt": "2026-09-09T14:52:09.000Z",
"updatedAt": "2026-09-25T20:45:00.000Z",
"url": "https://stripe.com/jobs/search?gh_jid=8172503",
"applyUrl": "https://stripe.com/jobs/search?gh_jid=8172503",
"descriptionText": "Who we are ...",
"descriptionHtml": "<p>Who we are ..."
}

Salary is filled in when the company publishes it (common on Ashby, Lever and Recruitee). The key-value store record REPORT lists, per company, the detected ATS, total open jobs and how many were returned.

Pricing

$0.001 per job ($1 per 1,000 jobs), description included. You only pay for jobs that pass your filters. No subscription. Examples: all ~500 open roles at a mid-size tech company = about $0.50; a daily feed of new jobs (postedWithinDays: 1) across 200 companies usually returns a few hundred rows = a few tens of cents per day. Companies where no job board is found cost nothing (they only appear in the REPORT record). Apify platform compute is billed separately and is small: the actor calls JSON endpoints, no browser.

How it works

  1. Resolve each input. An ats:slug pair or a job-board URL is used directly. A company website is fetched (plus /careers and /jobs) and scanned for a link to a supported ATS. A bare name like ServiceNow is tried as a board slug on every supported ATS except Workday (Workday needs the full career-site URL).
  2. Fetch the board through the ATS's public job-board endpoint, the same data the company's own careers page shows.
  3. Normalize every posting into the schema above, so a Greenhouse job and a Workday job have the same fields.
  4. Filter and push. Filters run before a job is saved, so filtered-out jobs are never charged.

Filters

InputWhat it does
keywordsKeep jobs whose title contains any of the words (case-insensitive substring: engineer matches "Senior Software Engineer").
locationsKeep jobs whose location text contains any of the words. Remote also matches jobs flagged as remote.
remoteOnlyKeep only remote jobs.
postedWithinDaysKeep jobs posted in the last N days. Jobs where the ATS doesn't publish a date are kept. 0 = no limit.
includeDescriptionTurn off to get smaller rows without descriptionText / descriptionHtml.
maxJobsPerCompanyCap rows per company (0 = all).

Use cases

Hiring signals for B2B sales

Put your target accounts in companies, filter titles like SDR, RevOps or Data Engineer, and schedule it weekly. A company opening those roles is often buying tools for them.

Job boards and niche aggregators

Build a niche board (remote Rust jobs, climate-tech jobs in Europe) from a curated list of employers. The unified schema means one importer handles every ATS, and url / applyUrl send candidates to the employer's own page.

Recruiting and competitor tracking

Track open roles and department growth at competitors, or catch new postings at the companies your candidates want.

Labour-market research and AI agents

Pull clean, structured postings with salary ranges (where published) for analysis, or give an LLM agent live job data through the Apify API or MCP server.

FAQ

Which input format should I use? The job-board URL or ats:slug is fastest and most reliable. Company websites work when the careers page links to a supported ATS; if detection fails, the REPORT record says so and you can paste the board URL instead.

Why did a company return 0 jobs? Either the company uses an unsupported system (iCIMS, Taleo, SuccessFactors, in-house pages), its board currently has no openings, or your filters removed everything. REPORT shows the detected ATS and the total open jobs before filtering.

Is salary included? Yes, when the company publishes it in the ATS (salaryMin, salaryMax, salaryCurrency, salaryPeriod). Many companies don't, so expect nulls, especially on Greenhouse and Workday.

How do I get only new jobs every day? Save a task with your companies and postedWithinDays: 1, and add an Apify schedule. Deduplicate on ats + jobId if you keep a history.

Does it scrape LinkedIn or Indeed? No. It reads employers' own ATS job boards only. That is where postings originate, usually with fuller descriptions.

Is this legal to use? It reads public job postings that companies publish for anyone to see, through public endpoints, without logging in, and collects no personal data. You are responsible for how you use the data.

Supported ATS & slugs

ATSExample board URLslug
Greenhouseboards.greenhouse.io/stripestripe
Lever (US & EU)jobs.lever.co/palantirpalantir
Ashbyjobs.ashbyhq.com/notionnotion
SmartRecruitersjobs.smartrecruiters.com/ServiceNowServiceNow
Recruiteebunq.recruitee.combunq
Workableapply.workable.com/huggingfacehuggingface
Personiopersonio.jobs.personio.depersonio
Breezy HRacme.breezy.hracme
Teamtailoracme.teamtailor.comacme
Ripplingats.rippling.com/acme/jobsacme
Workdaynvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSitepaste the full career-site URL

Notes

  • Only public job postings are read, through each ATS's documented public job-board endpoint. No logins, no personal data.
  • Workday lists at most 2,000 jobs per search; with a single title keyword the search is done on Workday's side, so large employers still work well.
  • Companies using other systems (iCIMS, Taleo, …) are reported in REPORT as "no supported job board found".
  • Schedule it daily with postedWithinDays: 1 to get a feed of new jobs.
  • Built and maintained with AI assistance. Problems or requests: use the Issues tab.

Other actors by the same developer (same flat pay-per-result pricing, no subscription):

Integrations

Run it from the Apify API, a schedule, or no-code tools: the Apify apps for Zapier, Make and n8n can start any public actor ("Run Actor") and read its dataset. AI agents can call it through the Apify MCP server.