Greenhouse Jobs Scraper: Job Boards, Salaries & New Jobs
Pricing
$4.00 / 1,000 job postings
Greenhouse Jobs Scraper: Job Boards, Salaries & New Jobs
Export every open job from any company's Greenhouse job board: title, location, departments, offices, full description, pay ranges, publish dates and requisition IDs. Filter by keyword, location or department, or monitor boards and get only new jobs. Official public API, no login.
Pricing
$4.00 / 1,000 job postings
Rating
0.0
(0)
Developer
Alex Burton
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Export every open job from any company that hires through Greenhouse (Airbnb, Stripe, Discord, Reddit, Robinhood, Datadog and thousands more) to JSON, CSV or Excel. Each row has the title, location, departments, offices, the full description as text and HTML, posted pay ranges, publish and update dates, and the requisition ID. Everything comes from Greenhouse's official public Job Board API, so there is no HTML parsing, no login and nothing that breaks when a careers site is redesigned. Recruiters, job aggregators and market researchers can watch a list of companies and get only the jobs posted since the last run.
One Actor, two jobs:
| Mode | What you get |
|---|---|
| All jobs on job boards | Every open job on one or more company boards, newest first, with optional title, location, department and date filters |
| Specific jobs | Full details for the job links or IDs you paste, including pay ranges. A job that has closed comes back as a free row marked found: false |
Why use this one
- Pay ranges, not just titles. Greenhouse's pay transparency ranges are read for every job: each zone or location with its minimum, maximum and currency, plus
payMin/payMaxfor sorting. When a job posts no pay range but the board has a pay custom field (Datadog has one), that is used instead. - Monitor mode for new jobs. Turn on Only new jobs since the last run and schedule the Actor daily. It remembers every job each board listed and returns only jobs that were not there before, so you pay only for new postings. A Monitor name keeps separate memories for different tasks watching the same board.
- Descriptions you can use. Greenhouse sends descriptions as escaped HTML. You get clean plain text with paragraphs and bullet points, and the original HTML beside it.
- Paste whatever link you have. Board tokens,
boards.greenhouse.ioandjob-boards.greenhouse.iolinks, embed links (/embed/job_board?for=…,/embed/job_app?for=…&token=…), API links and job links all work. For specific jobs, a company careers-site link with?gh_jid=works too: the board is worked out from the domain and checked against Greenhouse. - No junk passed off as data. Some boards fill the requisition field with ONE, MULTI or TBD; those become empty rather than fake IDs.
isRemoteis only set when the posting itself says Remote. - Filters that behave. Greenhouse has no search, so filters run on the full board. They match whole words, so
interndoes not match International andUSdoes not match Austin. End a word with*to match any ending (engineer*).
How to use it
- Choose What to scrape.
- Add Job boards by token or link (for Airbnb that is
airbnb, the part afterboards.greenhouse.io/), or paste Job links or IDs. - Optionally add filters, or turn on monitoring.
- Click Start, then download the results or pull them through the Apify API.
Example input: engineering jobs at three companies
{"mode": "jobs","boards": ["airbnb", "https://job-boards.greenhouse.io/discord", "robinhood"],"keywords": ["engineer*", "developer"],"excludeKeywords": ["intern"],"locations": ["Remote", "New York"],"maxJobsPerBoard": 500}
Example input: daily feed of new jobs (schedule it)
{"mode": "jobs","boards": ["stripe", "datadog", "reddit", "gitlab"],"onlyNewJobs": true,"monitorName": "weekly-report","maxJobsPerBoard": 1000}
The first run returns the current jobs and remembers them. Every later run returns only jobs posted since.
Example input: specific jobs
{"mode": "jobDetails","jobUrls": ["https://job-boards.greenhouse.io/robinhood/jobs/6669758","airbnb:8231416","https://www.coinbase.com/careers/positions/8175363?gh_jid=8175363"]}
Output
One row per job. Real values from the Airbnb board (description shortened):
{"type": "job","found": true,"boardToken": "airbnb","companyName": "Airbnb","jobId": 8231416,"title": "Associate Principal, Procurement Innovation Supplier Programs","location": "United States","isRemote": true,"departments": ["Financial Planning and Analysis"],"offices": ["United States"],"payMin": 102000,"payMax": 120000,"payCurrency": "USD","payRanges": [{ "label": "Pay Range", "min": 102000, "max": 120000, "currency": "USD", "note": "How We'll Take Care of You: Our job titles may span more than one career level. …" }],"paySource": "payTransparency","firstPublishedAt": "2026-09-24T22:17:39Z","updatedAt": "2026-09-30T00:00:54Z","applicationDeadline": null,"url": "https://careers.airbnb.com/positions/8231416?gh_jid=8231416","applyUrl": "https://job-boards.greenhouse.io/embed/job_app?for=airbnb&token=8231416","requisitionId": null,"internalJobId": 3562002,"language": "en","description": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, …","descriptionHtml": "<div class=\"content-intro\"><p>…","customFields": { "Is this job part of ACC?": false, "Workplace Type": "Remote" }}
A job with several pay zones (Robinhood, Android Engineer) carries one payRanges entry per zone, and payMin / payMax span them all: 130,000 to 195,000 USD. Hourly roles come through as hourly amounts, for example Coinbase's "label": "Hourly Rate:", "min": 40, "max": 40.
Field notes:
urlis the job's public link, which is often the company's own careers site.applyUrlis Greenhouse's application form for the job, which works for every board.payRangesisnullwhen pay was not looked up, and[]when the job publishes none. Pay written only inside the description text is not extracted.isRemoteistruewhen the posted location or a workplace-type field says Remote, and empty otherwise. Greenhouse has no remote flag of its own.customFieldsare fields the company chose to publish (Workplace Type, Time Type, Career Track and similar). Fields holding an email address are left out unless Include email addresses in custom fields is on.- Dates are ISO 8601 in UTC.
Pricing
Pay only for results:
| Result | Price |
|---|---|
| Job posting | $4.00 per 1,000 |
A job you asked for in Specific jobs that has closed, or a reference that could not be read, gives a row marked found: false at no charge. Set a maximum spend per run in the run options and the Actor stops cleanly when it is reached. A daily monitor of 20 companies that post 50 new jobs a day in total costs about $6.00 a month.
Limits to know about
These come from Greenhouse's API, not from this Actor:
- Open jobs only. The Job Board API lists jobs that are live right now. Closed jobs and their history are not available.
- No server-side search. Every run downloads each board's full job list (a few MB for the largest boards) and filters it here, so a filtered run on a big board takes as long as an unfiltered one.
- Pay ranges cost one request per job. They are served only one job at a time. Turn off Include pay ranges for faster whole-board runs if you do not need them.
- The default keeps the newest 100 jobs per board. Raise Max jobs per board to take whole boards; the largest boards list around 1,000 open jobs. With monitoring on, jobs over the limit are remembered as seen.
- Companies with their own careers site still use a Greenhouse board token, which is usually the company name. If a company does not use Greenhouse, the board is reported as not found.
- EU-hosted boards (links on
job-boards.eu.greenhouse.io, such as JetBrains) work like any other board: give the token or the link. Their apply links point at the EU job-board site.
FAQ
Do I need a Greenhouse account or API key? No. The Job Board API is public; it is what companies' own careers pages use.
How do I find a company's board token? Open one of its job links. On boards.greenhouse.io/airbnb/jobs/… or job-boards.greenhouse.io/discord/jobs/… the token is airbnb or discord. If the link is on the company's own site and has ?gh_jid=, paste it into Specific jobs and the board is found for you.
How does monitoring decide what is new? It stores the IDs of every job each board listed, in a key-value store named greenhouse-jobs-scraper-state in your account. A job is new if its ID was not on the board in an earlier run with the same Monitor name. Jobs the run could not save because of Max items or your spending limit are not remembered, so the next run still delivers them.
Can I get alerts? Schedule the Actor with monitoring on and connect the dataset to Slack, email, Google Sheets, Zapier or Make in Apify Console.
Why is requisitionId empty? The company does not publish one, or publishes a placeholder such as ONE or TBD.
Feedback
Found a bug or need a field that is missing? Open an issue on the Actor's Issues tab.