Greenhouse Board Delta Feed avatar

Greenhouse Board Delta Feed

Pricing

from $5.00 / 1,000 board checks

Go to Apify Store
Greenhouse Board Delta Feed

Greenhouse Board Delta Feed

Track public Greenhouse job boards with persistent snapshots, added and updated roles, and removals confirmed across two successful checks. Pay per board check, not per job.

Pricing

from $5.00 / 1,000 board checks

Rating

0.0

(0)

Developer

Fumiya Hanzawa

Fumiya Hanzawa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Monitor known public Greenhouse job boards using the official Job Board GET API. Receive structured added, updated and removed roles across scheduled runs, with a predictable charge per complete board check. No browser, proxy, account credentials, paid external API or LLM is required.

Quick start

{"boards":["airbnb"],"stateKey":"my-hiring-watch"}

Supply 1–10 lowercase board tokens from public Greenhouse job-board URLs. This is not company discovery. The first run returns a baseline with all active jobs in added; it does not claim they were newly posted. Later runs compare job-post ID, title and location. A changed URL is not inferred from arbitrary redirects. We construct canonical Greenhouse job links and never follow links from the response.

Output and removal semantics

One Dataset row per successful board: board, status (baseline/changed/unchanged), activeJobs, added, updated (before/after), removed, pendingRemovalIds and checkedAt. Arrays contain IDs, titles, locations and canonical links. The summary is in OUTPUT; LAST_CHARGE records the latest charge confirmation. Removed means absent in two consecutive successful complete observations, not a confirmed hire or closed requisition. Missing jobs remain pending after the first observation. Reappearance clears pending. Errors never advance the snapshot or infer removal. Updated compares only title/location/link; descriptions, salaries, metadata and upstream updated_at timestamps are outside this MVP's comparison scope.

Up to 2,000 jobs and 4 MB decoded response per board. The source's meta.total must match the list length. Oversize, partial, malformed, redirected and failed responses fail the run, retain the previous snapshot, and produce an uncharged error row. Processing stops at the first source error; earlier successful boards remain billable. A complete empty response is a successful billable observation.

Pricing

  • board-check: $0.005 per complete successful board check, regardless of job count within the limits.
  • apify-actor-start: $0.00005 per started GB, minimum one event. Memory is fixed at 256 MB.
  • No Dataset-item event and no separate platform usage surcharge. Post-run storage/export may have plan costs.
  • Set Console maximum charge or API maxTotalChargeUsd. $0.00505 covers one board and one start.

Dataset is saved before charging; snapshot is updated only after confirmed charging. There is no charge for failed source checks, but the start charge remains. A limit prevents further board requests; it is per run, not per month. SDK charging uses its idempotency mechanism. Storage and charge are not atomic: interruption can leave a saved uncharged row or a charged row before its snapshot update. A resurrected run is rejected to avoid repeating charges. A new run is a separate billable observation.

Scheduling and retention

Do not run the same stateKey concurrently in one account. Serialize integrations and schedules; use different keys for independent monitors. A daily schedule normally suits hiring changes; no schedule is created automatically. Named greenhouse-delta-<stateKey> storage retains accepted compact snapshots and pending-removal IDs until you delete it. Removing a board from input does not delete its saved snapshot. Dataset diffs and default stores follow your plan's retention; named stores persist. Manage deletion yourself and review retention at least every 30 days. No destructive automatic retention job is installed.

To delete: stop schedules and active runs, verify the matching named KVS, delete it in Console Storage; delete each associated Dataset and default KVS separately, plus obsolete runs/logs and downstream exports. The next run starts a new baseline. Do not resurrect old runs after deleting their PROCESSING_STARTED marker. Use authenticated DELETE /v2/key-value-stores/{id}, /v2/datasets/{id} for verified storage IDs in your automation. Protect storage with restricted access; Actor visibility is separate from storage visibility.

Safety, rights and limitations

Only fixed-origin HTTPS requests to boards-api.greenhouse.io are made. Arbitrary URLs, credentials, redirects, login/CAPTCHA/access-control bypass and application submissions are unsupported. Tokens are board identifiers, not API secrets. We do not request content=true, applicant fields, candidate data or personal contact metadata. Only job ID/title/location/canonical link are retained; do not target boards that place personal or confidential information in these public fields. No job content is sent to an LLM or another enrichment provider.

Users are responsible for source rights, terms, robots policies and reasonable frequency. Public API access is not a blanket license to republish job data. We do not claim fully automated legal/robots compliance. Normal use needs no operator approval per board; serious source/security exceptions require human review. API changes and temporary missing jobs can still affect results. No completeness beyond the validated source response and no hiring-outcome accuracy is promised. This is not an official Greenhouse product.

Official source API

API and agents

Use Apify Actor run API with this input schema and retrieve OUTPUT/Dataset via the output schema links. The same bounded inputs can be used through Apify's Actor MCP integration; no custom MCP server or Standby process is required. API execution is tested; MCP-client execution is not separately certified.

Development

Python 3.12, Apify SDK 4.0.2. Run python -m board_delta or apify run in this directory. Offline tests: from workspace root, set PYTHONPATH=second_actor and run pytest second_actor/tests.