ATS Job Monitor — Greenhouse & Lever avatar

ATS Job Monitor — Greenhouse & Lever

Pricing

from $20.00 / 1,000 complete board scans

Go to Apify Store
ATS Job Monitor — Greenhouse & Lever

ATS Job Monitor — Greenhouse & Lever

Track new, updated and no-longer-listed jobs across Greenhouse and Lever boards. Persistent history, filters, salary fields and JSON/CSV exports.

Pricing

from $20.00 / 1,000 complete board scans

Rating

0.0

(0)

Developer

Dawid

Dawid

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Security

Limited permissions

Share

Turn public career boards into a repeatable hiring-change feed. Collect jobs from specified Greenhouse and Lever company boards, keep a baseline between runs and see what was first seen, added, updated or no longer listed. Export clean JSON and CSV for recruiting research, job-board feeds or hiring-signal workflows.

No login, candidate database, paid AI API or browser automation is required. The Actor reads the official public Job Board/Postings APIs. It does not apply to jobs, access applicant records or infer company growth from job counts.

Quick start

  1. Enter up to five public company board URLs. The prefilled example uses Figma on Greenhouse and Zoox on Lever.
  2. Set Monitor ID, e.g. my-hiring-watch. Reuse it on future runs in the same Apify account. Leave it unset for a one-off extraction.
  3. Run once to initialize the baseline. The first jobs are labelled first_seen, not “newly published”.
  4. Run again sequentially with the same Monitor ID to see new, updated, unchanged and no_longer_listed jobs.
  5. Download the full JSON report, Jobs CSV or Changes CSV from Output. Enable Return only changes for a smaller change feed.

To repeat automatically, create your own Apify task/schedule with these inputs. This Actor does not create schedules or send email/Slack messages. Platform webhooks can be configured separately in your account.

{
"boards": [
"https://job-boards.greenhouse.io/figma",
"https://jobs.lever.co/zoox"
],
"monitorId": "my-hiring-watch",
"onlyChanges": true,
"keywords": ["engineer", "data"],
"locations": ["remote", "poland"]
}

Supported sources

ProviderAccepted board inputAccess
Greenhousehttps://job-boards.greenhouse.io/company, https://boards.greenhouse.io/company, or greenhouse:companyOfficial public Job Board API.
Lever (global instance)https://jobs.lever.co/company or lever:companyOfficial public Postings API, with bounded pagination.

Use a company board, not an individual job URL. The company token must match the real board. Custom career domains, embedded board URLs, Lever EU, Ashby, Workday, LinkedIn, global keyword discovery and private boards are not supported in this release. No claims are made about platforms outside this table.

What you receive

Job rows include a stable id (provider:board:source_id), original source ID, company/board, title, locations, department/team, source employment/workplace type, source salary object when available, source dates, job/apply URL and description text. Descriptions are limited to 4,000 characters in reports/state; the fingerprint uses the full normalized text, so longer description changes are still detected.

Greenhouse does not provide a standard salary/workplace field in this endpoint, so these remain null; the Actor does not guess. Lever salary values are copied from the source as decimal strings with currency and interval, without currency conversion or annualization. Lever creation time is source_created_at, not a claim of publication time. Greenhouse source_published_at is used only when explicitly provided. Source timestamps may be null.

OutputContents
Default datasetrecord_type: job rows plus explicit error rows; a summary row is written when there are no visible rows.
OUTPUTSummary, per-board completeness/errors, counts before report filters, baseline status, warnings and visible job/change rows.
JOBS-CSVVisible current jobs and no-longer-listed records, including statuses, dates and changed fields.
CHANGES-CSVSame columns with unchanged jobs omitted; includes first observations.

CSV is UTF-8 with BOM. Nested values are JSON within cells. Formula-like text is escaped for spreadsheet use. CSV snapshots are suitable for Excel import; no native XLSX workbook is generated.

