If you've ever tried to build a job board, a sourcing tool, or a hiring-trends dashboard, you've hit the same wall: the big job aggregators are stale, rate-limited, and wrapped in anti-bot defenses. The fix most people miss is that thousands of companies publish their open roles through public ATS APIs — Greenhouse, Lever, and Ashby all expose JSON endpoints that anyone can read, no key required.
This post shows the free Python way to pull jobs from each, and a one-click no-code option if you'd rather skip the maintenance.
Why scrape ATS endpoints instead of job boards?
- First-party and fresh — you read the same data that powers the company's careers page, the moment a role opens.
- Working apply links — every job links to the real application.
- No blocking — these are public JSON APIs, so no proxies or headless browsers.
Greenhouse jobs API (Python)
Greenhouse exposes a board endpoint per company token:
import httpx
company = "stripe" # the slug in boards.greenhouse.io/<slug>
url = f"https://boards-api.greenhouse.io/v1/boards/{company}/jobs?content=true"
jobs = httpx.get(url, timeout=30).json()["jobs"]
for j in jobs[:5]:
print(j["title"], "—", j["location"]["name"], "—", j["absolute_url"])
content=true includes the full HTML job description.
Lever jobs API (Python)
import httpx
company = "openai" # the slug in jobs.lever.co/<slug>
url = f"https://api.lever.co/v0/postings/{company}?mode=json"
for j in httpx.get(url, timeout=30).json()[:5]:
cats = j.get("categories", {})
print(j["text"], "—", cats.get("location"), "—", j["hostedUrl"])
Ashby jobs API (Python)
import httpx
org = "notion" # the slug in jobs.ashbyhq.com/<slug>
url = f"https://api.ashbyhq.com/posting-api/job-board/{org}"
for j in httpx.get(url, timeout=30).json()["jobs"][:5]:
print(j["title"], "—", j["location"], "— remote:", j.get("isRemote"))
The catch: scale and upkeep
One company is easy. But a useful product needs dozens of companies across all three ATS, normalized into one schema, de-duplicated, filtered by keyword, location, and remote status — and kept running as companies come and go. That's where a maintained tool saves you days.
The no-code option
The ATS Jobs Aggregator on Apify does exactly this: it pulls live jobs from Greenhouse, Lever, Ashby, SmartRecruiters, and Recruitee in one run, normalized into a single dataset, with keyword/location/remote filters and de-duplication built in. It ships with a curated list of well-known companies so it returns results on the first click, and you can drop in your own company slugs to track exactly the employers you care about.
{
"sources": ["greenhouse", "lever", "ashby"],
"keywords": ["engineer", "data"],
"remoteOnly": true,
"maxResults": 500
}
Output is one clean row per job — title, company, location, department, employment type, remote flag, apply URL, and posted date — ready for a spreadsheet, a database, or an LLM.
Common use cases
- Niche job boards — power a regional or role-specific board with fresh listings.
- Sourcing & recruiting — see who's hiring for a role across dozens of companies at once.
- Talent & market intelligence — track hiring velocity and locations by company.
- Sales signals — companies hiring for a function often signal budget and growth.
FAQ
Do I need an API key? No — all three endpoints are public.
How do I find a company's slug? It's in their careers URL: boards.greenhouse.io/<slug>, jobs.lever.co/<slug>, jobs.ashbyhq.com/<slug>.
Is this legal? You're reading publicly published job data. Use it responsibly and within applicable terms.
Building something with job data? The ATS Jobs Aggregator handles the scraping so you can focus on the product.
Top comments (0)