Hiring Change Monitor avatar

Hiring Change Monitor

Pricing

from $20.00 / 1,000 company board checkeds

Go to Apify Store
Hiring Change Monitor

Hiring Change Monitor

Monitor public job boards powered by Lever and detect new, removed, updated, remote, salary, and hiring-trend changes between runs.

Pricing

from $20.00 / 1,000 company board checkeds

Rating

0.0

(0)

Developer

sakthi kumar

sakthi kumar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Categories

Share

Hiring Change Monitor — Lever Job Alerts

Track company hiring changes automatically. Detect new, removed, reopened and updated Lever jobs.

Unofficial tool. Not affiliated with or endorsed by Lever. Monitors publicly accessible Lever job boards.


What it does

Hiring Change Monitor watches public Lever career boards and, on every run, tells you only what changed since the last run:

  • NEW — a job that was not on the board before
  • REMOVED — a job that disappeared from the board
  • REOPENED — a job that was removed earlier and is now back
  • UPDATED — a job whose title, location, remote/workplace status, team/department, description, or salary range changed

The first run just records a baseline. Every run after that returns a clean, flat change feed — not the whole job list again.

A normal job scraper answers "what jobs are open?". This Actor answers "what changed?" — which is what you actually need for ongoing hiring, sales, and market intelligence.

Who it is for

  • Recruiters & staffing agencies — know the moment a target company opens or freezes a role
  • B2B sales & RevOps — hiring changes are buying signals; a new "VP RevOps" or a wave of AE hires is a trigger
  • Market & competitive intelligence — track headcount direction across a sector
  • Investors — hiring velocity as a soft growth signal for private companies

How monitoring works

  1. You provide a list of companies (Lever slugs or board URLs) and a stable Monitor ID.
  2. The Actor fetches each company's current public postings from Lever's Postings API.
  3. It compares them against the snapshot saved under that Monitor ID.
  4. It writes one row per change to the dataset and saves the new snapshot.

State is stored per user account + monitorId in a dedicated key-value store, so different monitors — and different Apify accounts — never see each other's baselines.

First run vs. next run

Output
First run (new Monitor ID)No change rows. One SUMMARY row per company with signal: BASELINE. The baseline is now stored.
Every later run (same Monitor ID)One row per NEW / REMOVED / REOPENED / UPDATED change, plus a SUMMARY row per company. Unchanged jobs produce nothing.

Run it on a schedule (hourly, daily, weekly) with the same Monitor ID and you get an incremental change log — old changes are never re-sent.

Output

One flat dataset. No nested objects. CSV / JSON / Excel friendly.

FieldDescription
companyLever company slug
change_typeNEW, REMOVED, REOPENED, UPDATED, SUMMARY, ERROR (and BASELINE / UNCHANGED in ALL_JOBS mode)
changed_fieldFor UPDATED: which field changed (title, location, remote_status, team, description, salary)
job_titleJob title
locationPrimary location
remote_statusLever workplace type (remote, hybrid, on-site, unspecified)
job_urlPublic Lever posting URL
previous_valuePrior value (for UPDATED) or prior open-job count (for SUMMARY)
current_valueNew value (for UPDATED) or a small JSON summary (for SUMMARY)
detected_atWhen this run observed the change (ISO 8601 UTC)
first_seen_atWhen the job was first seen on the board
last_seen_atWhen the job was last seen on the board

Output example

{ "company": "democo", "change_type": "NEW", "changed_field": "",
"job_title": "Sales Development Representative", "location": "London",
"remote_status": "hybrid", "job_url": "https://jobs.lever.co/democo/job-2000",
"previous_value": "", "current_value": "",
"detected_at": "2026-08-02T00:00:00+00:00",
"first_seen_at": "2026-08-02T00:00:00+00:00", "last_seen_at": "2026-08-02T00:00:00+00:00" }
{ "company": "democo", "change_type": "UPDATED", "changed_field": "salary",
"job_title": "Senior Backend Engineer", "location": "Munich", "remote_status": "hybrid",
"job_url": "https://jobs.lever.co/democo/job-1000",
"previous_value": "EUR 80000-100000", "current_value": "EUR 80000-110000",
"detected_at": "2026-08-02T00:00:00+00:00",
"first_seen_at": "2026-08-01T00:00:00+00:00", "last_seen_at": "2026-08-02T00:00:00+00:00" }
{ "company": "democo", "change_type": "REMOVED", "changed_field": "",
"job_title": "Product Designer", "location": "Remote - EU", "remote_status": "remote",
"job_url": "https://jobs.lever.co/democo/job-1001",
"previous_value": "", "current_value": "",
"detected_at": "2026-08-02T00:00:00+00:00",
"first_seen_at": "2026-08-01T00:00:00+00:00", "last_seen_at": "2026-08-01T00:00:00+00:00" }

