# Greenhouse Jobs API

> Every public Greenhouse Job Board posting, one endpoint. No per-tenant Harvest API onboarding, no slug discovery.

**Canonical URL:** https://jobspipe.dev/sources/greenhouse

## Coverage

- **Sources covered:** 3,000+ public Greenhouse boards
- **Freshness:** 24h refresh
- **History retention:** 12 months retention

## Why Greenhouse jobs data is confusing

Greenhouse ships two APIs that share a name. The Harvest API is private, OAuth-scoped, and exposes the full ATS surface - candidates, applications, scorecards, scheduled interviews. The Job Board API is public, unauthenticated, and exposes only the openings the customer has chosen to publish. Most developers searching 'Greenhouse API' land on Harvest docs and assume that's the only option, even though Job Board is what they actually need.

The Job Board endpoint lives at boards-api.greenhouse.io/v1/boards/<company>/jobs, but you still need to know each company's board token in advance, and many enterprises either disable the public board, use a vanity careers domain, or embed jobs through Greenhouse's iframe widget. JobsPipe indexes every public Greenhouse board it can identify and normalizes the data into the same JSON shape as every other source.

## Workarounds

### Hit boards-api.greenhouse.io/v1/boards/<company>/jobs

Works when the customer keeps a public board enabled and you already know their slug. There's no list endpoint to enumerate Greenhouse customers.

### Onboard the Harvest API per tenant

Required if you want applicants and pipeline state, not just postings. Each customer must mint you a Harvest key - does not scale to aggregation.

### Use JobsPipe

Every public Greenhouse board, one endpoint. Free monthly credits included.

## Fields available on every record

- `id`
- `source`
- `tenant`
- `title`
- `company`
- `location`
- `salary`
- `employment_type`
- `remote`
- `posted_at`
- `expires_at`
- `apply_url`
- `description`

## Sample response

```json
{
  "id": "gh_NzM0NTY3ODktYW",
  "source": "greenhouse",
  "tenant": "stripe",
  "title": "Software Engineer, Payments Infrastructure",
  "company": "Stripe",
  "location": {
    "city": "New York",
    "region": "NY",
    "country": "US",
    "remote": false
  },
  "salary": {
    "min": 198000,
    "max": 297000,
    "currency": "USD",
    "period": "year",
    "source": "explicit"
  },
  "employment_type": "full_time",
  "posted_at": "2026-05-12T16:04:00Z",
  "expires_at": null,
  "apply_url": "https://boards.greenhouse.io/stripe/jobs/...",
  "description": "Stripe is hiring a Software Engineer on Payments Infrastructure to build and operate the systems that move money for businesses around the world ..."
}
```

## FAQ

### What is the Greenhouse Harvest API?

The Harvest API is Greenhouse's private REST API for a customer's own account - candidates, applications, internal job records, offers, and scorecards - authenticated with a per-customer key over HTTP Basic auth. It is built for one company automating its own hiring workflow, not for reading postings across companies. For public postings across every Greenhouse board, JobsPipe's normalized feed is the aggregation layer.

### Greenhouse Harvest API vs Job Board API - which does JobsPipe use?

JobsPipe consumes only public postings, equivalent to what the Job Board API surfaces. We never touch Harvest endpoints, so applicant data, scorecards, and pipeline state stay private to each customer's Greenhouse account.

### Do I need a Greenhouse API key to use JobsPipe?

No. The Greenhouse Job Board API is unauthenticated, and JobsPipe's index is built on top of public data. You only need a JobsPipe key.

### How fresh is Greenhouse data on JobsPipe?

Every public Greenhouse board is re-crawled at least every 24 hours; high-volume boards (over ~200 active postings) are refreshed every 6 hours.

### Can I filter to one Greenhouse company?

Yes. "company_name_partial_match_or": ["stripe"] in the JSON body of POST /v1/jobs/search filters results to Stripe's Greenhouse postings. Substitute any company name.

## Greenhouse Harvest API

The Greenhouse Harvest API is the private, full-access half of Greenhouse's API surface. It lives at harvest.greenhouse.io/v1, authenticates over HTTP Basic auth with an API key minted by a customer admin (Configure > Dev Center > API Credential Management), and exposes the complete ATS: candidates, applications, internal job records, offers, scorecards, scheduled interviews, and users. Rate limits sit at 50 requests per 10 seconds per key, and each key's permissions are scoped when it is created. What the Harvest API is not: a path to job postings across companies. Every key is bound to one customer's account, and published openings are the one resource Greenhouse already exposes publicly through the Job Board API. If you searched 'Greenhouse Harvest API' looking for postings data, you are on the wrong half of the surface - JobsPipe aggregates every public Greenhouse board into one normalized endpoint, no Harvest credentials involved.

## Greenhouse API documentation

Greenhouse's developer documentation lives at developers.greenhouse.io. The Harvest API docs cover the OAuth-scoped private surface - candidates, applications, jobs (internal view), scorecards. The Job Board API docs at developers.greenhouse.io/job-board.html cover the unauthenticated public surface - published openings, departments, offices. The two are easy to confuse because both call themselves the 'Greenhouse API'. JobsPipe's normalized schema is documented at /docs and lines up with every other source, so you only learn one shape.

## Greenhouse API key

The Greenhouse Job Board API does not require an API key - it's public by design. The Harvest API requires a key minted inside the customer's Greenhouse admin under Configure → Dev Center → API Credential Management. Job Board responses include only the fields a customer chose to publish; Harvest exposes the full record. JobsPipe never requests Harvest credentials and only consumes what the customer has already chosen to make public.

## Greenhouse Job Board API

boards-api.greenhouse.io/v1/boards/<company>/jobs returns a JSON array of published openings for one Greenhouse customer, no authentication required. Useful when you know the board token (the customer's Greenhouse 'board name') and only need that one company. JobsPipe's value lives in the layer above: discovering board tokens across thousands of public Greenhouse customers, handling vanity careers domains, and normalizing the Job Board response into the same shape as Workday, Lever, Indeed, and 30+ other sources.

## Greenhouse webhooks

Greenhouse webhooks are configured inside a customer's own account (Configure > Dev Center > Webhooks) and fire on that account's hiring events - candidate stage changes, hires, job creation and updates. Like Harvest keys, they are per-customer: there is no way to subscribe to posting changes across Greenhouse customers you don't administer. For that cross-customer case, JobsPipe emits its own webhook events - new, updated, and closed - for every public Greenhouse board we index, in the same JSON shape as our REST responses, so 'notify me when any Greenhouse customer posts a matching role' is one subscription instead of thousands of impossible ones.

## In-depth guides

- https://jobspipe.dev/guides/greenhouse-jobs-api

## Related

- **Product:** https://jobspipe.dev/jobs-api
- **All sources:** https://jobspipe.dev/sources
- **Docs:** https://jobspipe.dev/docs
- **Sign up (free tier):** https://jobspipe.dev/signup

---
Generated from structured data. View the rendered page at https://jobspipe.dev/sources/greenhouse.