Greenhouse Jobs API.
A developer’s reference to the public Greenhouse jobs feed - how it works, what fields you get, where it breaks down at scale, and how it fits into a broader jobs-data stack.
The short answer
Greenhouse has two APIs and the confusion costs people days of integration work. The Job Board API is the public, read-only feed of any Greenhouse customer’s published jobs. The Harvest API is the private, authenticated API that gives full access to candidates, applications, and the recruiting workflow inside a specific customer’s account.
If you want to read job postings - across one company or many - you want the Job Board API. If you want to build a recruiting or ATS-integration product that reads candidates or writes data back, you want Harvest. Different surfaces, different auth, different problems.
The Job Board API at a glance
| Aspect | Value |
|---|---|
| Endpoint | boards-api.greenhouse.io/v1/boards/{board_token}/jobs |
| Auth | None - public read |
| Format | JSON |
| Cost | Free |
| Scope | One customer at a time (per board_token) |
| Rate limit | Unpublished; reasonable polling works, hammering gets blocked |
Fields you get
The Job Board API returns a stable but limited schema per posting. The common fields are id, title, updated_at, location (a single string),absolute_url (the apply link), and a structured departments and offices array. Some boards expose content (the job description, HTML-escaped) and metadata (custom fields the employer set), but both are optional and inconsistent across boards.
Notably not in the schema: salary, employment type (full-time / contract), remote flag, posted_at date (you get updated_at, not posted_at), expires_at date. Some employers include these in the content body or in custom metadata, but they aren’t first-class. If your workflow needs structured salary or remote data, you’ll be parsing free-text job descriptions or relying on a layer that does that for you.
Where it breaks at scale
The Job Board API is excellent for monitoring a small set of companies you care about. It breaks down for three things at scale.
Discovery. You need to know each company’s board_token in advance. There is no master list, no search endpoint, no way to enumerate every Greenhouse customer through the API. You collect tokens by scraping careers pages or by maintaining a manual list.
Coverage. Greenhouse is one of many ATSs. Lever, Ashby, Workday, SmartRecruiters, BambooHR, Workable, JazzHR and 20+ others all run their own ATSs with their own APIs and schemas. To cover the ATS landscape you have to integrate each one separately, normalize the schema, and handle each one’s rate-limit posture.
Freshness. The Job Board API is poll-only - no webhooks. You discover new postings by re-fetching every board on a schedule and diffing. For real-time triggers (a sales workflow that fires when a target account posts a role) polling is the wrong shape.
When to use it directly vs through a unified API
Use the Job Board API directly if you’re monitoring fewer than ~20 specific employers, you only care about Greenhouse, the polling cadence is loose (daily or slower), and you don’t need salary, employment type, or other structured fields beyond what the API publishes.
Use a unified jobs API like JobsPipe if you need cross-ATS coverage (Greenhouse + Lever + Ashby + Workday and so on), real-time webhooks on new postings, normalized salary and employment-type fields, or per-source attribution that lets you trace records back to the original ATS for debugging. We cover Greenhouse natively as part of a 30+ source surface, so you get the same Greenhouse data plus everything else behind one schema.
A first request, by hand
For a one-off look at any Greenhouse-hosted company’s jobs, no signup required:
# Replace {board_token} with the company's board id
curl https://boards-api.greenhouse.io/v1/boards/stripe/jobs
# Returns { "jobs": [ ... ] } with all currently-published rolesThat endpoint is unauthenticated and returns whatever the company has chosen to publish. The same shape works for any Greenhouse-hosted board - just swap the token.
FAQ
Does Greenhouse have a public jobs API?+
Yes - the Greenhouse Job Board API. It's the public, unauthenticated read API for any company's published jobs on Greenhouse. The endpoint is boards-api.greenhouse.io/v1/boards/{board_token}/jobs and returns JSON. No API key, no signup, no rate negotiation. The catch: you only get the company's published jobs, you need to know each company's board_token, and you're rate-limited at the source.
What's the difference between the Job Board API and the Harvest API?+
The Job Board API is public, free, and read-only - the consumer-facing jobs feed. The Harvest API is the private, authenticated, full-fidelity API that gives access to candidates, applications, scorecards, custom fields, and the recruiting workflow. Harvest requires per-customer OAuth authorization. They solve completely different problems.
How do I find a company's Greenhouse board_token?+
Look at the URL of their careers page. If they use a Greenhouse-hosted board it'll be boards.greenhouse.io/{board_token}; if they embed it on their own domain you can usually inspect the page source for the same token. Some companies use custom domains that hide it - in that case the API isn't usable without finding the token through another path.
What rate limits apply to the Job Board API?+
Greenhouse doesn't publish an explicit rate limit on the public Job Board API but does throttle abusive callers. Reasonable polling - per-board every few hours - works fine indefinitely. Hammering many boards in tight loops will eventually get you blocked. Cache aggressively and respect any Retry-After headers you see.
Can I get job postings across all Greenhouse customers in one call?+
No. The Job Board API is scoped per customer (per board_token). To read jobs across many Greenhouse-hosted companies, you have to know every board_token and poll each one separately. There's no cross-tenant listing. This is the main reason teams reach for a unified jobs API once they need broad coverage.
Do I need Greenhouse permission to use the Job Board API?+
No, it's public. The endpoint is unauthenticated and the data is what each customer has chosen to publish on their careers page. You can use it without contacting Greenhouse. Be respectful with rate - the API is a service to Greenhouse customers, not to you.
Why use a jobs API instead of just hitting Greenhouse directly?+
Because in production you usually need more than Greenhouse. Cross-source coverage (Lever, Ashby, Workday, SmartRecruiters, Workable, BambooHR, etc.) is the main reason - each ATS has a different API with a different schema, different auth, and different rate-limit posture. A unified jobs API normalizes them behind one schema, handles per-source rate limits and webhooks, and ships you real-time updates instead of polling.
Does JobsPipe cover Greenhouse?+
Yes - Greenhouse is one of the 30+ sources we cover. Postings come through with explicit source: 'greenhouse' attribution and the original board_token preserved in the tenant field, so you can filter or trace records back to the source. Real-time webhook delivery on new postings, no polling required.
Greenhouse plus 30+ other sources behind one schema. Free tier, no credit card.
Get a free API key