Greenhouse Jobs Scraper: Any Company's Job Board API
Pricing
from $1.20 / 1,000 job listings
Greenhouse Jobs Scraper: Any Company's Job Board API
Get every open job from any company's Greenhouse job board through the official public API: title, department, location, remote flag, pay range, posting date and description. Filter by keyword and location, and schedule it to get only new jobs. USD 1.50 per 1,000 jobs.
Pricing
from $1.20 / 1,000 job listings
Rating
0.0
(0)
Developer
JT Palms
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Greenhouse Jobs Scraper: every open job from any company on Greenhouse
Give it a list of companies that hire with Greenhouse (Stripe, Airbnb, Discord and thousands more) and get back every open job as clean rows: title, department and its parent departments, location, remote flag, employment type, pay range, posting dates, apply link and the description as plain text. It reads the official Greenhouse Job Board API, so there is no browser, no proxy and no blocking. Hundreds of jobs take a few seconds.
USD 1.50 per 1,000 jobs. Companies that cannot be found are reported free.
What people use it for
- Sales signals from hiring. A company opening five data engineering roles is about to buy data tools. Pull the open jobs of your target accounts every week, filter by department or keyword, and send new roles to your CRM, Clay or Slack.
- Job boards and newsletters. Fill a niche job board (remote, AI, fintech, climate) or a weekly jobs newsletter straight from the source, with pay ranges where the company publishes them and a direct apply link.
- Recruiting market research. Compare hiring across competitors by department, location, seniority keywords and pay. Track how a company's open headcount changes over time.
- Job alerts. Schedule it with Only new jobs turned on and receive only postings that appeared since the last run, for example "remote product manager jobs at these 50 companies".
Sample output
A real row (description trimmed):
{"source": "greenhouse","company": "airbnb","companyName": "Airbnb","jobId": "8214444","title": "Business Systems Engineer, Tech Foundations","department": "Information Technology","team": null,"departmentPath": ["1. Technical", "Engineering & Technology", "Information Technology"],"location": "San Francisco, CA","locations": ["San Francisco, CA"],"workplaceType": "remote","isRemote": true,"employmentType": null,"compensation": {"min": 123000,"max": 145000,"currency": "USD","interval": "year","summary": "USD 123,000 - 145,000 per year"},"postedAt": "2026-09-18T20:54:20.000Z","updatedAt": "2026-09-24T22:49:00.000Z","jobUrl": "https://careers.airbnb.com/positions/8214444?gh_jid=8214444","applyUrl": "https://job-boards.greenhouse.io/embed/job_app?for=airbnb&token=8214444","descriptionText": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, and has since grown to over 5 million hosts ...","scrapedAt": "2026-09-28T18:45:00.000Z"}
Real runs: Stripe returned 704 jobs, Airbnb 158 (129 with a pay range), Discord 48, all in a few seconds.
How to use it
- Add companies to Companies, one per line. Any of these work:
- a board name:
stripe - a board URL:
https://boards.greenhouse.io/stripe,https://job-boards.greenhouse.io/airbnb,https://job-boards.eu.greenhouse.io/parloa - a job URL on the board:
https://job-boards.greenhouse.io/discord/jobs/8806482002
- a board name:
- Optionally narrow the results:
- Title keywords:
engineer,AI,/product (manager|owner)/ - Locations:
London,New York,Remote - Remote jobs only
- Departments:
Engineering,Sales - Posted within (days):
7 - Max jobs per company: newest first
- Title keywords:
- Click Start, then export as CSV, JSON or Excel, or read the dataset through the Apify API.
Finding the board name. Open the company's careers page and click a job. If the address contains greenhouse.io/<name>, that is the board name. Some companies show jobs on their own site with ?gh_jid= in the URL; their board name is usually the company name (stripe, airbnb), so try that.
Job alerts on a schedule
- Turn on Only new jobs and set your filters.
- Save the input as a task and add a schedule (daily or weekly).
- Connect the results to email, Slack, Google Sheets or a webhook in the task's Integrations tab.
The first run returns all matching jobs. Every later run returns only jobs that were not delivered before.
Input
| Field | What it does |
|---|---|
companies | Board names or careers page URLs. Required. |
keywords | Keep jobs whose title matches any keyword. Words match at their start (engineer finds "Engineering"); keywords of 3 letters or fewer must be a whole word (AI does not match "Chair"). /regex/ is supported. |
locations | Keep jobs whose location or office contains any of these texts. |
remoteOnly | Keep only jobs that can be done remotely. |
departments | Keep jobs whose department, or any parent department, contains any of these texts. |
postedWithinDays | Keep jobs first published in the last N days. 0 = any date. |
maxJobsPerCompany | Newest jobs first, at most this many per company. 0 = no limit. |
onlyNewJobs | Output only jobs not delivered by an earlier run (see FAQ). |
includeDescription | Add the description as plain text, up to 5,000 characters. Default on. |
maxConcurrency | Companies fetched in parallel. Default 5. |
Output fields
| Field | Notes |
|---|---|
company, companyName | Board name and the company's display name. |
jobId, title | Greenhouse job ID and title. |
department, departmentPath | The job's department and its full path from the top of the company's department tree. team is always null (Greenhouse has no teams). |
location, locations | Location as shown, and every location and office address as a list. |
workplaceType, isRemote | remote, hybrid, onsite or null. Taken from the company's workplace field when it has one, otherwise read from the location text. |
employmentType | full_time, part_time, contract, temporary, internship or null. From the company's custom field, or from words like "Intern" or "Contract" in the title. Full-time is never guessed. |
compensation | min, max, currency, interval, summary, when the company publishes pay ranges. Several ranges (for example per country) are listed in summary. |
postedAt, updatedAt | First published and last updated, ISO 8601 in UTC. |
jobUrl, applyUrl | The job page (often on the company's own site) and the Greenhouse application form. |
descriptionText | Plain text, HTML removed, capped at 5,000 characters. |
error | Only on rows for companies that could not be read. These rows are free. |
A SUMMARY record in the run's key-value store lists every company with its number of open jobs, matches, new jobs and errors.
Pricing
| What | Price |
|---|---|
| Job listing in the results | USD 0.0015 (USD 1.50 per 1,000) |
| Company not found, wrong URL, or unreadable board | Free |
Example: 20 companies with 150 open jobs each is 3,000 jobs, USD 4.50. With Only new jobs on a daily schedule you pay only for new postings, usually a few cents a day.
Set a maximum cost per run in the run options and the actor stops cleanly when it gets there; everything saved so far stays in the dataset. Max jobs per company also caps the spend on very large boards.
Limits
- Only jobs the company publishes on its Greenhouse board. Internal or unlisted postings are not in the API.
- Pay ranges appear only when the company turns on pay transparency in Greenhouse. When a range has no stated period, the period is inferred from the amount (a range from USD 15,000 up is yearly, up to USD 300 is hourly) and left empty when unclear.
- Remote, workplace and employment type are best effort, since many companies leave those fields empty.
- Companies that moved from Greenhouse to another system return a not-found row. Use the Lever Jobs Scraper or Ashby Jobs Scraper for companies on those platforms; they give the same output format.
Related actors
- Career Site Jobs Index: Greenhouse, Ashby, Lever & More: Fresh jobs from thousands of company career sites, indexed twice a day from the official public job-board APIs of Greenhouse, Ashby,...
- Career Page Jobs Scraper: Auto-Detects the Job Board (ATS): Give company websites or careers pages and get every open job.
- Hiring Signals: Companies Hiring by Role, Team & Location: Find companies hiring right now, one row per company: open roles by team, seniority and location, roles posted in the last 7 and 30...
FAQ
Is it legal? Yes. The actor reads the official Greenhouse Job Board API (boards-api.greenhouse.io), the public, no-login feed Greenhouse provides so companies can publish their open jobs on careers sites and syndicate them to job boards. It only sees published job postings. It collects no personal data, and it does not log in or submit anything. If you republish jobs, link to the applyUrl or jobUrl so candidates apply with the company.
How does Only new jobs work? The actor keeps, per company, the IDs of the jobs it has already delivered, in a key-value store named greenhouse-jobs-monitor in your own Apify account. Each run outputs only matching jobs whose ID is not in that list, then adds them. Jobs left out only by Max jobs per company are marked as seen too, so they do not come back later. Jobs cut off by your cost limit stay new for the next run. Closed jobs are dropped from the list automatically. If you add a filter later, older jobs that now match and were never delivered are delivered once. To start over, delete the store in Storage.
Why are some fields null? The API only has what the company fills in. employmentType and workplaceType are often empty in Greenhouse, and pay ranges are optional.
Does it work with EU boards? Yes. URLs on job-boards.eu.greenhouse.io work like any other.
Something missing or wrong? Open an issue with the company name and what you expected.