Skip to content

Greenhouse vs Lever vs Ashby job board APIs: which fields each returns

Greenhouse, Lever and Ashby all publish a free public API for job boards, with no key. They don’t return the same fields, and companies don’t fill them equally. We called all three on 2026-11-05, on 29 company boards and 8,406 open jobs, and counted how often each field had a value.

Greenhouse Job Board API Lever Postings API Ashby Public Job Posting API
Endpoint boards-api.greenhouse.io/v1/boards/BOARD/jobs api.lever.co/v0/postings/BOARD api.ashbyhq.com/posting-api/job-board/BOARD
Documentation developers.greenhouse.io github.com/lever/postings-api developers.ashbyhq.com
API key None None None
Add for full data content=true, pay_transparency=true mode=json includeCompensation=true
Unknown board HTTP 404 HTTP 404 HTTP 404
Jobs measured 4,322 on 12 boards 2,279 on 6 boards 1,805 on 11 boards

Lever’s robots.txt asks for one second between requests.

Each cell shows where the API publishes the field and the share of jobs that had a value. These are the Actors’ normalised field names, measured through their mapping.

Field Greenhouse Lever Ashby
title title: 100% text: 100% title: 100%
company company_name: 100% board page title: 61.6% board page title: 92.9%
location location.name: 100% categories.location: 100% location: 100%
country offices[0].location: 49.7% country: 100% address.postalAddress.addressCountry: 97.9%
workplaceType location.name ("Remote", "Hybrid"): 30.2% workplaceType: 100% workplaceType: 77.4%
employmentType metadata["Employment Type"]: 13.4% categories.commitment: 98.9% employmentType: 100%
department departments[].name: 100% categories.department: 86.4% department: 100%
team Not in the API categories.team: 100% team: 100%
datePosted first_published: 100% createdAt: 100% publishedAt: 100%
dateUpdated updated_at: 100% Not in the API Not in the API
salaryMin pay_input_ranges[0].min_cents: 48.6% salaryRange.min: 33.1% compensation.summaryComponents[Salary].minValue: 61.2%
salaryUnit pay_input_ranges[0].title: 45.5% salaryRange.interval: 33.1% compensation.summaryComponents[Salary].interval: 61.2%
description content: 100% descriptionPlain, lists, additionalPlain: 100% descriptionPlain: 100%
applyUrl absolute_url: 100% applyUrl: 100% applyUrl: 100%
requisitionId requisition_id: 93.2% Not in the API Not in the API

Some things to read from this:

  • Greenhouse has no workplace field. The Actor sets workplaceType only when the location says Remote or Hybrid, which gives 30.2%. On Lever it was filled for every job.
  • Greenhouse employment type is company-defined. It comes from custom metadata, so most boards don’t have it: 13.4%.
  • Only Greenhouse has update dates and requisition IDs. Lever and Ashby publish neither.
  • Lever and Ashby don’t publish the company’s name. The Actors read it from the job board page. That page answered HTTP 404 for Veeva, Cursor and PostHog, so those jobs have no company.

The Actors don’t map everything. Greenhouse’s metadata (on 79% of jobs, with company-defined keys) and education (26.6%), and Lever’s salaryDescription (13%), are in the raw APIs but not in the records.

Salary depends on the company, not the platform

Section titled “Salary depends on the company, not the platform”
Platform Company Open jobs Jobs with a salary range
Greenhouse Databricks 926 52.3%
Greenhouse Stripe 761 0%
Greenhouse Anthropic 681 87.2%
Greenhouse Cloudflare 464 0%
Greenhouse Datadog 396 53.8%
Greenhouse Coinbase 278 91.7%
Greenhouse GitLab 243 42.8%
Greenhouse Airbnb 207 84.1%
Greenhouse Reddit 163 80.4%
Greenhouse Figma 145 64.8%
Greenhouse Dropbox 31 77.4%
Greenhouse Discord 27 100%
Lever Veeva 875 0%
Lever Shield AI 659 81.8%
Lever Palantir 309 0%
Lever Zoox 229 93.4%
Lever Sonar 121 1.7%
Lever Spotify 86 0%
Ashby OpenAI 813 79.6%
Ashby Ramp 171 96.5%
Ashby Notion 148 0%
Ashby ElevenLabs 145 0.7%
Ashby Perplexity 139 84.9%
Ashby Cursor 120 0%
Ashby Cohere 118 73.7%
Ashby Vanta 84 57.1%
Ashby Linear 31 41.9%
Ashby Replit 28 89.3%
Ashby PostHog 8 0%

Overall: Greenhouse 48.6%, Lever 33.1%, Ashby 61.2%. These boards aren’t a random sample, so read the per-company rows rather than the platform totals.

These count the jobs with a salary on one board, using the free APIs:

Terminal window
curl -s "https://boards-api.greenhouse.io/v1/boards/discord/jobs?pay_transparency=true" | jq '[.jobs[] | select(.pay_input_ranges | length > 0)] | length'
curl -s "https://api.lever.co/v0/postings/zoox?mode=json" | jq '[.[] | select(.salaryRange)] | length'
curl -s "https://api.ashbyhq.com/posting-api/job-board/ramp?includeCompensation=true" | jq '[.jobs[] | select(.compensation.summaryComponents | map(select(.compensationType == "Salary")) | length > 0)] | length'

On 2026-11-05 those printed 27 of 27, 214 of 229 and 165 of 171.

If you read one platform from your own code, the free API is the right start. The Actors add one record format across the three platforms, so salaryMin means the same on each, and salaries in whole currency units, plain-text descriptions and ISO dates. They also add filters, many boards per run, a free error item per failed board, exports and Apify’s schedules. Together they work as one ATS jobs API. See how to export a Greenhouse board or track new roles daily.