Greenhouse Jobs Scraper & Salary API avatar

Greenhouse Jobs Scraper & Salary API

Pricing

from $1.50 / 1,000 job listings

Go to Apify Store
Greenhouse Jobs Scraper & Salary API

Greenhouse Jobs Scraper & Salary API

Greenhouse jobs scraper and API. Get every open position from any Greenhouse job board as clean JSON: title, department, location, salary range when stated and full description. Paste a careers link or a company name. No proxies, pay per job.

Pricing

from $1.50 / 1,000 job listings

Rating

0.0

(0)

Developer

Aditya Sapra

Aditya Sapra

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Share

Greenhouse Jobs Scraper turns any company's Greenhouse job board into clean, structured data: one consistent JSON record per open position, with pay ranges where they exist. Use it as a Greenhouse jobs API for job aggregators, recruiting and sales-intelligence tools, hiring-signal tracking and labour-market research.

It reads the public data behind Greenhouse career pages, so it is fast and stable: no browser, no proxies, no blocked requests.

Not affiliated with, endorsed by or sponsored by Greenhouse. "Greenhouse" is used only to describe which public job boards this Actor reads.

What is it good for?

  • Job boards and aggregators: fill your board straight from company career pages.
  • Recruiting and talent teams: see which competitors are hiring for which roles, and where.
  • Sales and RevOps: hiring is a buying signal, so list the companies hiring for the roles your product serves.
  • Analysts and researchers: build salary benchmarks and labour-market trends from the pay ranges employers publish.

Try it in 30 seconds

  1. Press Start: the input is prefilled with real examples.
  2. Open the Output tab and download JSON, CSV or Excel.
  3. Replace the examples with your own and run again. You pay about $1.50 per 1,000 jobs.

A taste of the output

CompanyTitleLocationPay
Reddit3rd Party Partnerships Manager - SignalsNew York City, NY$189,000 to $264,600

The full record has more fields; see the example output further down.

What does Greenhouse Jobs Scraper do?

Give it Greenhouse career-page links or company names and it returns every open position as JSON, CSV or Excel, or through the API. Filter by job-title keywords, location, department, employment type, remote only or posting date, and schedule it to receive only newly posted jobs.

What data can I scrape from Greenhouse job boards?

  • title
  • department(s)
  • location(s)
  • posting date and last-update date
  • full description
  • requisition id and language

Every record uses the same fields across platforms, so you can combine this data with other job sources.

Example output

One record per job:

{
"id": "greenhouse:reddit:8089959",
"ats": "greenhouse",
"companySlug": "reddit",
"companyName": "Reddit",
"title": "3rd Party Partnerships Manager - Signals",
"department": "Global Ads Partnerships",
"departments": [
"Global Ads Partnerships"
],
"team": null,
"location": "New York City, NY",
"locations": [
"New York City, NY"
],
"country": null,
"workplaceType": null,
"isRemote": null,
"employmentType": null,
"postedAt": "2026-07-29T06:19:34Z",
"updatedAt": "2026-10-04T00:08:52Z",
"url": "https://job-boards.greenhouse.io/reddit/jobs/8089959",
"applyUrl": "https://job-boards.greenhouse.io/reddit/jobs/8089959",
"salary": {
"min": 189000.0,
"max": 264600.0,
"currency": "USD",
"interval": "year",
"summary": "$189,000—$264,600",
"source": "description-text"
},
"description": "Reddit is a community of communities. It’s built on shared interests, passion, and trust, and is home to the most open and authentic convers...",
"requisitionId": "R-105731",
"language": "en"
}
FieldDescription
title, companyName, url, applyUrlBasics. companyName is taken from the platform where it is published, otherwise derived from the board name
department, departments, teamDepartment or team as published
location, locations, countryPrimary location, all locations, and country where the platform provides it
workplaceTyperemote, hybrid or onsite when the platform provides it
isRemotetrue if the role is remote, or lists a remote option among its locations
employmentTypefull_time, part_time, contract, internship, temporary or other (original in employmentTypeRaw)
postedAt, updatedAtISO 8601 UTC
salarymin, max, currency, interval (year, hour, ...), summary and source
description, descriptionHtmlFull job description as text and/or HTML
id, ats, companySlug, matchedByStable unique id, source platform, board name, and whether you gave an exact link (explicit) or a name we matched (slug-probe)

