Adderley Data Apify Store

Adderley Data / Guides

Greenhouse job board API: endpoints, fields and limits, measured

Every company that hires through Greenhouse publishes its open roles through a public JSON API: GET https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs. It needs no key, and one request returns the whole board. This page sets out what each endpoint returns, what we measured on Greenhouse's own board, and what you have to build yourself once you watch more than one board.

The request

Greenhouse documents the Job Board API on its developer site, and says of access: "Job Board data is publicly available, so authentication is not required for any GET endpoints."

curl "https://boards-api.greenhouse.io/v1/boards/greenhouse/jobs?content=true"

The response is {"jobs": [...], "meta": {"total": n}}, the whole board at once. The board token, greenhouse above, is the first part of the path in every link Greenhouse serves for a company:

  • boards.greenhouse.io/{token} and job-boards.greenhouse.io/{token}/jobs/{id}
  • boards.greenhouse.io/embed/job_board?for={token}, the embed that many company careers pages load
  • boards.eu.greenhouse.io/{token} for boards hosted in the EU. Whether the same API host serves those is not verified

The endpoints

As Greenhouse documents them (read 6 October 2026), all under https://boards-api.greenhouse.io:

  • GET /v1/boards/{token}/jobs: every open job. content=true adds each job's full description, departments and offices.
  • GET /v1/boards/{token}/jobs/{id}: one job. questions=true adds its application questions; pay_transparency=true adds pay_input_ranges, the structured pay range.
  • GET /v1/boards/{token}: the board's name and introduction.
  • GET /v1/boards/{token}/departments and /offices: departments and offices, as a list or a tree (render_as).

An unknown token answers HTTP 404 with {"status":404,"error":"Job not found"} (checked 22 September 2026), so a typo reads as "not found", never as an empty board.

What a job record holds

Each job in the list carries id, internal_job_id, title, absolute_url, location.name, requisition_id, first_published and updated_at. With content=true it also carries the posting's HTML, its departments and its offices. A metadata array holds each company's custom fields, which can be anything, a hiring manager's name included.

Two things the list does not give you as fields: a structured pay range, which costs one extra request per job with pay_transparency=true, and the work arrangement, which the list has no field for. When a company states either, it is in the posting text, the location label or the title.

Measured on Greenhouse's own board

Greenhouse's own careers board listed 19 open roles on Tuesday 6 October 2026, read in one request (run ghvAquujnH3ttPSI6). The fuller read is from Wednesday 30 September 2026 (run jIgYO66xS7qIfnwLc), when it listed 20. How often each fact was there:

Greenhouse's own board, 20 roles, 30 September 2026
FactRoles with itNotes
Country20 of 20Canada 10, Ireland 4, the United States 3, the United Kingdom 2, Argentina 1
City1 of 20The location labels mostly name a country or "Remote", not a city
Pay range13 of 20Read from the posting text: 10 in Canadian dollars, 3 in US dollars
Work arrangement6 of 20Remote stated on 6; the other 14 say nothing either way
First published and last updated20 of 20Both dates on every role

Where the API stops

For one board read once, call the API directly: it is free, fast and documented. The work starts when you watch boards over time:

  • Change detection. The API returns the board as it is now. Which roles are new since yesterday, which changed and which closed is yours to work out, by keeping the last read and comparing.
  • Many boards. Each company is its own token and its own request, and a company that moves to another applicant tracking system changes shape completely.
  • Fields you can filter on. Country, city, pay and work arrangement sit inside free text. Turning them into columns is parsing work on every row.

Greenhouse Jobs Scraper does those three things on top of this API: any number of board tokens or links, one row per role in a fixed schema, and in incremental mode it returns, and charges for, only roles that are new, changed, back or gone. On Greenhouse's own board the whole read is one request and took 2 seconds on 6 October. Its page has the price and the fields. To read Greenhouse alongside Lever, Ashby, Workday and eleven more systems in one table, the Career Site Jobs Scraper takes company names or links, and a measured run of it reads eleven vendors' boards at once.

The same reference for other systems

Published 2026-10-06.