Greenhouse Jobs Scraper avatar

Greenhouse Jobs Scraper

Pricing

from $0.49 / 1,000 job scrapeds

Go to Apify Store
Greenhouse Jobs Scraper

Greenhouse Jobs Scraper

Search live job postings across 140+ companies on Greenhouse. Filter by title, location, remote/hybrid/onsite, salary, experience level, and company.

Pricing

from $0.49 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Greenhouse Jobs Scraper

Search live job postings across 140+ companies that hire through Greenhouse, one of the most widely used applicant tracking systems (ATS) in tech. Filter by job title, location, work model, salary, experience level, and company, and get clean, structured job data ready for analysis or integration.

Query a curated list of 140+ active Greenhouse company boards by keyword, location, work model, employment type, experience level, salary range, and posting date — no ATS API keys or per-company setup required.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Apify Actor: parsebird/greenhouse-jobs-scraper. Scrapes live job postings from 140+ companies on Greenhouse (job-boards.greenhouse.io). Call via ApifyClient: client.actor("parsebird/greenhouse-jobs-scraper").call(run_input={"queries": ["Software Engineer"], "work_models": ["remote"], "page_size": 50}). Key inputs: queries (array, max 5, "-term" excludes), locations, work_models (remote/hybrid/onsite), employment_types, experience_levels, skills_include/skills_exclude (description keyword search), companies_include/companies_exclude, min_salary_usd/max_salary_usd, posted_after/posted_before (ISO date or "7 days ago"), page, page_size (max 100), include_company_details. Returns per job: title, normalized_title, company (name, board_token), locations (city/region/country), compensation (min/max/currency/period), employment_type, workplace_type, experience_level, responsibilities, benefits, description, listing_url, apply_url, date_posted, updated_at, source. Full API spec: https://apify.com/parsebird/greenhouse-jobs-scraper/api. Get your token: https://console.apify.com/settings/integrations.

What does Greenhouse Jobs Scraper do?

Greenhouse doesn't offer a single search endpoint that covers every company that uses it — each employer runs its own isolated job board. This actor solves that by maintaining a curated list of 140+ active Greenhouse company boards (Anthropic, Stripe, Databricks, Airbnb, Coinbase, Figma, Cloudflare, Roblox, SpaceX, and more) and querying all of them for you, so you can search across companies the way you'd search a single job board.

  • 🔍 Keyword search — match job titles and descriptions, with -term exclusions
  • 📍 Location & work model filters — remote, hybrid, onsite, plus city/region/country
  • 💰 Salary filtering — parsed directly from disclosed compensation ranges in the posting text, normalized to annual USD
  • 🏢 Company allow/deny lists — target specific employers or exclude them
  • 🎯 Skill keyword matching — filter by terms mentioned in the job description
  • 📅 Freshness filtersposted_after / posted_before, ISO dates or relative ("7 days ago")

Every field is derived from the same public data Greenhouse's own job board pages show — nothing is invented or estimated with AI. Employment type, workplace type, and experience level are classified with transparent keyword rules (documented below), not a black-box model, so you always know why a job was tagged the way it was.

What data can you extract from Greenhouse job postings?

FieldDescription
title / normalized_titleRaw posting title and a lightly cleaned version (trailing tags like "(Remote)" stripped)
companyname and board_token; with include_company_details also total_open_positions, departments, offices, careers_url
locationsRaw location text plus a best-effort city / region / country split
compensation{min, max, currency, period} parsed from the posting text when the employer discloses a range, else null
employment_typefull-time / part-time / contract / internship / freelance / temporary, from title keywords
workplace_typeremote / hybrid / onsite, from the location string and posting text
experience_levelintern / entry / mid / senior / lead / executive, from title keywords
responsibilities / benefitsBullet lists extracted from the posting's own <ul> sections when a matching heading is found
descriptionFull job description, HTML stripped
listing_url / apply_urlCanonical Greenhouse listing link
date_posted / updated_atEmployer's original posting date and last-updated timestamp
sourceAlways "greenhouse"

How to use Greenhouse Jobs Scraper

  1. Open the actor's Input tab on Apify Console.
  2. Enter up to 5 queries (job titles or keywords) — leave empty to browse everything.
  3. Optionally narrow by locations, work_models, employment_types, experience_levels, companies_include/companies_exclude, skills_include/skills_exclude, or a salary range.
  4. Set page_size (up to 100) and page to page through results, sorted newest-first by posting date.
  5. Click Start and download results as JSON, CSV, or Excel — or pull them via the Apify API or Python/JavaScript client.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/greenhouse-jobs-scraper").call(run_input={
"queries": ["Software Engineer"],
"work_models": ["remote"],
"min_salary_usd": 150000,
"page_size": 50,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["company"]["name"], job["compensation"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/greenhouse-jobs-scraper').call({
queries: ['Software Engineer'],
work_models: ['remote'],
min_salary_usd: 150000,
page_size: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((job) => job.title));

Input parameters

