Greenhouse Jobs Scraper — Any Company Board avatar

Greenhouse Jobs Scraper — Any Company Board

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Greenhouse Jobs Scraper — Any Company Board

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

DevilScrapes

Maintained by Community

Actor 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 / 5xx and 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

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
boardTokensarrayyes['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']noNoneCase-insensitive substring match against any entry in departments[].name.
locationFilter['string', 'null']noNoneCase-insensitive substring match against location.name.
remoteOnlybooleannoFalseKeep only jobs whose heuristic remote flag is true.
maxItemsintegerno500Cap total rows emitted across ALL boards combined in the run, applied after filtering.
proxyConfigurationobjectno{'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.

FieldTypeNotes
job_idintegerList item id.
companystringNormalized input board token (not company_name).
company_name['string', 'null']List item company_name, direct passthrough.
titlestringList item title.
department['string', 'null']First entry's name in departments[]; null when empty.
location['string', 'null']Raw location.name string, verbatim.
remotebooleanHeuristic remote flag (location/office name contains "remote").
absolute_urlstringList item absolute_url, verbatim.
posted_at['string', 'null']List item first_published, parsed ISO-8601.
updated_atstringList 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_atstringWall-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:

EventUSDWhat it is
actor-start$0.005One-off warm-up charge per run
result$0.0015Per 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.