Job Change Monitor: New and Closed Roles Only
Under maintenancePricing
from $1.50 / 1,000 job postings
Job Change Monitor: New and Closed Roles Only
Under maintenanceWatch company job boards and get only what changed since the last run: roles that appeared, and roles that disappeared. State lives in a store Apify keeps indefinitely, and the first run records a baseline without charging. No API key, no proxy, no diffing on your side.
Pricing
from $1.50 / 1,000 job postings
Rating
0.0
(0)
Developer
Daniel Meshulam
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Run it on a schedule. Get the four roles that appeared, not the 548 that were already there.
A search of the Apify Store on 2026-08-01 found no other Actor that reports job board changes. Everything else hands you the whole board and leaves the diffing to you.
{ "companies": ["stripe.com", "figma.com"] }
NEW Staff Security Engineer stripe.comNEW Product Designer, Payments stripe.comCLOSED 4318772008 figma.com
No API key. No proxy. No diffing on your side.
Two things decide whether a monitor actually works
Both were checked, not assumed, and both are the reason this one can be trusted.
The memory has to be permanent
Apify's own documentation: "Named key-value stores are retained indefinitely. Unnamed key-value stores expire after 7 days."
A monitor built on the run's default storage silently loses its memory every week, and then reports an entire board as new. That is worse than no monitor, because it looks like it worked and it bills like it worked. This Actor keeps state in a named store, and the store name is an input so you can hold separate watchlists apart.
Two watchlists must never share a baseline
State is keyed per board, and the key carries a digest of the board token
rather than only a sanitised version of it. Sanitising alone collapsed
different boards onto one key: Bosch Group and Bosch/Group both became
Bosch-Group.
Two boards on one baseline is not a small bug. Every run would report every posting of one board as new and every posting of the other as closed, then swap on the next run, forever, and you would pay for every one of those rows.
The first run must not bill you for the baseline
On day one everything is new by definition. Being charged for 548 "new" roles the first morning you point this at Stripe is a technicality dressed as a feature.
So the first run records the baseline, reports one row saying exactly that, and charges nothing:
Baseline recorded for stripe.com (greenhouse/stripe): 548 open roles.This run is not charged. From the next run on, only roles that appearor disappear are reported.
A role disappearing is a signal too
reportClosedRoles is on by default. A role leaving the board means it was
filled, paused or withdrawn, and for anyone tracking a competitor's hiring that
is often the more interesting half.
A failed check never corrupts the memory
If a board cannot be fetched, the remembered state is left alone and an error row is emitted. The alternative, overwriting the baseline with nothing, would make the next successful run report the whole board as new and charge for it. Verified: after a failed fetch the stored baseline is byte-identical.
Setting it up
- Run it once. That records the baseline and costs nothing.
- Add it to an Apify Schedule, daily or hourly.
- Connect the dataset to Slack, email, a webhook or a sheet.
Changed which companies you watch? Set resetBaseline: true once.
What you get
New roles carry the full posting, in the same shape as ATS Jobs Scraper,
plus changeType: "new". Closed roles carry changeType: "closed" with the
job id, company, platform and board.
| Field | |
|---|---|
changeType | new or closed |
title, location, url | on new roles |
departments, offices | |
company, atsPlatform, boardToken, boardUrl | |
postedAt, updatedAt | |
description | opt in, see below |
Why this returns data when job scrapers return 403
Indeed, Glassdoor, ZipRecruiter and LinkedIn Jobs do not originate job data.
They aggregate it from company career pages, and those pages run on systems
that publish free, keyless, public APIs, because companies want their openings
indexed. Measured from a residential address on 2026-08-01, indeed.com/jobs,
glassdoor.com, ziprecruiter.com and upwork.com all answered 403 with
zero bytes, while these sources answered with real jobs.
Going to the source is also faster to notice. An aggregator shows you its last crawl. This shows you the board.
Notes
- Covers Greenhouse, Lever, Ashby, Workable, Recruitee, Rippling, Workday, Personio and SmartRecruiters. Watch a company by domain on the first six; the last three take an exact board, because on those a wrong guess is indistinguishable from a right one.
includeDescriptionis off by default because it is expensive at the source: Greenhouse returns 111 KB for a board without descriptions and 1.97 MB with them. Rippling's board API has no descriptions at any setting.- Roles are matched by the ATS's own job id, so a retitled posting is not reported as a new one.
- Errors are per board. One unreachable company does not end the run, and error rows are not charged.
- Just want the current board: ATS Jobs Scraper. Just want to know which system a company runs: Hiring Tech Stack Detector.