Career Site Jobs Scraper (Workday, Greenhouse, Lever & more) avatar

Career Site Jobs Scraper (Workday, Greenhouse, Lever & more)

Pricing

from $1.50 / 1,000 jobs

Go to Apify Store
Career Site Jobs Scraper (Workday, Greenhouse, Lever & more)

Career Site Jobs Scraper (Workday, Greenhouse, Lever & more)

Open jobs from company career sites on 12 ATSs (Workday, Greenhouse, Lever, Ashby, Workable, Personio & more) in one schema. Paste careers URLs or domains, or search thousands of companies at once by title and country. Get only new jobs; pay per matching job.

Pricing

from $1.50 / 1,000 jobs

Rating

0.0

(0)

Developer

Folt Labs

Folt Labs

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a month ago

Last modified

Categories

Share

Career Site Jobs Scraper — Workday, Greenhouse, Lever, Ashby & 8 more ATSs

Get every open job from company career sites in one clean, consistent format — straight from the applicant tracking system (ATS) the company uses. Paste careers page URLs or just company domains; the ATS is detected automatically. Track only new or removed jobs between runs, and pay for jobs that match your filters (plus $0.05 per 1,000 companies checked). No company list? Search all companies in our directory instead.

What you get

  • ✅ 12 ATSs in one schema: Workday, Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Teamtailor, Personio, Breezy HR, Pinpoint, BambooHR
  • 🌍 Search all companies: no list? Search the live job boards of 11,200+ companies by title, country or location in one run
  • 🔎 Auto-detection: give it stripe.com, a careers page URL or a job board URL — it finds the board (a guessed board is only accepted when the company name matches, so you never get another company's jobs)
  • 🔔 Change detection: return only jobs that are new since your last run, or new + removed — for alerts, CRMs and hiring-signal tracking
  • 🎯 Filters before you pay: title keywords (include/exclude), location, country, remote/hybrid/on-site, department, posted within N days
  • 💰 Salary data where the ATS publishes it (min, max, currency, interval)
  • 🧹 Clean descriptions as plain text (LLM-ready), HTML, or none
  • 🛡️ Privacy by default: recruiter names and contact fields are never included; emails and phone numbers inside descriptions are redacted
  • ⚡ Fast and cheap: uses the ATSs' public job feeds — no browser, no proxies, low memory

Supported ATSs

ATSAdd a company withNotes
Workdaycareers URL, e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSiteExact locations, countries and dates are read from each job page, so large boards take a few minutes. Up to 2,000 jobs per careers site (Workday's own limit). Workday doesn't publish departments.
Greenhousegreenhouse:gitlab or https://job-boards.greenhouse.io/gitlabEU-hosted boards included
Leverlever:spotify or https://jobs.lever.co/spotifyEU-hosted boards included
Ashbyashby:openai or https://jobs.ashbyhq.com/openaiStructured salary when published
SmartRecruiterssmartrecruiters:Wix2
Workableworkable:huggingface or the company domainIncludes careers pages that embed the Workable widget
Recruiteerecruitee:tbibank or the company domainIncludes custom career domains
Teamtailorteamtailor:polestar or the career site URLIncludes custom career domains (e.g. career.avenga.com)
Personiopersonio:fadata-group or the company domain
Breezy HRbreezy:navaide or https://navaide.breezy.hrIncludes careers pages that link to the board or embed its widget. Pay is published as text (salary.summary)
Pinpointpinpoint:carto or https://carto.pinpointhq.comPay range when the company shows it
BambooHRbamboohr:prezi or https://prezi.bamboohr.com/careersIncludes careers pages that embed the BambooHR widget (e.g. prezi.com/jobs). Dates, full addresses and pay text are read from each job's page

Or just paste the company's domain (payhawk.com, dronamics.com, navaide.com) — the Actor scans the careers page for a link to one of these ATSs and, for all but Workday, Breezy HR, Pinpoint and BambooHR, also tries the board named after the domain.

Search all companies — no company list needed

Don't have a list? Turn on Search all companies and the Actor searches the open jobs of every company in the Folt Labs company directory: 11,200+ companies with 480,000+ open jobs on Greenhouse, Ashby, SmartRecruiters, Teamtailor, Personio, Lever and Recruitee (directory built October 2026 and refreshed regularly).

  • Add at least one filter — job title keywords, countries, locations or departments — e.g. "data engineer" in Germany.
  • Every company is checked live at run time, so you get today's openings, not a stale copy.
  • With a country filter, only companies that had jobs in those countries are scanned, which keeps runs fast and cheap.
  • Combine it with Change detection → Only new jobs and a daily schedule for a market-wide feed of new openings.
  • Pick platforms with Directory: job platforms, or cap the scan with Directory: max companies to scan (largest companies first).
  • Speed: about 3,000 companies in 6 minutes; the whole directory in roughly 20 minutes. Runs need at least 1 GB of memory (the default).
{
"searchAllCompanies": true,
"titleKeywords": ["data engineer", "analytics engineer"],
"countryCodes": ["DE", "NL"],
"postedWithinDays": 14,
"changeDetection": "new",
"descriptionFormat": "text"
}

The directory comes from public web-archive data (Common Crawl): job-board addresses of companies on these platforms, each checked against the platform's public job feed. Companies on Workday and other systems aren't in it — add those with a company list (both work in the same run).

How to use

  1. Add companies, one per line (any form from the table above).
  2. Optionally add filters — jobs are only charged when they pass them.
  3. For monitoring, set Change detection to Only new jobs and schedule the Actor (e.g. daily). Runs with nothing new cost almost nothing.

Input example

{
"companies": ["gitlab.com", "lever:spotify", "https://adobe.wd5.myworkdayjobs.com/external_experienced"],
"titleKeywords": ["engineer", "developer"],
"excludeTitleKeywords": ["intern"],
"countryCodes": ["DE", "GB"],
"workplaceTypes": ["remote", "hybrid"],
"changeDetection": "new",
"descriptionFormat": "text"
}

Ready-made recipes

Each recipe is an input you save as a Task, plus a Schedule and an Integration in Apify Console (no code).

GoalInput highlightsScheduleSend results to
Market-wide job feed — every new data-engineer opening in Germany, no list neededsearchAllCompanies: true, titleKeywords: ["data engineer"], countryCodes: ["DE"], changeDetection: "new"dailySlack / Google Sheets / webhook
Hiring signals for sales — know when target accounts start hiring for a roleyour prospect list, titleKeywords: ["data engineer"], changeDetection: "new", descriptionFormat: "none"dailySlack / email / HubSpot (Integrations tab or webhook)
Niche job board — fresh postings from hundreds of companiesyour company list, countryCodes, descriptionFormat: "html", changeDetection: "new_and_removed"every 6–24 hyour site via webhook, Make, Zapier or n8n
Competitor hiring tracker10–50 competitors, changeDetection: "new_and_removed"weeklyGoogle Sheets
Local job feed — e.g. every tech job in Bulgariacompanies with offices there, countryCodes: ["BG"]dailySlack / email

Output example

{
"id": "ashby:openai:8fb1615c-34bf-47c4-a1d1-b7b2f836bbd3",
"ats": "ashby",
"companyName": "OpenAI",
"title": "Technical Program Manager, Compute Infrastructure",
"department": "Technical Program Management",
"employmentType": "full_time",
"workplaceType": null,
"location": "San Francisco",
"locations": ["San Francisco"],
"countryCodes": ["US"],
"salary": { "min": 257000, "max": 335000, "currency": "USD", "interval": "year", "summary": "$257K - $335K" },
"postedAt": "2026-03-12T16:38:15.322Z",
"url": "https://jobs.ashbyhq.com/openai/8fb1615c-34bf-47c4-a1d1-b7b2f836bbd3",
"applyUrl": "https://jobs.ashbyhq.com/openai/8fb1615c-34bf-47c4-a1d1-b7b2f836bbd3/application",
"description": "About the Team\n\nThe compute infrastructure team runs the GPU fleet...",
"changeStatus": "new",
"firstSeenAt": "2026-10-06T09:00:00.000Z"
}
FieldNotes
idStable across runs: ats:board:jobId
employmentTypefull_time, part_time, contract, internship, temporary, other (raw value in employmentTypeRaw)
workplaceTyperemote, hybrid, onsite, or null when the ATS doesn't say
countryCodesISO 3166-1 alpha-2; also inferred from city-only locations such as "Sofia" or "London"
salarynull unless the company publishes pay on its ATS (Ashby compensation, Lever salary range, Recruitee salary, Pinpoint pay range). Breezy HR and BambooHR publish pay as free text, kept in summary with min/max/currency left null. Many companies only mention pay inside the description text, which is kept as-is
changeStatus / firstSeenAtOnly when change detection is on. Removed jobs come back with changeStatus: "removed"

A SUMMARY record in the run's key-value store lists every input with the detected ATS, how it was detected, and how many jobs were returned — so you can see at a glance which companies couldn't be resolved.

Pricing

WhatPrice
Each job returned$0.0015 ($1.50 per 1,000)
Each company checked (your list or the directory)$0.00005 ($0.05 per 1,000)
Each run$0.002
Platform usageincluded — you pay nothing else

Filters and change detection are applied before charging jobs. Examples:

  • a daily run over 50 companies that finds ~5 new jobs a day costs about $0.35 a month;
  • a one-off export of 10,000 jobs costs $15;
  • a "Search all companies" run for data engineers in Germany that checks ~1,000 companies and returns 150 jobs costs about $0.28 ($0.05 for the companies + $0.23 for the jobs).

Cap any run with Apify's maximum cost per run — the Actor stops cleanly when it's reached.

Use cases

  • Job boards & aggregators: feed fresh postings from hundreds of companies into your site
  • Sales & hiring signals: know when target accounts start hiring for a role
  • Recruiting & market research: track openings, locations and salary bands across competitors
  • AI agents & RAG: clean, plain-text job descriptions in one schema

FAQ

My company isn't detected. Paste the job board URL from the company's careers page (e.g. https://jobs.lever.co/acme) or an explicit pair like lever:acme. For Workday, paste the careers site URL. Breezy HR, Pinpoint and BambooHR boards are found from a link or widget on the careers page, or from the board URL / ats:slug you paste. Companies on other systems (iCIMS, Taleo, SAP SuccessFactors, Oracle Recruiting Cloud, Rippling, their own custom site, or job portals only) aren't supported.

Why are some fields null? Each ATS publishes different data. For example, Greenhouse doesn't expose employment type, Workday and Teamtailor rarely expose departments or employment type, Breezy HR boards rarely set departments, Pinpoint has no country field (countries are inferred from the location text), and most companies don't publish salaries.

Why is a Workday or BambooHR company slower? Workday's job list only says "3 Locations" or "Posted 30+ Days Ago", and BambooHR's list has no dates and often no country, so the Actor opens each job's page for the exact locations, countries and date — that's what makes country and date filters correct. Title filters are applied first, and in monitoring mode jobs you already have are not opened again.

How does change detection remember jobs? In a named key-value store in your Apify account (ats-jobs-scraper-state). Runs with the same Watchlist name (or the same company list) compare against each other. The first run returns everything as new.

Is this legal? The Actor reads public job feeds that companies publish for job distribution. It does not log in, bypass protections, or collect applicant data. You're responsible for how you use the data.

Support

Found a company that should work but doesn't? Open an issue on the Actor's Issues tab with the URL — we usually fix it within a few days.