Input

FieldRequiredDescription
companiesLever slugs ("spotify") or board URLs (https://jobs.lever.co/spotify). Up to 100 per run.
monitorIdStable name for this watch list. Reuse it on every scheduled run. Default "default".
outputModeCHANGES_ONLY (default) or ALL_JOBS (also emit a row per open job).
keywordsKeep only jobs matching at least one keyword (title / team / description).
excludeKeywordsDrop jobs matching any of these.
locationFilterKeep only jobs whose location matches one of these (substring, case-insensitive).
remoteOnlyKeep only remote postings.
maxJobsCap jobs tracked per company (0 = no limit).
salaryChangeThresholdPctIgnore salary changes below this %.
enableWebhook / webhookUrlPOST the result to an HTTPS endpoint after a successful run.

Schedule example

Apify Console → Schedules → new schedule:

  • Cron 0 */6 * * * (every 6 hours)
  • Input: your companies list + monitorId: "competitors"

Each run returns only the changes since the previous run six hours earlier.

API example

curl -X POST "https://api.apify.com/v2/acts/woolly_kingcrab~lever-hiring-change-monitor/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"companies": ["spotify", "https://jobs.lever.co/plaid"],
"monitorId": "fintech-watch",
"outputMode": "CHANGES_ONLY",
"keywords": ["engineer", "data"]
}'
# then read the change feed
curl "https://api.apify.com/v2/acts/woolly_kingcrab~lever-hiring-change-monitor/runs/last/dataset/items?token=$APIFY_TOKEN&format=csv"

Pricing

Pay per event — you only pay for what you check:

EventPrice
Actor start$0.00005 per run (Apify synthetic start price)
Company board checked$0.02 per company successfully checked

Example: 20 companies, once a day ≈ 20 × $0.02$0.40/day (~$12/month).

Failed companies (bad slug, 404, fetch error) are not charged.

Reliability

  • Uses Lever's public Postings API — no login, no cookies, no credentials, no proxies.
  • One bad company never fails the run — it becomes an ERROR row; the rest are processed and saved.
  • Handles bad slugs, empty boards, 404s, rate limits (429 with backoff), timeouts and malformed data.
  • Existing state is preserved for any company whose fetch failed.
  • Change events are de-duplicated — a change is reported once, not on every subsequent run.
  • Webhooks are HTTPS-only and reject private/local addresses.

Limitations

  • Lever only. Greenhouse / Ashby / Workday are not covered by this Actor.
  • Only public Lever boards. Private or password-protected boards are not accessible.
  • Salary data appears only when the company publishes it on Lever.
  • "Reopened" is based on job ID reuse within ~120 days; a board that re-creates a role with a new ID reports it as NEW.
  • Not affiliated with Lever; field availability depends on what each company publishes.

FAQ

Do I need a Lever account or API key? No. Only public data is used.

What if I change my company list? Add or remove freely. New companies get a baseline on their first appearance; removed companies simply stop being checked (their state is kept).

Will I get the same changes twice? No. Once a change is reported it is folded into the baseline.

Can two schedules share a Monitor ID? They can, but they'll share one baseline. Use a distinct monitorId per watch list.

How do I get a full current snapshot? Set outputMode: "ALL_JOBS".

Is this legal? It reads publicly available job postings. You are responsible for compliance with applicable laws and platform terms.


Unofficial tool. Not affiliated with or endorsed by Lever. Monitors publicly accessible Lever job boards.