Greenhouse Jobs Scraper - Job Board API by Company avatar

Greenhouse Jobs Scraper - Job Board API by Company

Pricing

from $0.60 / 1,000 job scrapeds

Go to Apify Store
Greenhouse Jobs Scraper - Job Board API by Company

Greenhouse Jobs Scraper - Job Board API by Company

Scrape open jobs from any company on Greenhouse (boards.greenhouse.io). Type a company name or domain; the board token is found for you. All departments and offices, pay-transparency ranges, requisition ID, apply URL. Delta mode for daily runs.

Pricing

from $0.60 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Make No Mistakes LLC

Make No Mistakes LLC

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Share

Greenhouse Jobs Scraper: Job Board API by Company

Scrape every open job from any company's Greenhouse job board (boards.greenhouse.io, job-boards.greenhouse.io). Type a company name, a domain, a board token or a board URL. The Actor finds the Greenhouse board token for you and returns each job with its department tree, offices, pay-transparency ranges, requisition ID, posted and updated dates, full description and apply URL.

CompanyTitleDepartmentLocationPay rangePostedApply
AirbnbAccount ManagerBusiness DevelopmentLondon, United Kingdom46,000 - 54,000 GBP / year2026-09-09apply
FigmaAccount Executive, EnterpriseSalesSan Francisco, CA / New York, NY165,000 - 190,000 USD / year2025-01-28apply
RobinhoodAndroid Engineer, Government ProductsENG InfrastructureNew York, NY166,000 - 195,000 USD / year2025-05-08apply
Scale AIAccount Based Marketing LeadMarketingSan Francisco, CA; New York, NY158,400 - 198,000 USD / year2026-10-01apply
CoinbaseAccountant, CyprusFinance & AccountingRemote - Cyprus36,100 EUR / year2026-07-09apply

Real rows from a test run on 2026-10-03.

Try it: the default input returns 300 jobs (100 each from Airbnb, Figma and Robinhood) for about $0.60, in under 10 seconds. No login, no proxy, no API key: it reads Greenhouse's official public Job Board API.

What you get that a generic scraper misses

  • Company name in, board token out. Scale AI resolves to scaleai, figma.com to figma. If the name guess misses and you gave a domain, the Actor reads the company's careers page for its Greenhouse link (including embedded boards.greenhouse.io/embed/job_board?for=... boards).
  • Every pay range, with the right period. Greenhouse publishes pay-transparency ranges in a structured field when the employer opts in. This Actor always requests them (even with descriptions switched off), returns all ranges in pay_ranges (US zones, UK, EU), and reads the pay period from the range title: Coinbase's "Hourly Rate: $40" comes back as HOUR, not as a $40 annual salary. On 10 well-known boards, 1,363 of 2,682 open jobs (51%) carried a pay range, and 8 of the 10 employers publish them.
  • The real department tree and office list. departments and offices hold every entry, not just the first, and the departments / offices filters match against all of them.
  • Requisition and internal job IDs to join postings back to the employer's own req, and to spot the same requisition posted in several locations.
  • Companies not on Greenhouse are reported, not dropped. You get a free company_not_found row naming where the company actually hires, e.g.
    not on Greenhouse: this company's job board is on Ashby (https://jobs.ashbyhq.com/openai)
    .

Use cases

  • Salary benchmarking: pull every pay-transparent role at 50 tech companies, filtered to onlyWithPay, and compare ranges by title, level and location.
  • Recruiting and sourcing: watch competitor departments (departments: ["Engineering"]) and get each new requisition the day it opens with delta mode.
  • Sales and market intelligence: a team that starts hiring "Data Platform" engineers is a buying signal for data tooling.
  • Job boards and aggregators: clean, deduplicated, normalized jobs with real apply URLs.
  • Job seekers: a daily alert of new roles at your 20 target companies.

Input

