BYTETOOLS

Greenhouse Job Board API

Free ATS job board API with no key: any company's open Greenhouse roles as JSON, with locations, requisition ids, custom metadata and GDPR flags. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Greenhouse Job Board API?

Greenhouse's Job Board API serves any company's public postings as JSON without an API key. Each job returns its title, location, application URL, requisition id, publication and update timestamps, plus whatever custom metadata the employer has configured.

Greenhouse is one of the two applicant tracking systems that dominate technology hiring, and its Job Board API is genuinely public — no key, no partner agreement. The board token is simply the company's identifier in its careers URL, so if a company's job listings live on `job-boards.greenhouse.io/{token}`, you can read the same postings as structured data.

The `metadata` array is what distinguishes it from other ATS feeds. Employers define their own custom fields — career site category, seniority, function, whatever their taxonomy needs — and those come back as typed name/value pairs. That means a well-configured board gives you far richer faceting than the standard fields alone. The `data_compliance` block is also worth noticing: it declares GDPR consent and retention requirements per posting, which matters if you are storing applications rather than just linking to them. Adding `content=true` returns the full job description too, which the default listing omits.

Quick facts

Base URL
https://boards-api.greenhouse.io/v1/boards
Authentication
No API key for the public job board. Greenhouse's Harvest API, covering candidates and hiring data, requires authentication.
Rate limit
No published limit for the board API. Cache per company; boards change daily at most.
Pricing
Free.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Greenhouse Job Board API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch a company's Greenhouse job board

GET https://boards-api.greenhouse.io/v1/boards/vercel/jobs

curl
curl 'https://boards-api.greenhouse.io/v1/boards/vercel/jobs'
JavaScript (fetch)
const res = await fetch("https://boards-api.greenhouse.io/v1/boards/vercel/jobs");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://boards-api.greenhouse.io/v1/boards/vercel/jobs", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "jobs": [
    {
      "absolute_url": "https://job-boards.greenhouse.io/vercel/jobs/6136160004",
      "data_compliance": [
        {
          "type": "gdpr",
          "requires_consent": false,
          "requires_processing_consent": false,
          "requires_retention_consent": false,
          "retention_period": null,
          "demographic_data_consent_applies": true
        }
      ],
      "internal_job_id": 5196261004,
      "location": {
        "name": "Hybrid - London"
      },
      "metadata": [
        {
          "id": 18783104004,
          "name": "Career Site Categories",
          "value": "Sales",
          "value_type": "single_select"
        }
      ],
      "id": 6136160004,
      "updated_at": "2026-08-18T18:06:19-04:00",
      "requisition_id": "1311",
      "title": "Account Executive, Commercial",
      "company_name": "Vercel",
      "first_published": "2026-08-06T12:50:10-04:00",
      "language": "en",
      "application_deadline": null
    },
    {
      "absolute_url": "https://job-boards.greenhouse.io/vercel/jobs/5999792004",
      "data_compliance": [
        {
          "type": "gdpr",
          "requires_consent": false,
          "requires_processing_consent": false,
          "requires_retention_consent": false,
          "retention_period": null,
          "demographic_data_consent_applies": true
        }
      ],
      "internal_job_id": 5156316004,
      "location": {
        "name": "Hybrid - London"
      },
      "metadata": [
        {
          "id": 18783104004,
          "name": "Career Site Categories",
          "v

Parameters

ParameterTypeRequiredDescription
(board token)pathRequiredThe company's board token, taken from its Greenhouse careers URL. vercel
contentqueryOptionalSet true to include the full HTML job description on each posting. true
/departmentspathOptionalThe board's departments with their jobs nested underneath.
/officespathOptionalThe board's offices, likewise with jobs nested.

Response fields

jobsarray
Every currently published role on the board.
jobs[].id / internal_job_idinteger
Public posting id and the internal requisition-level id. A single requisition can have several postings.
jobs[].titlestring
Job title as published.
jobs[].absolute_urlstring
Public posting page, which is also the application entry point.
jobs[].location.namestring
Free-text location string such as `Hybrid - London`. It is not normalised, so parsing it is guesswork.
jobs[].updated_at / first_publishedstring
ISO 8601 timestamps with a numeric offset, typically US Eastern rather than UTC.
jobs[].requisition_idstring
The employer's own requisition reference, useful for reconciling against their internal systems.
jobs[].company_namestring
Company display name, echoed on every posting.
jobs[].metadataarray
Employer-defined custom fields as `name`, `value` and `value_type` triples — the richest faceting source in the response.
jobs[].data_compliancearray
Per-posting GDPR flags covering consent and retention requirements.
jobs[].languagestring
Posting language code.
jobs[].application_deadlinestring
Closing date where the employer has set one; null otherwise.

What you can build with the Greenhouse Job Board API

  • Render a live careers page from the company's own ATS
  • Aggregate roles across a watchlist of employers
  • Facet a job board using employer-defined metadata fields
  • Track how long roles stay open using first_published and updated_at

Common errors and how to fix them

404

The board token is wrong or the board is not public.

Fix: Take the token from the company's Greenhouse careers URL. Private boards are not exposed through this API.

No job descriptions

The default listing omits body content.

Fix: Add `content=true` to include the full HTML description on each posting.

Location parsing is unreliable

`location.name` is free text set by the employer.

Fix: Expect strings like `Hybrid - London` or `Remote (US)`. Use the `/offices` endpoint if you need something structured.

Timestamps compare incorrectly

Offsets are typically US Eastern, not UTC.

Fix: Parse into a real datetime and normalise before sorting across companies.

Greenhouse Job Board API — frequently asked questions

Is the Greenhouse Job Board API free?

Yes, and public with no key. The separate Harvest API, which exposes candidates and hiring data, does require authentication.

Where do I find a company's board token?

In their Greenhouse careers URL — the segment after `job-boards.greenhouse.io/`. That segment is the token this endpoint takes.

How do I get the full job description?

Add `content=true` to the request. The default listing returns metadata only to keep the payload small.

What is in the metadata array?

Custom fields the employer defined on their board — categories, seniority, function and so on — returned as typed name/value pairs. It is the best source of structured facets in the response.

Tools that pair with this API

Greenhouse Job Board is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.