Greenhouse Jobs Scraper: Jobs API, Salary, Remote avatar

Greenhouse Jobs Scraper: Jobs API, Salary, Remote

Pricing

$0.40 / 1,000 jobs

Go to Apify Store
Greenhouse Jobs Scraper: Jobs API, Salary, Remote

Greenhouse Jobs Scraper: Jobs API, Salary, Remote

Greenhouse jobs scraper: one row per job from Greenhouse job boards (public job-board API): title, company, location with country code, remote or hybrid, employment type, salary, posting date, apply link and description. $0.40 per 1,000 jobs.

Pricing

$0.40 / 1,000 jobs

Rating

0.0

(0)

Developer

Prague Data Lab

Prague Data Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Security

Limited permissions

Share

Greenhouse Jobs Scraper

Scrape Greenhouse job postings from company career sites through Greenhouse's public job-board API: one clean row per job with title, company, locations and country codes, remote or hybrid, employment type, salary, posting date, apply link and full description. No login, no browser, no proxy. $0.40 per 1,000 jobs.

Quick start

{
"companies": [
"airbnb",
"stripe",
"figma"
],
"maxItems": 100
}

Search every Greenhouse board at once by leaving companies empty and setting keywords, locations or postedWithinDays.

Output example

{
"jobId": "5426468004",
"ats": "greenhouse",
"company": "Figma",
"companySlug": "figma",
"title": "Account Executive, Enterprise",
"department": "Sales",
"team": null,
"employmentType": null,
"employmentTypeRaw": null,
"workplaceType": null,
"locations": [
"San Francisco, CA • New York, NY • United States"
],
"city": "San Francisco",
"region": "California",
"country": "US",
"countries": [
"US"
],
"salaryMin": 165000,
"salaryMax": 190000,
"salaryCurrency": "USD",
"salaryPeriod": "YEAR",
"salaryText": null,
"postedAt": "2025-01-28T23:57:29.000Z",
"updatedAt": "2026-07-22T09:37:08.000Z",
"applyUrl": "https://boards.greenhouse.io/figma/jobs/5426468004?gh_jid=5426468004",
"jobUrl": "https://boards.greenhouse.io/figma/jobs/5426468004?gh_jid=5426468004",
"careerSiteUrl": "https://job-boards.greenhouse.io/figma",
"companyDomain": null,
"descriptionText": "Figma is growing our team of passionate creatives and builders on a mission to make design accessible to all. Figma’s pl …",
"descriptionHtml": null
}

What you get

FieldDescription
jobId, ats, companySlugJob ID in the ATS, the ATS, and the board ID (Workday: tenant|wdN|site). One row per ATS + board + job ID.
company, title, department, teamAs published by the career site.
employmentTypeFULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, TEMPORARY or OTHER (intern and working-student titles override a generic "Full-time"). employmentTypeRaw keeps the original label.
workplaceTypeONSITE, HYBRID, REMOTE, or null when the career site does not say.
locationsLocations as written by the career site.
city, region, country, countriesFirst location parsed, ISO-2 country codes of all locations.
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryTextPublished salary (HOUR, DAY, WEEK, MONTH, YEAR).
postedAt, updatedAtISO 8601 UTC (Workday: day precision).
applyUrl, jobUrl, careerSiteUrlApplication link, job page, company career site.
companyDomainCompany website domain, when the ATS publishes it.
descriptionText, descriptionHtmlFull description.
scrapedAtWhen the job was read (the index build time in search mode).

Every field is described in the dataset schema (Output tab). The run also saves SUMMARY in the key-value store (jobs per company, boards not found, warnings).

Input

FieldTypeDefaultNotes
companiesarrayempty = searchGreenhouse board slugs (airbnb) or career-page URLs
keywordsarrayallKeep jobs whose title or description contains these words
locationsarrayallCity, country or Remote
remoteOnlybooleanfalseRemote jobs only
postedWithinDaysintegerallJobs posted in the last N days
maxItemsinteger500Stop after N jobs (each saved job is one charged result)
maxJobsPerCompanyintegernoneCap per board
includeDescriptionbooleantrueFull description as plain text
includeDescriptionHtmlbooleanfalseAlso the description as HTML

Compatible with the input of bytepulselabs/greenhouse-job-scraper and fantastic-jobs/greenhouse-jobs-api

Switching costs nothing: the Actor also accepts the field names of those Actors (urls, titleSearch, locationSearch, limit, timeRange, hasSalary, ...). Change only the Actor ID in your API call or integration. Example:

{
"urls": [
{
"url": "https://job-boards.greenhouse.io/webflow"
}
],
"maxItems": 100
}

Pricing

Pay per event: $0.0004 per job ($0.40 per 1,000), event job, no platform usage on top. Duplicates are free. Set a maximum cost per run and the Actor stops when it is reached.

For comparison, the leading Greenhouse job scrapers in the Apify Store cost $1.50 to $4.00 per 1,000 jobs (checked 27/10/2026). The Actors named in the compatibility section charge $2.00 per 1,000 jobs, at least 5 times this price.

Code

Python (pip install apify-client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("praguedatalab/greenhouse-jobs-scraper").call(run_input={"companies":["airbnb","stripe","figma"],"maxItems":100})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0]["title"])

JavaScript (npm install apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('praguedatalab/greenhouse-jobs-scraper').call({"companies":["airbnb","stripe","figma"],"maxItems":100});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]?.title);

curl (synchronous run, returns the dataset items)

curl -X POST "https://api.apify.com/v2/acts/praguedatalab~greenhouse-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies":["airbnb","stripe","figma"],"maxItems":100}'

More ATS in one run

Need Greenhouse together with Greenhouse, Lever, Ashby, Workday and six other career-site ATS, deduplicated? Use the Career Site Jobs API at the same price per job.

FAQ

Which companies can I scrape? Any company whose Greenhouse board is public, for example airbnb. Give the board slug or its job-board URL (https://job-boards.greenhouse.io/<company>). Boards that do not exist are listed in the run's summary.

A company returns no job. The board is public but has no open job right now, or the slug is wrong. Check the slug on the company's career page.

Why only Greenhouse? One listing per ATS keeps each Store page focused. Other ATS are in the Career Site Jobs API.

Is this legal? The Actor reads public job postings that companies publish so that anyone can apply, through the same public job-board API their career site uses. It does not log in and does not output personal data.