{
"companies": ["Airbnb", "figma.com", "https://job-boards.greenhouse.io/stripe", "Scale AI"],
"keywords": ["engineer"],
"locations": ["New York", "Remote"],
"remoteOnly": false,
"postedWithinDays": 14,
"departments": ["Engineering"],
"offices": ["New York"],
"onlyWithPay": true,
"onlyNewSinceLastRun": false,
"includeDescription": true,
"maxItems": 1000,
"maxItemsPerCompany": 100
}
FieldWhat it does
companiesNames, domains, board tokens or board URLs, mixed freely.
keywordsKeep jobs whose title, department or team contains any of these words.
locationsKeep jobs whose location contains any of these strings.
remoteOnlyKeep only jobs whose location says remote.
postedWithinDaysKeep jobs posted or updated in the last N days (Greenhouse publishes both dates).
departmentsGreenhouse-only: match any of the job's departments, including parents.
officesGreenhouse-only: match any of the job's offices.
onlyWithPayGreenhouse-only: keep only jobs with a published pay range.
onlyNewSinceLastRunDelta mode: only jobs you have not received before (see below).
deltaStateNameName of the key-value store that remembers delivered jobs, one per schedule.
includeDescriptionSet false to drop the description fields (pay ranges are still returned).
maxItemsTotal jobs per run, and so your spend cap.
maxItemsPerCompanyJobs per company (default 100). Set 0 for whole boards.

Output

Every job uses the same normalized schema as the Multi-ATS Job Board API, plus Greenhouse-specific fields:

{
"record_type": "job",
"company": "Figma",
"title": "Account Executive, Enterprise",
"department": "Sales",
"location_raw": "San Francisco, CA • New York, NY • United States",
"city": "San Francisco",
"is_remote": false,
"salary_min": 165000,
"salary_max": 190000,
"salary_currency": "USD",
"salary_period": "YEAR",
"posted_at": "2025-01-28",
"updated_at": "2026-07-22",
"apply_url": "https://boards.greenhouse.io/figma/jobs/5426468004?gh_jid=5426468004",
"company_slug": "figma",
"ats": "greenhouse",
"job_id": "5426468004",
"source_url": "https://boards-api.greenhouse.io/v1/boards/figma/jobs",
"greenhouse_board_token": "figma",
"internal_job_id": "4868517004",
"requisition_id": "1451",
"departments": ["Sales"],
"offices": ["US"],
"pay_ranges": [
{"min": 165000, "max": 190000, "currency": "USD", "period": "YEAR", "title": "Annual Base Salary Range:"}
],
"has_pay_range": true,
"application_deadline": null
}

description_html and description_text carry the full posting, and raw keeps the untouched Greenhouse record. Greenhouse's board API publishes no employment type, so employment_type is null by design. salary_min/salary_max use the USD range when there are several (else the first); pay_ranges has them all.

Dataset views: Jobs, Greenhouse details and Companies not on Greenhouse. RUN_SUMMARY in the key-value store records how each company was resolved and how many jobs came back.

Delta mode for scheduled runs

Set onlyNewSinceLastRun: true and schedule the Actor. The first run returns everything and remembers it; later runs return only jobs not delivered before, and never charge twice for the same job. State lives in a named key-value store in your own account (deltaStateName), one record per board. Use a different name per independent schedule.

Pricing

Pay per event, no subscription:

Free planBronzeSilverGold and up
Per job$0.002$0.0015$0.001$0.0006
Per run start$0.001$0.001$0.001$0.001
  • 100 jobs on the Free plan: about $0.20. 1,000 jobs: about $2.00.
  • company_not_found rows are free.
  • maxItems is a hard spend cap. If your run's Maximum cost per run is too low for the jobs in scope, the run says so on its status line and in RUN_SUMMARY instead of silently returning less.

No login, no proxy, official public API

Greenhouse publishes its Job Board API (boards-api.greenhouse.io/v1/boards/{token}/jobs) for exactly this purpose: public, unauthenticated read access to published jobs. No account, cookies or proxies are involved.

API example

curl -X POST \
"https://api.apify.com/v2/acts/make_no_mistakes~greenhouse-jobs-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies": ["airbnb", "figma"], "onlyWithPay": true, "maxItemsPerCompany": 50}'

FAQ

Does it work with custom-domain careers pages? Yes, as long as the jobs come from Greenhouse. Pass the company's domain and the careers-page link is followed; or paste any Greenhouse board URL.

Why are some companies missing pay? Pay ranges are published only where the employer opted into Greenhouse pay transparency (Stripe, for example, does not). Use onlyWithPay to keep only the ones that did.

Is this affiliated with Greenhouse? No. This is an independent tool, not affiliated with, endorsed by or sponsored by Greenhouse Software, Inc. The name only describes which job boards it reads.

Published by Make No Mistakes LLC. Questions and feature requests: open an issue on this Actor's Issues tab.