Greenhouse Jobs API: All Open Jobs from Any Greenhouse Board avatar

Greenhouse Jobs API: All Open Jobs from Any Greenhouse Board

Pricing

from $1.00 / 1,000 job results

Go to Apify Store
Greenhouse Jobs API: All Open Jobs from Any Greenhouse Board

Greenhouse Jobs API: All Open Jobs from Any Greenhouse Board

Every open job from any Greenhouse board via the official public Job Board API, with structured pay-transparency salary ranges, departments, offices, requisition IDs and custom fields. Filters and only-new mode. $1 per 1,000 jobs.

Pricing

from $1.00 / 1,000 job results

Rating

0.0

(0)

Developer

Andrew Shamah

Andrew Shamah

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Share

Get every open job from any company that hires through Greenhouse (Airbnb, Stripe, Discord, GitLab, Databricks, Figma, Reddit, Robinhood, Cloudflare and thousands more) in clean JSON, CSV or Excel. It reads Greenhouse's official, public Job Board API: no login, no browser, no proxies, so runs are fast and reliable.

What makes it more than a generic job scraper:

  • 💵 Structured pay ranges. Greenhouse stores US pay-transparency ranges as structured data. This Actor reads them for each job: min, max, currency and the zone title (for example "Zone 1 Pay Range" or "Toronto, ON"), so you get exact salary numbers, not a guess from the text. In our tests 50–100% of jobs at Airbnb, GitLab, Discord, Reddit and Robinhood had them.
  • 🏢 Departments and offices exactly as the company organizes them, plus each board's department breakdown in the run SUMMARY.
  • 🧾 Requisition ID, internal job ID and custom fields (e.g. "Workplace Type", "Employment Type", "Featured on Website"), application deadline and language.
  • 🔁 Only-new mode for daily alerts and ATS monitoring.

Price: $1 per 1,000 jobs ($0.001 per job returned), plus a tiny start fee. Boards that fail are listed as free error rows, and you never pay for jobs your filters drop.

Who uses it

  • Job boards and aggregators: keep listings for hundreds of Greenhouse companies fresh with a daily schedule and onlyNew.
  • Recruiters and sales teams: see who is hiring for which roles (hiring signals for outbound).
  • Job seekers: get alerts for new roles at your target companies, filtered by title, location, remote and salary.
  • Researchers and analysts: track hiring velocity, department mix and salary bands over time.

How to use it

  1. Add one or more Greenhouse boards: a URL like https://boards.greenhouse.io/airbnb, or just the slug.
  2. Optionally set filters (title keywords, location, department, remote, salary…).
  3. Run it, then download the dataset as JSON, CSV, Excel or HTML, or read it through the Apify API.

Finding the board slug

The slug is the part after the domain in the board URL: boards.greenhouse.io/airbnb or job-boards.greenhouse.io/stripe. Companies with their own career site (like careers.airbnb.com) usually link to job pages with ?gh_jid=…; their Greenhouse slug is often simply the company name. You can also paste embed URLs like boards.greenhouse.io/embed/job_board?for=figma.

Not sure which ATS a company uses, or it uses Workable, SmartRecruiters, Recruitee, Personio, Teamtailor, BambooHR or Breezy? Use our multi-ATS Company Jobs API, which detects the ATS for you.

Input

InputWhat it does
companiesBoard URLs or slugs, one per line
keywords / excludeKeywordsTitle must contain any / none of these
locationsLocation, secondary locations or country contains any of these
departmentsDepartment contains any of these
employmentTypes, workplaceTypes, remoteOnlyJob type and remote/hybrid/on-site
postedWithinDaysPosted or updated in the last N days
onlyWithSalary, minAnnualSalaryOnly jobs with a published salary, and/or a minimum annualized top of range
onlyNewReturn only jobs not seen in your previous runs (for schedules and alerts)
includeDescription, redactContactsFull description text/HTML; emails and phones redacted by default
maxJobsPerCompany, maxJobsTotalHard caps (also cap your cost)
officesOffice name contains any of these
includePayRangesOne extra free API call per matching job for structured pay ranges (default on)

Example:

{ "companies": ["https://boards.greenhouse.io/airbnb"], "keywords": ["engineer"], "remoteOnly": false, "onlyNew": true }

Output

One dataset item per job. Every item has the common fields ats, companySlug, company, jobId, title, location, locations, isRemote, postedAt, url, applyUrl, descriptionText, descriptionHtml, input, scrapedAt and error, plus these Greenhouse-specific fields:

FieldDescription
payRanges[{title, min, max, currency}]: every pay range on the posting (several zones are common)
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText, salarySourceFirst pay range (salarySource: "ats"), or parsed from the description ("description")
departments, departmentDepartment list and joined string
officesOffice names
requisitionId, internalJobIdThe company's requisition and internal job IDs
customFieldsAll custom metadata the company publishes, as {name: value}
employmentType, workplaceType, isRemoteFrom custom fields when present, otherwise the location
applicationDeadline, language, postedAt (first published), updatedAtDates

Example item (shortened; values are illustrative):

{
"ats": "greenhouse", "companySlug": "discord", "company": "Discord", "jobId": "8000000",
"title": "Engineering Manager, Notifications", "department": "Product Engineering",
"departments": ["Product Engineering"], "offices": ["Remote (US)"], "location": "San Francisco, CA or Remote (U.S.)",
"isRemote": true, "requisitionId": "R-107460",
"salaryMin": 248000, "salaryMax": 310000, "salaryCurrency": "USD", "salaryPeriod": "YEAR", "salarySource": "ats",
"payRanges": [{ "title": "Base Salary", "min": 248000, "max": 310000, "currency": "USD" }],
"customFields": { "Featured on Website": true },
"postedAt": "2026-10-20T17:00:00.000Z", "url": "https://job-boards.greenhouse.io/discord/jobs/8000000", "...": "..."
}

The default key-value store also has a SUMMARY record with, for each board, the company name, open-job count, how many jobs were output, and a department breakdown.

Monitoring: only new jobs

Turn on onlyNew and schedule the Actor (for example daily). Job IDs are remembered in a named key-value store in your own account, keyed by your list of boards, so each run returns (and charges for) only postings you have not seen before. Connect a webhook, Slack, email or Zapier/Make integration to get alerts.

Speed and cost

A board with 200 jobs takes about 10–20 seconds with pay ranges on, and 2–3 seconds with them off. It runs on 512 MB by default; 256 MB is enough for most boards. Example: 10 companies × 150 jobs = 1,500 jobs ≈ $1.50.

FAQ

Is this allowed? Yes. It only reads the official public job-board API that Greenhouse provides so companies' job listings can be shown on other sites. It doesn't log in or scrape candidate data. Contact details in descriptions are redacted by default.

Why did a board return 0 jobs? The board exists but has no open jobs right now (see SUMMARY), or your filters removed everything. A wrong slug returns a free error row explaining what was wrong.

Can I get jobs from many companies at once? Yes. Add as many boards as you like; they are processed one after another.

Is the salary converted to one currency? No. Salaries are returned exactly as published, with their currency and period. minAnnualSalary compares annualized amounts without converting currency.