ATS Jobs Scraper & Change Monitor avatar

ATS Jobs Scraper & Change Monitor

Pricing

from $2.00 / 1,000 company checkeds

Go to Apify Store
ATS Jobs Scraper & Change Monitor

ATS Jobs Scraper & Change Monitor

Every open job from any company's career page — Greenhouse, Lever, Ashby, Personio, Recruitee, SmartRecruiters, Workday — in one schema. Fetched live: no stale database, no ghost jobs. Monitor mode returns only new/removed/changed postings; an unreadable board is reported, never counted as zero.

Pricing

from $2.00 / 1,000 company checkeds

Rating

0.0

(0)

Developer

Захар Бараненко

Захар Бараненко

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

Share

ATS Jobs Scraper & Change Monitor — Workday, Greenhouse, Lever, Ashby + 3 more

Give it a list of companies — get every open job from their career pages, normalized into one clean schema. Switch on monitor mode and each scheduled run returns only what changed: new postings, removed postings, edited postings (title, location, salary). No proxies, no scraping tricks — the Actor reads the same public job-board APIs the career pages themselves use.

What you get

Each job record:

FieldExample
company / atsstripe / greenhouse
titleBackend Engineer, Payments
department / teamEngineering / Payments
locationNew York · Remote
remotetrue
employment_typeFull-time
salary_min / salary_max / salary_currency140000 / 180000 / USD (where the board exposes it)
urldirect apply link
published_at / updated_atISO dates

In monitor mode, change records add "change": "new" | "removed" | "changed".

Supported ATS — 7 platforms

  • WorkdayTENANT.wd5.myworkdayjobs.com/SITE (pass the career-page URL)
  • Greenhouseboards.greenhouse.io/...
  • Leverjobs.lever.co/...
  • Ashbyjobs.ashbyhq.com/...
  • SmartRecruiterscareers.smartrecruiters.com/... (see the note below)
  • RecruiteeCOMPANY.recruitee.com
  • PersonioCOMPANY.jobs.personio.de

All seven were re-checked against live boards in September 2026. Two caveats worth knowing before you build on them:

  • Workday is slow. It returns everything a tenant has — thousands of postings — but a small run took ~80 seconds where Ashby takes 2. Fine on a schedule, poor for anything waiting on an answer.
  • SmartRecruiters cannot be trusted to say "no jobs". Its API answers 200 {"totalFound": 0} for unknown identifiers and for companies that never enabled the public postings API, exactly as it does for a company with no openings. The Actor therefore reports an empty SmartRecruiters board as an error rather than as zero jobs, so you are never told "no openings" when the truth is "could not read this".

Pass a bare slug (stripe), a career-page URL, or an explicit greenhouse:stripe. For bare slugs the Actor probes the ATS platforms automatically and caches the answer, so later runs are fast. Workday boards need the career-page URL (the tenant/site pair can't be guessed from a name alone).

What a run can tell you

Every record carries a record_type, so a person or an agent can tell outcomes apart without reading logs:

record_typeMeaningBilled
jobAn open posting (pull mode, or the first monitor run)per job result
changenew / removed / changed since the previous runper change
warningThe board answered but returned nothing while jobs were known — previous state kept, no changes emittedcompany check only
errorThe board could not be read at all; state untouchednot billed
summaryEnd-of-run receipt: counts, and which companies went uncheckednot billed

That warning row exists because a board answering with an empty list is usually the source blinking — a migration, an unpublished board, a provider hiccup — not every role closing at once. Diffing against it would emit a removed for every job and a new for every job the next day. The Actor keeps the previous state instead and only believes a zero after three consecutive empty runs.

Two modes

Pull (default) — returns all current jobs every run. Good for one-off datasets and lead lists.

Monitor — the first run saves a baseline; every later run compares and returns only the diff. Put the Actor on a daily schedule and pipe the dataset into Slack, n8n, Make or a webhook: you get pinged the day a company opens (or quietly closes) a role. You pay cents for the change records instead of re-downloading a 500-job board every day.

Who uses this

  • Recruiting agencies — a company opening 5 sales roles is a placement opportunity. Be first.
  • B2B sales / GTM teams — job postings are buying signals: a new Head of Data means data-tooling budget. Watch your target accounts' hiring instead of paying $99+/mo for a signals platform.
  • Job seekers (power users) — watch your 30 dream companies and apply on day one, not when the posting hits aggregators.
  • Analysts & founders — track competitors' headcount moves by department.
  • AI agents — callable via Apify MCP: “what is company X hiring for right now?”

Pricing

Pay per event, no subscription:

EventPriceWhen
Company checked$0.002each company successfully fetched
Job result$0.001each job row (pull mode, first baseline, or optional snapshot)
Change found$0.008each new / removed / changed posting in monitor mode

Typical spend: watching 100 companies daily with ~10 changes a day ≈ $8–9/month. Companies that fail (no supported board found) are never charged.

Example: Slack alert on a competitor's new job (n8n)

  1. Schedule this Actor daily with your watchlist, mode = monitor.
  2. n8n → Apify node: “Get dataset items” from the last run, filter record_type = change, change = new.
  3. Slack node: post {{company}} just opened: {{title}} ({{location}}) — {{url}}.

The same three steps work in Make, Zapier or a plain webhook.

Input example

{
"companies": ["linear", "https://jobs.lever.co/spotify"],
"mode": "pull"
}

FAQ

Where does the data come from? From the public job-board APIs of each ATS — the same JSON the company's own careers page loads. No login, no proxies, no personal data: only public job postings.

A company isn't found? Its careers site runs on an ATS we don't support yet or uses a custom board. You are not charged for it. Tell us in the Issues tab — the next ATS integrations are prioritized by requests.

Workday returns nothing for a bare slug? Workday needs the full career-page URL (e.g. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite) — copy it from the company's careers site.

How do I reset the monitor baseline? Delete the ats-jobs-monitor-state key-value store in your Apify console (Storage → Key-value stores) — the next run rebuilds it.