# Greenhouse Jobs Scraper: Hiring Change Feed (`getascraper/greenhouse-requisition-monitor`) Actor

Monitor public Greenhouse job boards for new, updated, reappeared, and closed roles. Export source-linked jobs to Apify schedules, webhooks, and hiring-intelligence workflows without maintaining a custom API integration.

- **URL**: https://apify.com/getascraper/greenhouse-requisition-monitor.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.52 / 1,000 requisitions

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🌱 Greenhouse jobs scraper

<table width="100%" style="display:table;width:100%;min-width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed">
<tr>
<td style="padding:24px 28px;background:#EFFAF7;border:1px solid #B7E4D8;border-top:4px solid #047857;border-radius:12px">
<span style="display:block;font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">🔎 See public Greenhouse hiring changes in one place.</span>
<span style="display:block;margin-top:10px;font-size:15px;color:#57534E;line-height:1.6">Collect current public listings, keep each row tied to its source, and make the next hiring decision with a clean, repeatable feed. Work only from pages that anyone can normally view.</span>

</td>
</tr>
</table>

<table width="100%" style="display:table;width:100%;min-width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed">
<tr>
<td style="padding:16px 14px;width:25%;background:#FFFFFF;border:1px solid #B7E4D8;border-top:3px solid #047857;border-radius:10px 0 0 10px;vertical-align:top"><span style="display:block;font-size:15px;font-weight:800;color:#065F46;line-height:1.3">🧭 Focused sources</span><span style="display:block;margin-top:8px;font-size:12px;color:#57534E;line-height:1.5">Use ordinary public company and careers pages.</span></td>
<td style="padding:16px 14px;width:25%;background:#FFFFFF;border:1px solid #B7E4D8;border-top:3px solid #047857;border-left:none;vertical-align:top"><span style="display:block;font-size:15px;font-weight:800;color:#065F46;line-height:1.3">🔔 Meaningful changes</span><span style="display:block;margin-top:8px;font-size:12px;color:#57534E;line-height:1.5">Separate new, updated, returning, and closed roles.</span></td>
<td style="padding:16px 14px;width:25%;background:#FFFFFF;border:1px solid #B7E4D8;border-top:3px solid #047857;border-left:none;vertical-align:top"><span style="display:block;font-size:15px;font-weight:800;color:#065F46;line-height:1.3">🔗 Source context</span><span style="display:block;margin-top:8px;font-size:12px;color:#57534E;line-height:1.5">Keep the original job link beside every record.</span></td>
<td style="padding:16px 14px;width:25%;background:#FFFFFF;border:1px solid #B7E4D8;border-top:3px solid #047857;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="display:block;font-size:15px;font-weight:800;color:#065F46;line-height:1.3">📅 Ready to repeat</span><span style="display:block;margin-top:8px;font-size:12px;color:#57534E;line-height:1.5">Run once for research or on a schedule for monitoring.</span></td>
</tr>
</table>

### 🎯 Turn public hiring activity into a useful signal

Follow public Greenhouse boards for new roles, updated requisitions, returning listings, and confirmed closures. Each record stays connected to the public listing so a recruiter, analyst, or operations team can verify the context before acting.

#### Who gets value

- **I am a talent intelligence analyst** looking to turn a target-company watchlist into an evidence-backed hiring feed.
- **I am a recruiting operations lead** looking to keep a clean, current feed of roles without checking company sites by hand.
- **I am a research analyst** looking to compare hiring signals across a defined company list.

### ⚡ Get results in three steps

Start with a small public source to confirm the output fits your workflow. Repeat the same setup on an Apify schedule when you need ongoing visibility.

