Greenhouse Jobs Scraper — Any Company Board
Pricing
from $1.50 / 1,000 results
Greenhouse Jobs Scraper — Any Company Board
Scrape every open job posting from any Greenhouse-hosted company career board in one run. We normalize titles, departments, locations, remote signals, full HTML and plain-text descriptions, and best-effort salary snippets into one clean dataset across every board you track.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🎯 What this scrapes
Greenhouse (boards-api.greenhouse.io) is one of the most widely-adopted ATS platforms among VC-backed tech employers — Stripe, Airbnb, GitLab, Coinbase, Robinhood, Instacart, Pinterest, Lyft, Discord and more all run live Greenhouse boards today. This Actor is the Greenhouse specialist: richer per-job fields, department/location/remote filtering, full HTML+plain-text content extraction, and best-effort salary mining, sold on depth rather than the shallow multi-ATS breadth of multi-ats-jobs-scraper.
🔥 What we handle for you
- 🔁 Retries with exponential backoff on
408 / 429 / 5xxand network errors (2s start, doubling, 30s cap, 5 attempts) — one flaky board never stalls the rest of a bulk multi-board run. - 📋 Per-run status you can trust — every run reports exactly how many jobs were scraped, across how many boards, and how many tokens weren't found. No silent empty datasets.
- 🧩 One normalized schema across every company — raw Greenhouse responses vary wildly in which optional fields each employer populates; we flatten that into one consistent, Pydantic-validated row shape whether you're pulling from 1 board or 1,000.
- 🧊 Clean, typed dataset rows — ISO-8601 timestamps, stable job IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing — you only pay for job rows that land in your dataset. No data, no charge.
💡 Use cases
- Recruiter pipelines — track specific employers' Greenhouse boards for new openings by department or location.
- Hiring-intent signal — SDR/BD teams reading open reqs as a growth signal ahead of outbound.
- HR-tech and comp benchmarking — build a normalized Greenhouse coverage dataset across many companies at once.
- Remote-jobs aggregation — filter to heuristically-remote roles across every tracked board.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
boardTokens | array | yes | ['stripe', 'airbnb'] | Greenhouse board token, e.g. "stripe", or a full boards.greenhouse.io / job-boards.greenhouse.io board URL — both normal |
departmentFilter | ['string', 'null'] | no | None | Case-insensitive substring match against any entry in departments[].name. |
locationFilter | ['string', 'null'] | no | None | Case-insensitive substring match against location.name. |
remoteOnly | boolean | no | False | Keep only jobs whose heuristic remote flag is true. |
maxItems | integer | no | 500 | Cap total rows emitted across ALL boards combined in the run, applied after filtering. |
proxyConfiguration | object | no | {'useApifyProxy': True} | Apify Proxy configuration. No anti-bot signal observed on this target. |
Example input
{"boardTokens": ["stripe"],"departmentFilter": null,"locationFilter": null,"remoteOnly": false,"maxItems": 5,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
job_id | integer | List item id. |
company | string | Normalized input board token (not company_name). |
company_name | ['string', 'null'] | List item company_name, direct passthrough. |
title | string | List item title. |
department | ['string', 'null'] | First entry's name in departments[]; null when empty. |
location | ['string', 'null'] | Raw location.name string, verbatim. |
remote | boolean | Heuristic remote flag (location/office name contains "remote"). |
absolute_url | string | List item absolute_url, verbatim. |
posted_at | ['string', 'null'] | List item first_published, parsed ISO-8601. |
updated_at | string | List item updated_at, parsed ISO-8601. |
description_html | ['string', 'null'] | content, html.unescape()'d, tags kept. |
description_text | ['string', 'null'] | Same source, unescape()'d then tags stripped. |
salary | ['string', 'null'] | Best-effort regex/metadata match, never fabricated. |
scraped_at | string | Wall-clock time of row construction. |
Example output
{"job_id": 7954688,"company": "stripe","company_name": "Stripe","title": "Staff Software Engineer","department": "Engineering","location": "San Francisco, CA","remote": false,"absolute_url": "https://stripe.com/jobs/search?gh_jid=7954688","posted_at": "2026-07-01T09:00:00-04:00","updated_at": "2026-07-27T11:17:30-04:00","description_html": "<h2>Who we are</h2><p>...</p>","description_text": "Who we are\n...","salary": null,"scraped_at": "2026-07-29T12:00:00Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.005 | One-off warm-up charge per run |
result | $0.0015 | Per dataset item |
Example: 1 000 results at the rates above ≈ $1.50. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
remote is a best-effort heuristic (matches "remote" in the location or office name), not an authoritative Greenhouse field. salary is best-effort regex/metadata extraction and is frequently null. department and location are single free-text passthrough fields with no structured breakdown — Greenhouse itself provides none. Greenhouse-only; see the sibling ATS Actors for Lever, Ashby, Workday, and SmartRecruiters coverage.
❓ FAQ
Do I need a Greenhouse API key or login?
No — every request hits Greenhouse's own public board JSON endpoint (boards-api.greenhouse.io).
Where do I find a company's board token?
It's the path segment in https://boards.greenhouse.io/{token} (or job-boards.greenhouse.io/{token}) — you can also paste the full URL and we normalize it.
Why is salary null on most rows?
Greenhouse has no dedicated compensation field; we only surface a value when the posting text or metadata contains a clear match.
Does this replace multi-ats-jobs-scraper?
No — that Actor covers Greenhouse, Lever, and Ashby shallowly across three ATSes. This Actor is Greenhouse-only, deep: full descriptions, filters, and salary mining.
Why a Greenhouse-only Actor instead of a generic job-board scraper?
Job-board scraping is proven demand on the Apify Store — generic multi-source actors like fantastic-jobs have racked up 22.8k+ lifetime runs. That demand comes with a quality ceiling: generic coverage means shallow per-job fields. Going deep on one ATS lets us ship department/location/remote filtering, full HTML+plain-text descriptions, and salary mining that a jack-of-all-ATSes actor typically skips.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.