If you are building a job board, relevant jobs are the product. Public ATS feeds are one of the most practical ways to get those jobs onto your board quickly and keep them fresh. A small group of applicant tracking systems, or ATSs, expose published jobs through public JSON APIs or XML feeds you can pull without OAuth, partner approval, or employer-by-employer setup.
This guide covers the public ATS sources that are actually useful for a job board, the exact endpoints they expose, and what to do when an ATS does not offer one.
What is an ATS, and what counts as a public job posting API?
An applicant tracking system (ATS) is the software employers use to publish roles, collect applications, and manage the hiring process. Greenhouse, Lever, Ashby, Workable, Recruitee, and Personio are all ATS platforms. If you want the broader distinction between ATS tools and job board software, start there.
For a job board, the part that matters is the public careers layer. A public job posting API is any documented endpoint or feed that lets you retrieve published jobs without asking each employer for API credentials first. In practice, that usually means one of two things:
- a public JSON API
- a public XML job feed
The useful fields are the same either way: title, location, description, department, employment type, updated date, source URL, and apply URL. That is enough to power a board, even if you still need to normalize titles, clean up locations, deduplicate listings, and expire jobs when they disappear from the source.
How job boards actually use public ATS APIs
Most job boards do not build a deep integration into each ATS. They pull the published jobs, store them in their own schema, add their own search and filtering, and then send candidates to the original apply URL.
The basic workflow looks like this:
- Fetch published jobs from the public ATS endpoint or feed.
- Normalize fields like location, workplace type, salary, department, and remote status.
- Deduplicate jobs by source URL, external job ID, or a combination of both.
- Re-sync on a schedule so new jobs appear quickly and closed jobs disappear.
- Display the jobs on your own board with your own search, filters, SEO pages, and monetization.
That is why public ATS APIs are valuable for job boards. They remove the hardest part of direct ATS work, which is authentication and customer-by-customer setup. They do not remove the rest of the operating work. You still need to handle freshness, deduplication, taxonomy cleanup, and source quality. If you want the broader picture, our guides on job feeds, job scraping, job wrapping, and job board aggregators cover the other ways boards get jobs onto the site.
6 ATS platforms with free public job posting APIs or feeds
These are the six documented no-auth options that are actually useful for pulling jobs into a board today.
| Platform | Public endpoint | Format | What you get | Main limitation |
|---|---|---|---|---|
| Greenhouse | GET https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs?content=true | JSON | Published jobs, descriptions, departments, offices, apply URLs, updated timestamps | No native search or filtering |
| Lever | GET https://api.lever.co/v0/postings/{site}?mode=json | JSON | Published jobs, categories, hosted URLs, apply URLs, optional salary fields | You still need to build your own search layer |
| Ashby | GET https://api.ashbyhq.com/posting-api/job-board/{job_board_name}?includeCompensation=true | JSON | Published jobs plus structured compensation summaries | No built-in search or filtering on the public feed |
| Workable | GET https://www.workable.com/api/accounts/{account_subdomain}?details=true | JSON | Published jobs plus job details from the public careers layer | Companion locations and departments come from separate endpoints |
| Recruitee | GET https://{company}.recruitee.com/api/offers/ | JSON | Published jobs, careers_url, careers_apply_url, department and tag filters | Lighter metadata than Greenhouse or Ashby |
| Personio | GET https://{company}.jobs.personio.de/xml?language=en | XML | Published jobs, office, department, employment type, description blocks | XML feed, not JSON |
Greenhouse
Greenhouse is usually the easiest public ATS API to start with. The response includes the fields most job boards need: title, location, departments, offices, description content, updated timestamps, and apply URLs.
1curl "https://boards-api.greenhouse.io/v1/boards/acme/jobs?content=true"
Replace acme with the company's Greenhouse board token.
Example live response from Stripe on April 3, 2026:
12345678910{"id": 7546284,"title": "Account Executive, AI Sales","location": {"name": "San Francisco, CA"},"absolute_url": "https://stripe.com/jobs/search?gh_jid=7546284","updated_at": "2026-04-01T11:46:05-04:00","company_name": "Stripe"}
Lever
Lever is one of the better public JSON APIs if you want basic filtering at the source. It supports parameters like team, department, location, commitment, level, skip, and limit.
1curl "https://api.lever.co/v0/postings/lever?mode=json&limit=20"
Replace lever with the company's Lever site name.
Example live response from Dun & Bradstreet on April 3, 2026:
123456789101112131415{"text": "Account Executive II, SLED (R-18831)","categories": {"commitment": "Employee: Full Time","location": "Remote - United States","team": "Government Relations"},"hostedUrl": "https://jobs.lever.co/dnb/6590549e-d893-4e0e-8934-dda77ef05223","applyUrl": "https://jobs.lever.co/dnb/6590549e-d893-4e0e-8934-dda77ef05223/apply","salaryRange": {"currency": "USD","min": 123100,"max": 206800}}
Ashby
Ashby is the public ATS feed with the cleanest compensation support. If salary matters on your board, includeCompensation=true is the parameter to care about.
1curl "https://api.ashbyhq.com/posting-api/job-board/ashby?includeCompensation=true"
Replace ashby with the company's Ashby job board name.
Example live response from Ashby on April 3, 2026:
12345678910111213{"id": "145ff46b-1441-4773-bcd3-c8c90baa598a","title": "Engineer Who Can Design, Americas","location": "Remote - North to South America","department": "Engineering","workplaceType": "Remote","jobUrl": "https://jobs.ashbyhq.com/ashby/145ff46b-1441-4773-bcd3-c8c90baa598a","applyUrl": "https://jobs.ashbyhq.com/ashby/145ff46b-1441-4773-bcd3-c8c90baa598a/application","compensation": {"compensationTierSummary": "$190K – $255K • Offers Equity • Multiple Ranges","scrapeableCompensationSalarySummary": "$190K - $255K"}}
Workable
Workable's public careers layer is split across a few endpoints. The main one returns the public account and job data, and the companion endpoints return locations and departments.
123curl -L "https://www.workable.com/api/accounts/acme?details=true"curl -L "https://www.workable.com/api/accounts/acme/locations"curl -L "https://www.workable.com/api/accounts/acme/departments"
Replace acme with the employer's Workable account subdomain.
Example live response from Epignosis on April 3, 2026:
12345678{"title": "Customer Onboarding Specialist","shortcode": "072EA3CA72","url": "https://apply.workable.com/j/072EA3CA72","location": null,"department": "Customer Success","employment_type": "Full-time"}
Recruitee
Recruitee exposes a public offers endpoint on each employer subdomain. It is simple to call and works well when you just want published jobs plus the public careers and apply URLs.
1curl "https://acme.recruitee.com/api/offers/"
Replace acme with the employer's Recruitee subdomain.
Example live response from Adamsmithinternational1 on April 3, 2026:
12345678910{"id": 2534691,"title": "Team Leader - HEROS 2 Programme","location": "London, England, United Kingdom","department": "Project Positions","careers_url": "https://adamsmithinternational1.recruitee.com/o/team-leader-heros-2-programme","careers_apply_url": "https://adamsmithinternational1.recruitee.com/o/team-leader-heros-2-programme/c/new","employment_type_code": "contract","remote": false}
Personio
Personio is the main XML-based public source worth knowing about. If your import pipeline already supports XML, it is straightforward to add.
1curl "https://acme.jobs.personio.de/xml?language=en"
Replace acme with the employer's Personio career-site subdomain. Some accounts use .com instead of .de, so check the live career-site hostname before hardcoding it.
Example live response from Personio on April 3, 2026:
123456789<position><id>1834171</id><subcompany>Personio SE & Co. KG</subcompany><office>Munich</office><department>Product and Tech</department><recruitingCategory>Engineering</recruitingCategory><name>Staff Software Engineer, Data Platform</name><employmentType>permanent</employmentType></position>
What to do when an ATS does not have a public API
Most boards do not live on public ATS APIs alone. Once you move beyond the six sources above, you usually combine four different methods:
- public ATS APIs like Greenhouse, Lever, or Ashby
- public XML feeds like Personio or feed-based Recruitee setups
- career-page extraction through job wrapping or job scraping
- pre-built job data sources and job feeds
That is also the point where most operators should stop asking, "Can we integrate one more ATS ourselves?" and start asking, "Do we really want to own this pipeline?"
If your actual goal is to get relevant jobs onto your board, keep them fresh, deduplicate them, and get them indexed, Cavuno is the simpler path. Cavuno already pulls from public ATS APIs, career pages, feeds, and other public job sources, then handles the parts most teams underestimate:
- deduplication by source URL
- expiry when jobs disappear
- company enrichment
- search-ready normalization
- moderated imports when you want editorial control
That is what Backfill is for. You define the kinds of jobs you want, Cavuno imports matching jobs onto the board, and you can review them through job moderation if you want tighter control. Once they are live, you can run the board on your own custom domain and speed up discovery with the Google Indexing API.
If you are building an HR tech product whose value is the integration itself, direct ATS work makes sense. If you are building a job board, the better question is usually how to get reliable job supply without turning source maintenance into your product.
Which public ATS API is best for a job board?
The better question is not which API is "best" in the abstract. It is which ATSs show up in the kinds of companies your board cares about.
- Greenhouse is the highest-leverage place to start for startup, software, and venture-backed company coverage. If your board targets tech, product, engineering, or venture-backed hiring, Greenhouse will show up constantly.
- Lever is common in tech as well, especially among growth-stage companies and teams that want a polished hosted careers experience. It is a good second source after Greenhouse for startup-heavy niches.
- Ashby tends to show up in newer, high-growth startups, especially companies that care about modern recruiting workflows and salary transparency. If your niche overlaps with startup hiring or tech-forward employers, it is worth supporting.
- Workable appears much more often outside the classic venture-backed startup world. It is common among SMBs, agencies, and operational teams that want an easy careers setup without a heavyweight recruiting stack.
- Recruitee is common among SMB and mid-market teams, particularly in Europe. If your board skews toward smaller employers or international hiring outside the US venture ecosystem, it is a useful source.
- Personio matters most when your target employers are in Europe, especially DACH markets. It is less about broad global coverage and more about reaching the companies that already run hiring through Personio.
For most operators, that is enough to prove the concept quickly. After that, the problem stops being "which public ATS has an API?" and becomes "how do we keep jobs clean, current, and useful at scale?" That is the part that determines whether a board feels empty and stale or alive and worth returning to.
![Cover Image for 6 ATS Platforms with Public Job Posting APIs [2026]](/_next/image?url=https%3A%2F%2Frxjnwynbjvtvqdlqdgqy.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fblog-assets%2Fstatic%2F176390be-56d6-4bfd-9c0e-1d64eed62ba0.webp&w=3840&q=55)