How is salary data handled?

  • Greenhouse has no pay field, so salary is extracted from the job text when the employer states a range (salary.source = "description-text"). In our checks on large US employers about half of the ads carried a range.
  • We only return a value when a currency, a range and a pay-related keyword are all present, and we leave it empty instead of guessing.
  • Values are exactly what the employer published. If a yearly range looks like it was typed without the "K" (for example 230 to 350), the record carries "suspect": true.

How do I scrape Greenhouse jobs?

  1. Add companies, one per line. Any of these work:

    • https://boards.greenhouse.io/stripe
    • https://job-boards.greenhouse.io/anthropic
    • greenhouse:databricks
    • Short form: greenhouse:stripe

    A plain company name or website (for example stripe.com) is also accepted: the Actor guesses the board name.

  2. Optionally filter by job title keywords, location, department, employment type, remote only or posting date.

  3. Run it, then download the data as JSON, CSV or Excel, or read it through the API.

How do I find a company's Greenhouse board name?

Open the company's careers page. If its address contains boards.greenhouse.io/<name> or job-boards.greenhouse.io/<name> (or the page embeds a Greenhouse job board), <name> is the board name.

Example input

{
"companies": [
"https://boards.greenhouse.io/stripe",
"https://job-boards.greenhouse.io/anthropic"
],
"keywords": [
"engineer",
"data"
],
"locations": [
"United States",
"Remote"
],
"postedWithinDays": 14,
"maxJobsTotal": 500
}

How do I get only new Greenhouse jobs?

Turn on Only jobs not returned before and schedule the Actor (hourly, daily, ...). The first run returns everything and saves a baseline; every later run returns only openings that were not returned before for the same company list.

How much does it cost to scrape Greenhouse jobs?

You pay per job returned: $0.0015 per job, about $1.50 per 1,000 jobs, plus a tiny fixed fee per run. Apify bills the platform usage of the run (compute) on top, which is normally a small fraction of the per-job price. Max jobs in total is a hard cap on the cost of a run, and the run also stops if it reaches the maximum charge you set in the run options. The Pricing tab always shows the current rate.

Can I use Greenhouse Jobs Scraper through the API?

Yes. Like every Apify Actor it can be started from code, scheduled in the Apify Console, or connected to Make, Zapier, n8n, Google Sheets and webhooks through Apify integrations.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run_input = {
"companies": [
"https://boards.greenhouse.io/reddit",
"https://boards.greenhouse.io/figma"
],
"keywords": [
"engineer"
],
"maxJobsTotal": 25
}
run = client.actor("cyborg_cell/greenhouse-jobs-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const input = {
"companies": [
"https://boards.greenhouse.io/reddit",
"https://boards.greenhouse.io/figma"
],
"keywords": [
"engineer"
],
"maxJobsTotal": 25
};
const run = await client.actor('cyborg_cell/greenhouse-jobs-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL

curl -X POST "https://api.apify.com/v2/acts/cyborg_cell~greenhouse-jobs-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"companies": ["https://boards.greenhouse.io/reddit", "https://boards.greenhouse.io/figma"], "keywords": ["engineer"], "maxJobsTotal": 25}'

FAQ

This Actor reads only the public job-postings data that Greenhouse career pages publish so that employers can show their own openings. It does not log in to anything, bypass any protection or collect candidate or other personal data, and it sends modest, rate-limited requests. Laws and website terms differ by country and by use, so you are responsible for how you use the data. This is not legal advice.

Do I need proxies or a browser?

No. The data comes from public endpoints, so there is nothing to unblock and no browser to run.

Which companies does it work for?

Companies whose careers page runs on Greenhouse. Companies on other platforms are not covered; if you need several platforms in one run, use the ATS Job Scraper (Greenhouse, Lever, Ashby, Workday and four more platforms).

What is not available on Greenhouse?

Greenhouse does not publish employment type, workplace type or country, so those fields are empty. Pay ranges are only available when the employer writes them into the job text; the Actor extracts them from the text when they are there. isRemote is true when the role is remote or lists a remote option among its locations.

A company should work but does not. What now?

Open an issue on the Actor page with the company link and we will look at it.

Other Actors by the same author