<table width="100%" style="display:table;width:100%;min-width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed">
<tr>
<td style="padding:16px 14px;width:33.333%;background:#EFFAF7;border:1px solid #B7E4D8;border-radius:10px 0 0 10px;vertical-align:top"><span style="display:block;font-size:12px;font-weight:800;color:#047857;letter-spacing:1px">STEP 1</span><span style="display:block;margin-top:6px;font-size:14px;font-weight:700;color:#1C1917;line-height:1.35">Add sources</span><span style="display:block;margin-top:6px;font-size:12px;color:#57534E;line-height:1.5">Paste Greenhouse board names or supported public board links or select your filters.</span></td>
<td style="padding:16px 14px;width:33.333%;background:#EFFAF7;border:1px solid #B7E4D8;border-left:none;vertical-align:top"><span style="display:block;font-size:12px;font-weight:800;color:#047857;letter-spacing:1px">STEP 2</span><span style="display:block;margin-top:6px;font-size:14px;font-weight:700;color:#1C1917;line-height:1.35">Choose the view</span><span style="display:block;margin-top:6px;font-size:12px;color:#57534E;line-height:1.5">Collect a current snapshot or focus on changes.</span></td>
<td style="padding:16px 14px;width:33.333%;background:#EFFAF7;border:1px solid #B7E4D8;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="display:block;font-size:12px;font-weight:800;color:#047857;letter-spacing:1px">STEP 3</span><span style="display:block;margin-top:6px;font-size:14px;font-weight:700;color:#1C1917;line-height:1.35">Use the feed</span><span style="display:block;margin-top:6px;font-size:12px;color:#57534E;line-height:1.5">Send source-linked records into your existing process.</span></td>
</tr>
</table>

### 🧩 Configure your run

The first setting identifies the public sources you want to follow. The remaining settings let you balance detail, scope, and the amount of history returned.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `boardTokens` | List of text | No | Public company board names or supported board links to check. |
| `includeContent` | Yes or no | No | Include the full public job description when it is available. |
| `maxItems` | Number | No | Maximum records returned across every board. |
| `outputMode` | Choice | No | Return all current roles or only roles with a change event. |
| `stateName` | Text | No | Name the saved comparison history for this watchlist. |
| `maxPages` | Number | No | Limit the number of configured boards checked in one run. |
| `requestTimeoutMs` | Number | No | Maximum wait for one public source response. |
| `maxRetries` | Number | No | Retries for temporary availability problems. |

### 📦 Use the data immediately

Every result is a structured record with the original public source retained for review. Choose a full view for a current snapshot or a change-focused view for downstream actions.

| Field | Type | Description |
| --- | --- | --- |
| `event` | Text | New, updated, reappeared, or closed status when a change is found. |
| `title` | Text | Public role title. |
| `location` | Text or null | Listed work location. |
| `departments` | List | Public department labels. |
| `offices` | List | Public office labels. |
| `jobId` | Text | Source job identifier. |
| `requisitionId` | Text or null | Public requisition reference when available. |
| `url` | Link | Original public job page. |
| `firstPublishedAt` | Date and time | First time the role appeared in this comparison history. |
| `updatedAt` | Date and time or null | Source update time when available. |
| `closedAt` | Date and time or null | Time a confirmed closure was recorded. |
| `observedAt` | Date and time | Time this Actor observed the role. |
| `scanComplete` | Yes or no | Whether the source check was complete enough for lifecycle comparison. |
| `source` | Text | Public source family used for the record. |

### 💳 Understand your run cost

Review the current pricing shown in the Apify Store before you scale a scheduled workflow. Begin with a small public source so you can confirm the records match your criteria.

### ⭐ Enjoying Greenhouse jobs scraper?

After a successful run, rate the Actor based on the usefulness and clarity of the records. Your feedback helps improve the next release for teams with the same workflow.

<table width="100%" style="display:table;width:100%;min-width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed">
<tr>
<td style="padding:20px 24px 14px;background:#EFFAF7;border:1px solid #B7E4D8;border-left:5px solid #047857;border-radius:10px 10px 0 0">
<span style="display:block;font-size:20px;letter-spacing:4px;color:#F59E0B">⭐ ⭐ ⭐ ⭐ ⭐</span>
<span style="display:block;margin-top:8px;font-size:17px;font-weight:800;color:#1C1917;line-height:1.35">Rate this Actor if it helped you spot hiring changes faster.</span>
<span style="display:block;margin-top:8px;font-size:14px;color:#57534E;line-height:1.5">Your feedback helps talent teams discover a reliable public hiring feed.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#047857;border:1px solid #B7E4D8;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/greenhouse-requisition-monitor/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ Frequently asked questions

