Greenhouse Jobs Scraper & Change Monitor
Pricing
from $0.68 / 1,000 verified job records
Greenhouse Jobs Scraper & Change Monitor
Export Greenhouse jobs with descriptions, locations and apply links. Track new jobs by company and filters, with stable keys for spreadsheets and automation.
Turn the Greenhouse career pages you follow into a useful job export and a repeatable hiring watch list.
Get current roles with full descriptions, departments and apply links; read selected job details; or compare a saved list for new, updated and safely closed postings.
🚀 Start in 60 seconds
- Keep Collect company jobs and enter one company board slug, such as
airbnb. - Start with 100 jobs and inspect both job rows and coverage.
- Export the Dataset as CSV, JSON or Excel.
{"companyBoards":["airbnb"],"maxJobs":100}
🎯 Choose the right workflow
Collect company jobs returns current matching postings across your selected boards. Read selected job details accepts a public Greenhouse job URL or board/job-id and ignores company-board filters. Monitor hiring changes delivers current matching jobs plus NEW, UPDATED, CLOSED or LEFT_FILTER change records from sequential runs of the same watch list.
The first monitor run seeds a baseline by default and returns job rows without change rows. Choose Return current jobs as new to receive NEW change rows for that initial set too. Every checked and delivered job is billed, including unchanged jobs. NEW and UPDATED change rows are included without another charge; verified CLOSED and LEFT_FILTER observations are billed as absences.
📦 What you get
Job rows include job ID, company board and name, title, source location, departments, offices, description HTML and plain text, publication/update dates and apply links. Source metadata remains nullable. Optional public application-question definitions and pay ranges can be included; no applicant data is collected.
Change rows add changeKind, changeId and the previous observation fingerprint. A CLOSED event means the posting disappeared from a complete checked board; it does not establish that someone was hired. LEFT_FILTER means the job still exists on the checked board but no longer matches your filters. A job entering your watch list is NEW, which can include an older posting newly matching the filter. CLOSED and LEFT_FILTER rows retain earlier identity and summary fields; long descriptions, questions, metadata and pay ranges are null in those rows.
Every Dataset contains a recordType column: job, change or coverage. The table view contains all row types, so downstream workflows should filter on that column.

🎛️ Input guide
Use up to 50 Greenhouse company board URLs or slugs. Regional EU boards use their EU board URL or eu:company. This tool discovers jobs inside known boards; it does not discover every employer on Greenhouse.
Combine department, source-location, keyword and inclusive publication-date filters. Keywords match title or description literally, not semantically. The remote toggle only matches the word remote in the location label. Details mode reads exactly the specified board-scoped job targets without those filters.
Repeat runs compare the current matching jobs with the saved watch list and return no change rows when nothing changed. For monitoring, keep the watch-list name, targets, filters and result limits unchanged. A change to those settings starts a separate baseline. Run one watch list sequentially; concurrent writes to the same watch list are not supported. Collect and details leave monitoring state unchanged.
💰 Pricing
Each verified collection costs $0.009, plus the price below for every checked and delivered current job or verified absence. A collection fee applies once per run that verifies at least one requested board or job, including confirmed empty results.
| Your Apify pricing tier | Per job or absence | Collection with 100 jobs |
|---|---|---|
| Free | $0.0018 | $0.189 |
| Bronze | $0.00135 | $0.144 |
| Silver | $0.0009 | $0.099 |
| Gold | $0.000675 | $0.0765 |
The table covers the four standard discount tiers. This Actor currently uses the Gold rate for Platinum and Diamond as well; no separate enterprise discount is offered. Check the active Apify pricing panel for your account.
Unchanged jobs and the initial baseline are paid verified information. NEW and UPDATED rows are included in the corresponding current-job charge. CLOSED and LEFT_FILTER are paid verified absence records; a job cannot be billed as both current and absent in one comparison. Coverage rows are free. A fully failed or blocked collection is free. Source-published optional details are included in the job price.
Set the input spending limit and the Apify run limit. The Actor refuses work when the configured maximum current jobs plus possible absences from the saved baseline could exceed either limit. Included NEW/UPDATED rows can make the Dataset larger than its paid record count.
✅ Coverage you can trust
COMPLETE or EMPTY_CONFIRMED means the requested board was verified and the matching result was fully checked. CAPPED means a result limit was reached. FAILED means a source could not be verified; NOT_VISITED means the run limit prevented visiting it. The summary reports PARTIAL when verified and failed targets coexist.
No closures are inferred from capped, failed or unvisited boards. Those boards keep earlier unseen baseline entries. Missing optional fields stay null, never fabricated. A board changes over time; results are not an atomic snapshot of all employers.
🔌 API and automation
Use your Apify credentials to run the Actor and export its Dataset to a spreadsheet, database or job board. Filter by recordType. Keep stableId as your job key and changeId as your change-event key. Recovery must use the original interrupted run when a paid delivery is unresolved; starting a new run against that watch list fails safely.
For a future n8n workflow, run this saved watch list on a schedule, fetch the Dataset, and select recordType = change with changeKind = NEW. Upsert the current job table by stableId and an event-history table by changeId. These keys make reprocessing the same successful run safe. This Actor does not create or activate an n8n workflow for you.
{"workflow": "monitor","companyBoards": ["airbnb", "stripe"],"keywords": ["engineer"],"location": "Remote","maxJobs": 500,"maxJobsPerBoard": 500,"stateNamespace": "remote-engineering","firstRunBehavior": "seed_only"}
⚠️ Not yet supported
Recorded source checks cover Airbnb, Stripe and GitLab, plus the EU-hosted Overstory board. Coverage is board-specific; this is not a guarantee for every employer. There is no global employer index, application submission, private hiring pipeline, candidate information, salary inference or AI classification.
Limits are 50 targets, 10,000 current jobs and 10,000 saved identities, plus a collection budget of up to 60 seconds. Delivery and shutdown take additional time. Large or detail-heavy requests can return honest partial coverage; inspect it before relying on absence. Requested detail failure makes that target untrusted and free. Very large descriptions or exports can reach a size limit and return incomplete coverage; no content is silently truncated.
❓ FAQ and support
Why did a job disappear without a CLOSED event? A capped or partial comparison cannot prove closure. Use a narrower complete watch list.
Where is the salary? Only source-published pay transparency is returned when requested. Absence is null, not an estimate.
How do I report a problem? Open an issue with the public board URL, your input and run ID. Do not include credentials or applicant information.