ParameterTypeRequiredDefaultDescription
queriesarray (≤5)No[]Job titles/keywords, OR'ed. -term excludes
locationsarrayNo[]City, region, or country substrings
work_modelsarrayNoallremote, hybrid, onsite
employment_typesarrayNoallfull-time, part-time, contract, internship, freelance, temporary
experience_levelsarrayNoallintern, entry, mid, senior, lead, executive
skills_include / skills_excludearrayNo[]Keyword match against the job description
companies_include / companies_excludearrayNo[]Case-insensitive company name match
min_salary_usd / max_salary_usdintegerNoAnnual USD bounds; jobs without a disclosed salary are excluded when set
posted_after / posted_beforestringNoISO 8601 (2026-01-01) or relative ("7 days ago")
pageintegerNo1Page number (1–100)
page_sizeintegerNo50Results per page (1–100)
include_company_detailsbooleanNofalseAttach aggregated company profile (open positions, departments, offices)

Output example

{
"id": "acme-4309998",
"title": "Senior Software Engineer, Backend",
"normalized_title": "Senior Software Engineer, Backend",
"company": {
"name": "Acme Corp",
"board_token": "acme"
},
"locations": [
{ "location": "San Francisco, CA", "city": "San Francisco", "region": "CA", "country": "United States" }
],
"compensation": { "min": 160000.0, "max": 220000.0, "currency": "USD", "period": "yearly" },
"employment_type": "full-time",
"workplace_type": "remote",
"experience_level": "senior",
"responsibilities": [
"Design and build backend services powering the core platform",
"Partner with product and design on new features"
],
"benefits": [
"Comprehensive health, dental, and vision coverage",
"Flexible PTO"
],
"description": "We are looking for a senior backend engineer to join our Platform team...",
"listing_url": "https://job-boards.greenhouse.io/acme/jobs/4309998",
"apply_url": "https://job-boards.greenhouse.io/acme/jobs/4309998",
"date_posted": "2026-08-09T13:47:14-04:00",
"updated_at": "2026-08-09T13:47:14-04:00",
"source": "greenhouse"
}

Use cases

  • Job search — Monitor new openings matching your title, salary, and location criteria across dozens of companies at once.
  • Recruiting & sourcing — Track competitor hiring activity and open headcount by department.
  • Compensation research — Collect disclosed salary ranges across roles, seniority levels, and companies for benchmarking.
  • Market research — Analyze hiring trends and in-demand skills across the tech industry.
  • ATS/HR tooling — Feed structured job data into an internal dashboard, job board, or alerting pipeline via the Apify API, scheduled runs, or integrations (Zapier, Make, Slack, Google Sheets).

How it works

  1. Company crawl — The actor queries the public Greenhouse Job Board API (boards-api.greenhouse.io) for each of the 140+ tracked company boards, concurrently.
  2. Filtering — Each posting is checked against your queries, locations, work_models, employment_types, experience_levels, salary bounds, skill keywords, and company filters. Raw per-company data is processed and discarded immediately, so memory use stays low regardless of how many companies are scanned.
  3. Classification — Employment type, workplace type, and experience level are derived from the title and location using transparent keyword rules. Compensation and responsibility/benefit bullet lists are parsed directly from the posting's own text and HTML structure.
  4. Pagination — Matches are sorted by posting date (newest first) and sliced according to page / page_size.
  5. Output — Results are pushed to the Apify dataset for download in JSON, CSV, or Excel, or via the API.

How much does it cost to scrape Greenhouse job postings?

PlanPrice per eventPrice per 1,000
Free$0.00199$1.99
Bronze$0.00149$1.49
Silver$0.00099$0.99
Gold$0.00049$0.49

One jobs-scraped event is charged per job pushed to the dataset. A run returning 200 jobs costs about $0.40 on the Free tier, down to about $0.10 on Gold. Every new Apify account gets free trial credits, so you can test this actor before committing to a paid plan.

FAQ

Does this cover every company on Greenhouse? No. Greenhouse has no cross-company search API, so this actor maintains a curated list of 140+ verified, currently active company boards. It's not exhaustive — see "How do I add a company?" below.

How do I add a company that isn't tracked? Every board is identified by its Greenhouse token (the slug in job-boards.greenhouse.io/<token>). If a company you need isn't covered, open an issue on the actor's Issues tab with the token and it can be added to the list.

Why is compensation null for some jobs? Only jobs where the employer discloses a salary range in the posting text (common in California, Colorado, New York, and Washington due to pay-transparency laws) have parsed compensation. Fewer than half of all postings disclose a range.

Why are responsibilities or benefits sometimes empty? They're extracted from <ul> lists in the posting that sit under a matching heading (e.g. "What You'll Do", "Benefits"). Postings that use plain paragraphs instead of bullet lists, or non-standard headings, won't have bullets extracted — the field is left empty rather than guessed.

How are employment_type, workplace_type, and experience_level determined? By keyword rules against the job title (and location, for workplace type) — for example, a title containing "Senior" is tagged senior; a location containing "Remote" is tagged remote. These are not AI predictions, so you can rely on them being consistent and explainable.

Can I schedule recurring runs? Yes — use Apify's Scheduler to run this actor daily or weekly and monitor new postings automatically, or trigger it via webhooks and the API.

What ATS platforms does ParseBird cover besides Greenhouse? See Hiring.cafe Jobs Scraper for an aggregator covering 46+ ATS platforms, or Workable Job Scraper and Workday Jobs Scraper for other individual ATS platforms.

This actor accesses only publicly available data from Greenhouse's public Job Board API, which is designed for exactly this kind of programmatic access. It does not bypass login walls, access private accounts, or collect personal candidate data. The data collected consists of job postings that companies have intentionally published for public recruitment. Users are responsible for ensuring their use of the collected data complies with applicable laws and each employer's terms of service. See Apify's guide on the legality of web scraping for more.