Greenhouse Jobs Tracker: Export & Change Log avatar

Greenhouse Jobs Tracker: Export & Change Log

Pricing

$0.05 / complete watchlist

Go to Apify Store
Greenhouse Jobs Tracker: Export & Change Log

Greenhouse Jobs Tracker: Export & Change Log

Track job listings across up to 20 Greenhouse company boards. Get CSV/JSON exports plus a log of first-observed, edited and no-longer-listed postings using your previous snapshot. $0.05 per completed watchlist.

Pricing

$0.05 / complete watchlist

Rating

0.0

(0)

Developer

Victor Hugo Bernardo da Costa

Victor Hugo Bernardo da Costa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Enter up to 20 Greenhouse board names and get a clean CSV/JSON of their current job listings, plus a log of what changed since your last check. Built for recruiting teams, job aggregators and researchers who already know which companies they want to follow.

Example export

Three rows from this Actor's real Airbnb export on 8 October 2026. These are historical sample records; current availability may differ.

boardtitlelocationurl
airbnbSenior Staff Machine Learning Engineer, Data & EvalUnited StatesView listing
airbnbSupport Specialist, PremiumCanadaView listing
airbnbSenior Staff Data Scientist, Guest & Host Marketplace AIRemoteView listing

Quick start

  1. Open the ready-made Airbnb example, or enter 1–20 company board identifiers in boardSlugs (for example, airbnb). An Apify account is enough; no separate installation or n8n account is required.
  2. Check the active price and maximum charge, then start the Actor. Require run status SUCCEEDED and SUMMARY.complete: true before using its outputs.
  3. Open the Jobs dataset or download JOBS.csv / JOBS.json from the run's storage. Your first export is ready.

US$0.05 per completed watchlist of 1–20 boards, including run processing. Valid empty or unchanged completed checks also count. This is an independent tool, with no affiliation to Airbnb or Greenhouse.

What you receive

  • Current job listings with board, title, location and original job URL.
  • CSV/JSON exports for a job feed, spreadsheet, recruiting workflow or hiring-data research.
  • Coverage information in SUMMARY.
  • A change log when comparing observations; setup is described below.

This Greenhouse job scraper checks the company careers pages you select. It does not discover companies, access applicant records or submit applications. If you already handle exports and history yourself, Greenhouse's public API may be sufficient.

Advanced: tracking changes

Each run checks your boards once. To compare against the last check, save the full SNAPSHOT output and pass it as previousSnapshot with the same board list on your next run. History and alerts are not managed automatically by this Actor.

The first successful observation is a baseline. A new event means first observed, rather than proof that a role was just published. A noLongerListed event requires two valid absences and does not prove that a role was filled.

Example change sequence

Illustrative sequence below; these are explanations, not live job records or customer results. Every comparison passes the last complete snapshot for the same board list.

ObservationWhat the board showsOutput interpretation
First checkPosts A and BBaseline. Both have new events with baseline: true; neither is claimed to be newly published.
Second checkA, B and a first-observed post CC has new with baseline: false. A and B generate no events if unchanged.
Third checkA and C; B absentB is missing once. No confirmed-disappearance event yet.
Fourth checkA and C; B still absentB has noLongerListed; this does not establish whether the role was filled.

Input

FieldRequiredMeaning
boardSlugsYesBetween 1 and 20 Greenhouse board identifiers. Supply identifiers, not entire careers-page URLs.
previousSnapshotNoThe full JSON object returned as SNAPSHOT by the previous run in this watchlist sequence. Omit it to start a new baseline.

For a board URL such as https://job-boards.greenhouse.io/your-company, the identifier is your-company. Replace the placeholder below with a real public board identifier:

{
"boardSlugs": ["your-company"]
}

For a later run, use the same board set and add previousSnapshot with the complete downloaded object. Do not substitute a run ID, URL, path, null or abbreviated object. Do not edit timestamps or job entries in the snapshot. A new watchlist needs a new baseline. Snapshots are caller-supplied, unsigned data: validation checks structure and consistency, not authenticity or origin.

Outputs

OutputContents
Default datasetJobs successfully observed in this run.
JOBS.json / JOBS.csvCurrent-job exports.
CHANGES.json / CHANGES.csvObserved changes relative to the supplied snapshot.
SNAPSHOTHistory to pass into the next run.
SUMMARYCoverage and processing summary. Require run status SUCCEEDED and SUMMARY.complete: true before consuming any output.
BILLINGWhen paid pricing is enabled, the completion-charge acknowledgement. An unknown or pending status needs investigation before any further payment action.

Current-job rows contain:

