Thousands of companies hire through Greenhouse, and every Greenhouse job board is also a public JSON API. Greenhouse documents it so that companies can show their jobs on their own websites; it needs no key for reading. One request per company returns the whole board. We built a search on it this autumn; this is what the API gives you, measured on 13 November 2026 on two boards, Stripe (786 open jobs) and Reddit (147).

One URL per company

https://boards-api.greenhouse.io/v1/boards/<board>/jobs?content=true&pay_transparency=true 

<board> is the company's board name, the same word that appears in its job links (job-boards.greenhouse.io/stripe/...). A board name that does not exist returns HTTP 404, so a typo fails loudly.

There is no paging. All 786 of Stripe's jobs arrived in one response, with meta.total saying 786. Without content=true the response leaves out the description, the departments and the offices, and without pay_transparency=true it leaves out the pay range; the two parameters are what make the response worth reading.

What a job carries

With both parameters, each job has id, title, absolute_url, company_name, location.name, offices, departments, first_published, updated_at, requisition_id, metadata, content and pay_input_ranges, plus a handful of others (an internal id, the language, an application deadline, AI disclosure and data compliance; Stripe also sends an education setting). There is no employment type and no workplace type field.

1. The description is HTML, escaped once more

content is not HTML you can parse. It is HTML with its tags written as entities, &lt;p&gt; rather than <p>, on every one of the 933 jobs on both boards. Unescape it first, then reduce the HTML to text. Skip the first step and a text converter sees no tags at all and hands you the markup as words.

2. Pay comes only if you ask, and often only in the text

pay_input_ranges is the board's own pay range, with min_cents and max_cents (in cents: 16420000 is 164,200), a currency_type and a title such as "The base salary range for this position is:". It is not in the response at all unless the URL carries pay_transparency=true. With it, Reddit filled the range on 122 of its 147 jobs. Stripe filled it on 0 of 786, yet 10 of Stripe's postings state pay in the description, as a line like "Salary: $113,672 - $144,750". So read the field first and the text second, and keep the two apart: base pay ranges, not bonus or equity figures that sit in the same paragraph.

3. updated_at is not the publish date

On Stripe's board, updated_at fell on a different day from first_published for 672 of 786 jobs; on Reddit's, 129 of 147. Boards touch their postings all the time. Sort by updated_at to find new jobs and old postings keep coming back to the top. Use first_published, or better, track ids between runs: an id you have not seen before is new, whatever its dates say. 34 of Stripe's open jobs were first published before 2026 and are still listed.

4. Remote lives in the location text

With no workplace type field, remote is a word the employer typed into location.name: "Remote - United States", "US-Remote", "Remote - Ontario, Canada". 115 of Stripe's 786 jobs and 120 of Reddit's 147 had it. The location is free text as the employer wrote it ("San Francisco, CA" on some jobs, "San Francisco" on others, "N/A" on 23) with no country field, so a filter for "United States" has to know that "CA" is in it.

5. There is no directory of boards

The API answers for a board you name; it does not tell you which boards exist. To search across companies you need the list first. We built ours from public web data, the Common Crawl URL index, which records the Greenhouse job links that appear across the web, and confirmed each candidate by reading its board.

The tool

Greenhouse Jobs API on Apify Store does the above for every board at once: a daily index of 166,975 open jobs from 4,126 companies that hire through Greenhouse (13 November 2026), searched by title, place, remote and date, with the full text and pay read live from each employer's board at search time. Type "software engineer" and press Start: on 13 November that returned 100 of the 7,371 matching jobs (newest first, at most 10 per company) from 58 companies in 39 seconds on our machine, 56 of them with a pay range. $2.50 per 1,000 jobs.

For one company's board read live from its URL, our Greenhouse Jobs Scraper returns the same 30 fields, so both drop into one table with the other systems Dodo Data reads.