DEV Community

Noble Ronin
Noble Ronin

Posted on

I Pulled Live Jobs Straight From OpenAI, Stripe, Airbnb and Bosch — Each Took One API Call

Live jobs from any company's ATS in one API call

I wanted live, structured job listings from a handful of big companies — no LinkedIn middleman, no Indeed anti-bot wall, no headless browser. So I just asked each company's own applicant tracking system (ATS) directly.

Here's what one keyless call returned, live today:

  • OpenAI755 open roles (Ashby)
  • Bosch4,773 (SmartRecruiters)
  • Stripe535 (Greenhouse)
  • Palantir287 (Lever)
  • Airbnb196 (Greenhouse)
  • Spotify108 (Lever)

No sign-up. No API key. No token. No proxy. Every number above came from a plain curl against the company's public board API — the same JSON their own careers page renders from.

Why the ATS, not LinkedIn or Indeed

LinkedIn and Indeed scrapers fight aggressive anti-bot systems. They break, they rate-limit, they silently return half the results, and you spend more time babysitting proxies than using the data.

A company's ATS has no reason to fight you: it's the endpoint its own careers page calls. It's the source of truth, it's fast, and for the big four ATS platforms below it's a clean public JSON API. You just have to know the shape of the call.

The four calls

Greenhouse

The board token is the slug in boards.greenhouse.io/<token>.

curl "https://boards-api.greenhouse.io/v1/boards/stripe/jobs?content=true"
Enter fullscreen mode Exit fullscreen mode

Returns every posting with title, location, department and (with content=true) the full HTML description. Stripe returned 535 live roles; Airbnb, 196.

Lever

curl "https://api.lever.co/v0/postings/palantir?mode=json"
Enter fullscreen mode Exit fullscreen mode

A flat JSON array — Palantir returned 287 postings, each with categories, workplace type and apply URL. Spotify: 108.

Ashby

curl "https://api.ashbyhq.com/posting-api/job-board/openai?includeCompensation=true"
Enter fullscreen mode Exit fullscreen mode

OpenAI's entire board — 755 roles — comes back in one response, compensation bands included where published.

SmartRecruiters

curl "https://api.smartrecruiters.com/v1/companies/BoschGroup/postings?limit=100"
Enter fullscreen mode Exit fullscreen mode

Paginated with limit/offset. Bosch (BoschGroup) exposes 4,773 postings this way — a genuinely large, structured hiring dataset for free.

Nine ATS platforms, one detection-plus-fetch

It's not just the big four

Those are the platforms with the marquee names, but the same "your ATS is already an API" trick works on more:

  • WorkdayPOST to the /wday/cxs/.../jobs CXS endpoint (pass the full board URL)
  • BambooHR{company}.bamboohr.com/careers/list
  • Personio{company}.jobs.personio.com/xml
  • Recruitee{company}.recruitee.com/api/offers/
  • Breezy HR{company}.breezy.hr/json

That's nine ATS platforms, each with a public listing endpoint. The exact URL patterns, response fields and gotchas for all nine are in this cheatsheet:

👉 noble-ronin/ats-job-apis

One honest caveat

Companies migrate. While checking this I hit api.lever.co/v0/postings/brex and got back {"ok":false,"error":"Document not found"} — Brex had moved off Lever. So in practice you want to detect which ATS a company is on before you call it, and fall through the list until one answers.

That detection-plus-fetch across all nine ATS is exactly what I wrapped into an actor, if you'd rather pass a company name and get clean rows out than wire up nine endpoints yourself:

👉 Multi-ATS Job Scraper — give it a company or a careers-board URL, it auto-detects the ATS and returns structured, real-time jobs, with a monitor mode for new postings.

But you don't need it to get started. Pick a company, guess their ATS from the careers-page URL, and run the matching curl above. The odds it just works are better than you'd think.

All counts verified live on 2026-07-25 from an EU IP with no API key. Live numbers will drift as companies open and close roles.

Top comments (0)