ATS job feed recipes

Working code for pulling job postings straight out of company applicant tracking systems — Greenhouse, Lever, Workday, Ashby, Workable, SmartRecruiters, Breezy, Personio, Pinpoint and Rippling — and doing something useful with them.

Source: github.com/HwangByeongSeon/ats-job-feed-recipes. Every script runs as-is.

export APIFY_TOKEN=...        # https://console.apify.com/settings/integrations
python python/new_jobs_to_csv.py

Why this exists

Each of these platforms publishes an open JSON endpoint that the company's own careers page reads — no key, no login, no scraping of rendered HTML. The awkward parts are everything around that.

Recipes

FileWhat it does
javascript/watch-companies.mjsDiff a shortlist between runs — what opened, what closed
javascript/salary-data.mjsPostings that publish a pay range, normalised to an annual figure
python/one_company.pyEvery open role at one company, from its careers URL
python/new_jobs_to_csv.pyOnly postings that appeared since the last run, appended to CSV

These scripts call Apify Actors that bill per row delivered. Every script caps itself at a couple of hundred rows and reads MAX_ROWS if you want more, so running an example does not produce a surprise bill.

Coverage behind the Actors

The registry the Actors bundle, as re-validated on 2026-08-19. It is a list of which company slug sits on which platform — the part that is not available anywhere publicly.

PlatformBoardsLive postings
Greenhouse5,578179,052
Personio5,17241,685
SmartRecruiters4,334363,544
Breezy HR2,80047,301
Workday2,658595,820
Lever1,91763,622
Workable1,71077,339
Ashby1,59632,007
Rippling1,29818,647
Pinpoint61818,235
Total27,6811,437,252

Raw endpoints

If you would rather call the platforms directly, these are the public endpoints. All of them answer without a key. Replace {company} with the board slug.

PlatformEndpoint
Greenhousehttps://boards-api.greenhouse.io/v1/boards/{company}/jobs?content=true
Leverhttps://api.lever.co/v0/postings/{company}?mode=json
Ashbyhttps://api.ashbyhq.com/posting-api/job-board/{company}?includeCompensation=true
SmartRecruitershttps://api.smartrecruiters.com/v1/companies/{company}/postings?limit=100&offset=0
Workablehttps://apply.workable.com/api/v1/widget/accounts/{company}?details=true
Breezyhttps://{company}.breezy.hr/json
Personiohttps://{company}.jobs.personio.de/search.json
Pinpointhttps://{company}.pinpointhq.com/postings.json
Ripplinghttps://api.rippling.com/platform/api/ats/v1/board/{company}/jobs
WorkdayPOST https://{tenant}.{cluster}.myworkdayjobs.com/wday/cxs/{tenant}/{site}/jobs

Two things that will bite you if you write your own client:

The Actors these recipes call

The flagship is also reachable as a remote MCP server at https://mcp.apify.com/?tools=starbright_overlap/ats-job-feed.