These answers cover the safest way to get a reliable first result. Use a separate saved state for each independent watchlist or client workflow.

#### Can I start with a normal public source link?

Yes. Paste the public source described in the input form, then use the available filters to narrow the collection.

#### Can I use this for recurring monitoring?

Yes. Run it on an Apify schedule and choose the change-focused output when you only need records that have meaningfully changed.

#### How are closed roles handled?

A role is only treated as closed after complete checks confirm that it is no longer present. This reduces false closure events caused by incomplete source results.

#### Do I need access to the employer system?

No. This Actor is designed for publicly available listings and does not request employer, applicant, or account access.

### 🛡️ Use public information responsibly

Use the records for legitimate hiring research, workforce planning, and internal operations. Respect the source’s terms and intended use, minimize retention, and do not use the data to make sensitive decisions about individuals.

### 🔗 Other actors

These adjacent Actors cover public hiring sources that teams often track alongside this one. Choose the source that matches the company’s careers platform.

- [🏥 NHS jobs scraper](https://apify.com/getascraper/nhs-trust-vacancy-monitor)
- [🎯 SmartRecruiters jobs scraper](https://apify.com/getascraper/smartrecruiters-jobs-monitor)
- [🗂️ Workday jobs scraper](https://apify.com/getascraper/workday-tenant-jobs-monitor)
- [🧲 Lever jobs scraper](https://apify.com/getascraper/lever-jobs-monitor)
- [🇨🇦 Job Bank Canada scraper](https://apify.com/getascraper/jobbank-scraper)

# Actor input Schema

## `boardTokens` (type: `array`):

Public Greenhouse board tokens or supported board URLs to monitor.

## `includeContent` (type: `boolean`):

Keep the source job description HTML when Greenhouse provides it.

## `maxItems` (type: `integer`):

Maximum records returned across all boards. Set to 0 only when you explicitly want every available role.

## `outputMode` (type: `string`):

Choose all active records or only records with a change event.

## `stateName` (type: `string`):

Stable name for the saved comparison history. Use a different name for separate monitoring streams.

## `maxPages` (type: `integer`):

Maximum configured Greenhouse boards fetched in one run. Set to 0 to remove this explicit safety cap.

## `requestTimeoutMs` (type: `integer`):

Timeout for each public source request in milliseconds.

## `maxRetries` (type: `integer`):

Retries for temporary timeouts, rate limits, and server errors.

## Actor input object example

```json
{
  "boardTokens": [
    "reddit"
  ],
  "includeContent": true,
  "maxItems": 25,
  "outputMode": "full",
  "stateName": "greenhouse-default",
  "maxPages": 10,
  "requestTimeoutMs": 20000,
  "maxRetries": 3
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "boardTokens": [
        "reddit"
    ],
    "includeContent": true,
    "maxItems": 25,
    "outputMode": "full",
    "stateName": "greenhouse-default",
    "maxPages": 10,
    "requestTimeoutMs": 20000,
    "maxRetries": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/greenhouse-requisition-monitor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "boardTokens": ["reddit"],
    "includeContent": True,
    "maxItems": 25,
    "outputMode": "full",
    "stateName": "greenhouse-default",
    "maxPages": 10,
    "requestTimeoutMs": 20000,
    "maxRetries": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/greenhouse-requisition-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "boardTokens": [
    "reddit"
  ],
  "includeContent": true,
  "maxItems": 25,
  "outputMode": "full",
  "stateName": "greenhouse-default",
  "maxPages": 10,
  "requestTimeoutMs": 20000,
  "maxRetries": 3
}' |
apify call getascraper/greenhouse-requisition-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=getascraper/greenhouse-requisition-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/swmHW2eGPxzcviIM3/builds/5aEclxpwEvY4HGZXK/openapi.json