FieldMeaning
boardBoard identifier supplied in the input.
jobKeyStable key combining the board and job-post identifier.
idJob-post identifier from Greenhouse.
titleJob title supplied by the board.
locationLocation text supplied by the board; not a verified work-eligibility or remote-work classification.
urlLink to the job post.
sourceUrlSource used to obtain the listing.
sourceUpdatedAtValid update timestamp required from the source. It is not interpreted as a publication date; a missing or invalid value rejects the board response.
observedAtWhen this run observed the listing.

Change rows add eventId, eventType, baseline, firstSeenAt, lastSeenAt, changedFields and previous. The previous value contains the earlier row when relevant; changedFields lists the tracked fields that differ.

Reading the change log

eventTypeInterpretation
new, baseline: trueFirst valid observation for this board. These jobs may have existed before monitoring began.
new, baseline: falseA job-post identifier first observed after this board's baseline.
changedTracked fields differ from the earlier observation.
noLongerListedA previously observed post was absent from two valid observations. This does not establish why it disappeared or whether the role was filled.
reappearedA post marked no longer listed appeared again. If its fields also changed, the same event includes those changes.

The first successful run produces a baseline and new events with baseline: true. An unchanged valid observation produces no change events for that board. If the first run fails, start a fresh run without adopting its output as a baseline.

For noLongerListed, the job details are the last known listing facts. observedAt is the time the absence was confirmed; lastSeenAt is the last observation in which the post was present. None of these timestamps establishes the original publication or closing time.

Repeated monitoring

Each run is a single check. To monitor repeatedly, your workflow must retrieve SNAPSHOT, store it durably, then supply it as previousSnapshot to the next run. Require both run status SUCCEEDED and SUMMARY.complete: true before replacing your saved snapshot.

Run one sequence at a time for a watchlist. Concurrent runs from the same previous snapshot create separate branches of history. A schedule that repeatedly submits a fixed input does not advance the snapshot automatically. The Actor does not send email, WhatsApp, Slack or other notifications.

Coverage and failure handling

The Actor requires every requested board to be fully verified. If any board fails or returns an invalid/incomplete response, the whole run is rejected before a new dataset or snapshot is published. Keep your last successful snapshot. An error is not treated as an empty board or a missing job.

Storage writes across files and the dataset are not a single platform transaction. If a run is interrupted during output writing, partial files may remain. Disregard them unless the run is SUCCEEDED and SUMMARY.complete is true. Start a new run with the last valid snapshot; do not resurrect an interrupted partial run. The adapter rejects resuming an incomplete write sequence.

The Actor supports a bounded history rather than an unlimited archive. It accepts at most 10,000 historical jobs globally and 5 MiB of total JSON input, including boardSlugs and previousSnapshot. It also checks that the next snapshot fits a future input. These limits apply across the whole watchlist, not separately to each board. It does not silently trim history to fit. An invalid or incompatible snapshot must be corrected, or a new baseline started deliberately. Download any exports you need to keep first.

Use the supplied JOBS.csv and CHANGES.csv for spreadsheets: they escape cells that could otherwise be interpreted as formulas. JSON retains factual text. A CSV exported separately from the default dataset does not inherit this file-specific escaping.

Limitations

  • Greenhouse public boards only; no Lever, Ashby, Workday or private boards.
  • Only the board identifiers you supply; no global job search.
  • Tracked listing metadata only; no full job-description history, salary inference, applicant data or hiring-intent scoring.
  • Changes are observed between checks. Brief changes that occur and revert between checks may be missed.
  • Upstream errors or changes to the source API can affect coverage.
  • A disappeared post does not prove a filled, canceled or closed role.
  • No built-in scheduler, cross-run account storage, notification service or application submission.

Pricing and completed checks

The price is US$0.05 per completed run covering the full list of 1–20 boards. Check the Store's Pricing tab for the current price before you run the Actor.

The charge is one watchlist-completed event after every requested board and all outputs have been verified. A successful empty or unchanged watchlist still counts as a completed check. Failed collection or incomplete storage does not issue this event. The price covers the list, not each board or each job; it includes no separate Actor start or dataset-item fee.

The run's maximum charge must cover one completion event. A restart of an already completed run does not repeat collection or charging. If the payment acknowledgement is uncertain, the Actor preserves a BILLING marker and does not retry; contact the developer through the Actor's issue channel with the run ID before taking further payment action. Apify storage retention and any separate platform operations after the run are governed by your Apify plan and platform pricing.

Source and permitted use

Data comes from the Greenhouse Job Board API. Its GET endpoints expose public board data without authentication. Use results consistently with the source and job publisher's applicable terms and rights. Public availability should not be treated as a blanket license to republish third-party content. This is an independent tool and is not endorsed by Greenhouse.

Reporting a problem

Include the run ID, the affected board identifier, the expected result and the observed result. If history is relevant, provide a minimal reproducible example through an appropriate private channel. Never post an Apify token, account credentials or private workflow data in a public issue.