# Greenhouse jobs scraper and job change monitor

> Greenhouse jobs scraper for boards you know. Export open jobs, get one job's details, or compare snapshots to see new, updated and removed jobs.

URL: https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/

Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/greenhouse-jobs-monitor-scraper?fpr=cliqto

Add the Greenhouse boards of companies you follow. Get their open jobs as clean rows. Run it again later and see which jobs are new, updated or gone.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `snapshot` in Mode. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Scrape public jobs from Greenhouse boards you already know. Export a current snapshot, fetch exact job details, or compare two snapshots to find changes.





## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Greenhouse job result | $0.00024 (from $0.00019 on paid Apify plans) | One useful Greenhouse job or verified monitoring change saved to Dataset. |
| Start fee | $0.0014 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |

- One job: about $0.0016.
- 1,000 jobs: about $0.24.
- Every day 100 jobs, for 30 days: about $0.76 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/greenhouse-jobs-monitor-scraper?fpr=cliqto

## Questions

### Do I need a Greenhouse account or API key?

No. The tool uses the public Greenhouse job board endpoints. It never sends job applications.

### Can it find every company that uses Greenhouse?

No. You must know the board token or board URL of each company.

### How do I see only new or removed jobs?

Use monitor mode. Give it the snapshot store ID from an earlier run.

### Does it work with EU Greenhouse boards?

Yes. It accepts US and EU Greenhouse board URLs and plain board tokens.

## Data fields

- `schemaVersion` (integer)
- `recordType` (string)
- `stableId` (string)
- `boardToken` (string)
- `boardRegion` (string)
- `jobId` (string)
- `internalJobId` (string)
- `requisitionId` (string)
- `title` (string)
- `location` (object)
- `departments` (array)
- `offices` (array)
- `metadata` (array)
- `language` (string)
- `absoluteUrl` (string)
- `greenhouseUrl` (string)
- `firstPublishedAt` (string)
- `updatedAt` (string)
- `contentHtml` (string)
- `contentText` (string)
- `questions` (object)
- `payRanges` (array)
- `retrievedAt` (string)
- `changeStatus` (string)
- `matchTransition` (string)
- `changedFields` (array)
- `previousHash` (string)
- `currentHash` (string)
- `observedRemovedAt` (string)
- `sourceEvidence` (object)

## Input settings

- `mode` (string, required): Snapshot lists current jobs; details fetches exact board/job pairs; monitor compares an explicit prior KVS snapshot.
- `boards` (array): For snapshot/monitor. Accepts up to 100 tokens or current/legacy US/EU Greenhouse board URLs.
- `jobs` (array): For details mode. Use token/numeric-ID or an allowed Greenhouse job URL.
- `baselineKeyValueStoreId` (string): Monitor only. Read SNAPSHOT from a prior run; the prior store is never modified.
- `monitorOutput` (string): Emit only changes by default, or include unchanged comparable jobs as well.
- `includeContent` (boolean): Adds HTML and normalized text and increases response size.
- `includeQuestions` (boolean): Adds one detail request per job; no answers or applications are submitted.
- `includePayTransparency` (boolean): Adds one detail request per job; values exist only when the employer exposes them.
- `titleKeywords` (array): Keep jobs whose title contains at least one case-insensitive keyword.
- `contentKeywords` (array): Keep jobs whose description contains at least one case-insensitive keyword.
- `locations` (array): Keep jobs matching at least one case-insensitive location substring.
- `departments` (array): Keep jobs matching at least one case-insensitive department substring.
- `offices` (array): Keep jobs matching at least one case-insensitive office substring.
- `firstPublishedAfter` (string): ISO date or instant, inclusive.
- `updatedAfter` (string): ISO date or instant, inclusive.
- `maxJobsPerBoard` (integer): Stop output after this many matching jobs per board and report the board as partial.
- `maxJobsTotal` (integer): Stop output after this many matching jobs across the run and report omitted work.

## Tips

- Find the board token in the career page link, for example job-boards.greenhouse.io/figma.
- Leave job descriptions off on your first run. The output stays small and fast.
- Check RUN_SUMMARY after each run. It shows if a board was read in full.

## Limits

These bounds keep runs predictable. The Actor marks omitted work instead of claiming more coverage than it observed.

- Up to 100 boards per snapshot or monitor run.
- Up to 5,000 matching jobs per board.
- Up to 10,000 matching jobs per run.
- Up to 500 exact jobs in details mode.
- Four boards and eight detail requests can run concurrently.
- Description responses are capped at 64 MiB per board.
- Detail responses are capped at 2 MiB each.

## Sample result

```json
{
  "schemaVersion": 1,
  "recordType": "job",
  "stableId": "exampleco:1234567",
  "boardToken": "exampleco",
  "jobId": "1234567",
  "title": "Software Engineer",
  "location": { "name": "Remote" },
  "changeStatus": null,
  "changedFields": [],
  "updatedAt": "2026-09-10T09:30:00.000Z",
  "absoluteUrl": "https://example.invalid/jobs/1234567"
}
```

## Use it from code

Actor ID: `cliqtomedia/greenhouse-jobs-monitor-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/greenhouse-jobs-monitor-scraper").call(run_input={
    "mode": "snapshot",
    "monitorOutput": "changes_only"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~greenhouse-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "snapshot", "monitorOutput": "changes_only"}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/greenhouse-jobs-monitor-scraper")
result = tool.invoke({"run_input": {"mode": "snapshot", "monitorOutput": "changes_only"}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Reach out when the company is ready](https://cliqtomedia.com/actors/use-cases/buying-signals/): Know when a company hires, raises money or wins a contract. Reach out at the right moment.
- [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites.

## Similar tools

- [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/)
- [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/)
- [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/)
- [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/)
- [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/)
- [BambooHR Jobs Monitor & Scraper](https://cliqtomedia.com/actors/bamboohr-jobs-monitor-scraper/)
