Greenhouse vs Lever vs Ashby: Which ATS Has the Best Public Job API?
Greenhouse, Lever, and Ashby all expose public job board APIs with no authentication. A field-by-field comparison of what each returns, their limits, and how to pull all three into one dataset.
The actor referenced in this article. Pay only for results delivered.
Greenhouse, Lever, and Ashby are three of the most widely used applicant tracking systems in the technology industry. All three expose public job board APIs — no API key, no OAuth, no headers required. You can query the job postings for any company using these ATSes with a single GET request.
TL;DR: Greenhouse, Lever, and Ashby all provide zero-auth public job APIs. Lever includes descriptions and remote/hybrid field in the list response (no second request needed). Greenhouse requires a second request per job for descriptions. Ashby has a first-class
isRemoteboolean and is growing fast among funded startups. None include salary data in structured fields.
This is one of the most useful and underutilized public APIs in recruiting tech. Here is a complete comparison of what each ATS returns and how to use it.
Greenhouse Public API
Endpoint pattern: https://boards-api.greenhouse.io/v1/boards/{company_slug}/jobs
The company_slug is typically the company’s subdomain on Greenhouse. Stripe is stripe, Airbnb is airbnb, Notion is notion.
curl https://boards-api.greenhouse.io/v1/boards/stripe/jobs
Response structure:
{
"jobs": [
{
"id": 4567890,
"title": "Senior Software Engineer",
"location": {"name": "San Francisco, CA"},
"updated_at": "2025-05-15T10:23:00.000Z",
"absolute_url": "https://boards.greenhouse.io/stripe/jobs/4567890",
"departments": [{"id": 1, "name": "Engineering"}],
"offices": [{"id": 2, "name": "San Francisco"}]
}
]
}
Getting job descriptions: The list endpoint does not include descriptions. You need a second request per job:
curl https://boards-api.greenhouse.io/v1/boards/stripe/jobs/4567890
This returns the full job description as HTML in the content field.
What Greenhouse does well: Structured department and office taxonomy, consistent company slugs, reliable uptime. Greenhouse is the most mature of the three APIs.
Limitations: No salary data. Location is a single string, not a structured address. No remote/hybrid/office indicator in the base response.
Lever Public API
Endpoint pattern: https://api.lever.co/v0/postings/{company_slug}?mode=json&limit=200
curl "https://api.lever.co/v0/postings/netflix?mode=json&limit=200"
Response structure:
[
{
"id": "abc123-def456",
"text": "Staff Machine Learning Engineer",
"categories": {
"team": "AI Platform",
"location": "Los Angeles, CA",
"workplaceType": "hybrid",
"department": "Engineering"
},
"description": "<p>Full job description HTML</p>",
"descriptionPlain": "Full job description as plain text",
"hostedUrl": "https://jobs.lever.co/netflix/abc123-def456",
"createdAt": 1715789000000
}
]
What Lever does well: Lever includes the job description directly in the listing response — no second request required. It also includes workplaceType (remote/hybrid/in-person) in the categories object, which Greenhouse does not. The descriptionPlain field is especially useful for text processing pipelines.
Limitations: IDs are UUIDs, not sequential integers — harder to detect new postings without timestamps. The limit=200 parameter is required; default without it returns only 25 postings.
Ashby Public API
Endpoint pattern: https://api.ashbyhq.com/posting-api/job-board/{company_slug}
Ashby is newer and used by many high-growth startups. Companies like Linear, Figma (partially), and Rippling use Ashby.
curl https://api.ashbyhq.com/posting-api/job-board/linear
Response structure:
{
"organization": {
"name": "Linear",
"jobBoard": {
"url": "https://jobs.ashbyhq.com/linear"
}
},
"jobPostings": [
{
"id": "job_abc123",
"title": "Product Designer",
"teamName": "Design",
"locationName": "Remote",
"employmentType": "FullTime",
"isRemote": true,
"jobDescription": "<p>Description HTML</p>",
"applicationFormDefinition": {...},
"publishedDate": "2025-05-20T00:00:00.000Z"
}
]
}
What Ashby does well: isRemote is a first-class boolean field. Employment type is a structured enum. The organization metadata is useful for enrichment. Ashby is growing quickly and covers many of the best-funded startups.
Limitations: The API sometimes returns jobDescription as null for jobs that redirect to an external application form. Some company slugs are hard to discover without first finding their job board URL.
Auto-Detection: How to Handle All Three
When you are building a job aggregator, you usually know a company name but not which ATS they use. The detection pattern is simple — try Greenhouse first (largest), then Lever, then Ashby:
async function getJobs(companySlug) {
// Try Greenhouse
try {
const res = await fetch(`https://boards-api.greenhouse.io/v1/boards/${companySlug}/jobs`);
if (res.ok) {
const data = await res.json();
if (data.jobs?.length > 0) return { ats: 'greenhouse', jobs: data.jobs };
}
} catch {}
// Try Lever
try {
const res = await fetch(`https://api.lever.co/v0/postings/${companySlug}?mode=json&limit=200`);
if (res.ok) {
const data = await res.json();
if (data.length > 0) return { ats: 'lever', jobs: data };
}
} catch {}
// Try Ashby
try {
const res = await fetch(`https://api.ashbyhq.com/posting-api/job-board/${companySlug}`);
if (res.ok) {
const data = await res.json();
if (data.jobPostings?.length > 0) return { ats: 'ashby', jobs: data.jobPostings };
}
} catch {}
return null;
}
Side-by-Side Comparison
| Feature | Greenhouse | Lever | Ashby |
|---|---|---|---|
| Auth required | None | None | None |
| Description in list | No (2nd request) | Yes | Yes |
| Remote/hybrid field | No | Yes | Yes |
| Salary data | No | No | No |
| Pagination | No | Limit param | No |
| Data format | JSON | JSON | JSON |
| Typical company slug | Company name | Company name | Company name |
Using the Managed Aggregator
Building this detection logic for hundreds of companies, handling pagination, normalizing schemas across three ATSes, and scheduling regular updates is the operational overhead our ATS Jobs scraper eliminates:
from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('themineworks/ats-jobs').call(run_input={
'companies': ['stripe', 'notion', 'linear', 'figma', 'vercel'],
'maxJobsPerCompany': 50,
'includeDescription': True,
})
Output is a unified schema regardless of which ATS each company uses: {ats, company_slug, title, location, remote, department, url, description, publishedAt}.
Frequently Asked Questions
How do you find a company’s Greenhouse, Lever, or Ashby slug?
Company slugs are typically the company’s name in lowercase — stripe, notion, airbnb. You can find the slug by visiting their careers page URL: boards.greenhouse.io/{slug}, jobs.lever.co/{slug}, or jobs.ashbyhq.com/{slug}. If you only know the company name, try all three APIs sequentially — the one that returns results identifies both the ATS and the correct slug.
Do Greenhouse, Lever, and Ashby job board APIs require any authentication?
No. All three provide completely public APIs with no API keys, OAuth tokens, or custom headers required. These APIs are intentionally public — companies want their job postings discoverable and indexable by job aggregators. A single curl or fetch call with no headers returns full structured job listings.
Which ATS is most widely used among technology companies?
Greenhouse is most widely adopted among established technology companies — Stripe, Airbnb, Shopify, Dropbox, and hundreds of others. Lever is popular with mid-market tech companies. Ashby is growing fastest among funded startups and now covers companies like Linear, Rippling, and many Series A and B companies.
How do you detect which ATS a company uses?
Try the APIs in order — Greenhouse first (largest network), then Lever, then Ashby. If all three return empty results, the company may use Workday, Workable, iCIMS, or a custom career page. The company’s job board URL is usually the fastest indicator: look for greenhouse.io, lever.co, or ashbyhq.com in the domain.
Does any ATS job board API include structured salary data?
None of the three — Greenhouse, Lever, or Ashby — include salary information in structured fields in their public job board APIs. Where companies choose to disclose salary ranges, the information typically appears only within the full job description HTML text rather than as dedicated fields.
Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.
Zestimate vs Redfin Estimate: Which Home Value Is More Accurate?
Redfin publishes a 1.85% median error rate on listed homes. What that hides, why Zestimate and Redfin Estimate disagree, and how to test accuracy in your own ZIP.
Best Threads Scrapers Compared (2026): Prices, Success Rates, and What Each One Misses
Eight Threads scrapers on the Apify Store compared with public data: price per 1,000 posts, start fees, run success, ratings, and modes. Including where ours is not the right pick.
X API Pay-Per-Use vs Scraping in 2026: What 10,000 Tweets Actually Costs
X killed the $200/month Basic tier for new developers and moved to metered pricing at $0.005 per post read, capped at 2M reads a month. Here is the real cost math against a pay-per-result scraper, and the cases where the official API is still the right call.