Change semantics and useful safeguards

  • first_seen: no previous complete baseline for this board. A job might already have been published long before you started monitoring.
  • new: source ID absent from the previous complete baseline and present now. This is new to your monitor, not proof of a new position or increased headcount.
  • updated: normalized content changed. changed_fields and previous_values explain the difference. Source update timestamps alone do not create an update event.
  • unchanged: same ID and content fingerprint; last-seen time advances.
  • no_longer_listed: ID absent from a later complete public API response. It does not prove the role was filled, cancelled or expired. Its last-seen time remains the last actual observation.

Each board has a separate baseline. HTTP failures, malformed responses, duplicate source IDs, known incomplete pages, size/job limits or spending-limit failures preserve the prior baseline instead of treating a board as empty. A genuinely successful complete empty response can mark previous jobs as no longer listed. Partial runs expose errors and completeness; if every board fails, the run fails after writing safe diagnostics.

Lever pagination is bounded and checked for duplicate IDs and exhaustion. The upstream API is not a transactional snapshot; rapidly changing boards during pagination can still affect observations. No extractor can establish hiring intent or global completeness from a public posting list.

Filters and persistent storage

keywords: up to 20 case-insensitive substrings, matched with OR against title/team/department. locations: up to 20 case-insensitive substrings, OR against source locations/country/workplace type. The two groups combine with AND. Updates also match previous values so a job changing out of a filter can still be reported.

Filters and onlyChanges affect reporting after comparison, not the saved scope. Changing a filter does not delete jobs from the baseline. Baselines only cover the boards you supplied; they do not discover new companies.

State lives in a named key-value store derived from Actor ID, initiating Apify user ID and Monitor ID. Different users/monitors are isolated by storage name. Retain the store to retain history; deleting it initializes a new first observation. resetBaseline: true explicitly resets only selected boards after successful delivery.

Run one instance of a Monitor ID at a time. Concurrent runs are unsupported. The Actor detects committed revision conflicts and avoids overwriting them, but this is not an atomic lock or compare-and-swap. Dataset, report and state writes are separate operations: a storage failure may leave delivered reports with an older/partially advanced baseline. Always check baseline_status before treating a run as a committed comparison. Retrying can repeat change rows; deduplicate downstream by stable job ID/change contents/run ID as appropriate.

Pricing and limits

$0.005 per Actor start + $0.02 per successfully completed board scan, with platform usage included and no per-job or per-change fee. One board normally costs $0.025; five boards cost $0.105 at the default memory allocation. The start event is charged once per started GB of RAM, minimum one; increasing RAM above 1 GB increases the start fee.

An empty but valid complete board scan is chargeable. Invalid or incomplete board fetches are not charged the board event. Runtime validation/network failures can still incur the start fee. Filters do not reduce the board fee because the complete board must be fetched to preserve the baseline. Apify spending limits are respected; unpaid scans are not delivered or committed. Check the live Pricing tab before running.

Limits: 1–5 unique boards per run; at most 1,000 jobs per board and 3,000 overall; at most 20 MiB per API response. Larger/incomplete boards are reported as errors rather than silently truncated. Greenhouse uses one API response; Lever uses up to 11 pages, including an exhaustion check. The collection phase has a 100-second deadline. Default allocation: 256 MiB RAM, 180-second platform timeout; the Actor has a 150-second application deadline.

Data and support

Only public job APIs are contacted, through fixed HTTPS hosts with no redirects. No external AI service, proxy subscription, account cookie, candidate contact or application-submission endpoint is used. Inputs, reports and baselines follow your Apify storage retention/access settings; you control their visibility. Descriptions can contain public contact information supplied by employers; process and share outputs appropriately.

For support, use the Actor Issues tab with a run ID, board URL and a minimal example of the problem. Do not include credentials or applicant data. This is a focused v1 product; source outages and posting-schema changes may require maintenance. Usage statistics and price comparisons in the repository research are not revenue forecasts.