Multi-ATS Jobs Feed: Greenhouse, Lever & Ashby Jobs API avatar

Multi-ATS Jobs Feed: Greenhouse, Lever & Ashby Jobs API

Pricing

$1.50 / 1,000 job postings

Go to Apify Store
Multi-ATS Jobs Feed: Greenhouse, Lever & Ashby Jobs API

Multi-ATS Jobs Feed: Greenhouse, Lever & Ashby Jobs API

One clean feed of job postings from public Greenhouse, Lever and Ashby boards. Salary when posted, remote flag, delta mode for new jobs only, 21-studio games preset. No personal data.

Pricing

$1.50 / 1,000 job postings

Rating

0.0

(0)

Developer

HardwoodLogic

HardwoodLogic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

What it does

Multi-ATS Jobs Feed turns company job boards hosted on Greenhouse, Lever and Ashby into one normalized dataset. Paste board URLs, job URLs, ats:slug shortcuts, bare company slugs, or a company careers page that embeds one of these boards — the Actor detects the ATS, calls that ATS's public job-board API, and returns one row per open posting with the same fields regardless of source: company, title, department, team, employment type, locations, remote/hybrid/onsite, salary range when the employer publishes it, posted date and apply link.

No browser, no login, no proxies. Built-in retries with backoff, per-host rate limiting that respects each ATS's published crawl-delay, duplicate merging, and a delta mode that returns (and charges for) only postings you haven't seen before — ideal for scheduled runs.

Who it's for

  • Recruiting tools & ATS integrators — pull open roles from target companies into your CRM, sourcing tool or Slack alerts.
  • Job aggregators & niche job boards — one schema across three ATSs, with stable posting IDs and apply links back to the source.
  • AI agents (via Apify MCP) — a simple, well-documented input and a typed dataset make it easy for an agent to answer "what is Company X hiring for?" in one tool call.
  • Game-industry job seekers & studios watchers — the one-click Game studios preset covers 21 studio boards (Riot Games, Epic Games, Roblox, Bungie, PlayStation, Naughty Dog, Rockstar Games, Kabam, thatgamecompany and more).

Sources

ATSPublic API usedDocs
GreenhouseGET https://boards-api.greenhouse.io/v1/boards/{board}/jobs?content=true&pay_transparency=true (+ /v1/boards/{board} for the company name)Job Board API
LeverGET https://api.lever.co/v0/postings/{site}?mode=json (EU boards: api.eu.lever.co)Lever Postings API
AshbyGET https://api.ashbyhq.com/posting-api/job-board/{board}?includeCompensation=trueAshby Job Postings API

Other ATSs (Workday, SmartRecruiters, Workable, Recruitee…) are reported as unsupported inputs and skipped. If you paste a company careers page, the Actor reads that one page to find an embedded Greenhouse/Lever/Ashby board.

Game studios preset (21 boards): Greenhouse — Riot Games, Epic Games, Roblox, Bungie, PlayStation (Sony Interactive Entertainment), Naughty Dog, Housemarque, Rockstar Games, 2K, Gearbox, Scopely, KRAFTON, Wildlife Studios, Outfit7, Nordeus · Lever — Kabam, Jam City, Avalanche Studios Group · Ashby — Voodoo, Moon Active, thatgamecompany. Roughly 1,400–1,450 open postings when verified on 2026-10-27.

Input

FieldTypeDefaultWhat it does
sourceslist of strings— (Console prefill: Riot Games, Kabam, thatgamecompany)Board URLs, job URLs, greenhouse:/lever:/ashby: slugs, bare slugs (tried Greenhouse → Lever → Ashby), or careers pages. The three sample boards are used only when the input is completely empty; they are never added to a preset or boards run.
presetnone / gameStudiosnoneAdds the 21 game-studio boards.
boardsJSON array—Advanced: [{"ats":"greenhouse","slug":"riotgames","name":"Riot Games"}]; name overrides the company name.
keywordstring—Comma-separated; keeps postings matching any term in title, department or team.
excludeKeywordstring—Comma-separated; drops postings matching any term.
locationstring—Comma-separated plain-text match on location strings (not geographic: "Canada" won't match "Montreal").
remoteOnlybooleanfalseOnly fully remote roles (hybrid is not remote).
postedSincestring—A date (2026-10-01) or span (7 days, 2 weeks, 1 month).
onlyNewbooleanfalseDelta mode: return only postings not returned in earlier runs.
stateKeystringdefaultSeparate delta memory per schedule or client.
includeDescriptionbooleanfalseAdds a ≤500-character plain-text snippet with contact details scrubbed (best-effort).
dedupeSimilarbooleantrueMerge identical re-posts of the same job.
maxResultsinteger0 (no limit)Stop after this many rows.
maxConcurrencyPerHostinteger 1–52Parallel requests per API host.
minRequestIntervalMsinteger 0–10,000250Minimum gap between requests to one host. Lever hosts always wait at least 1,000 ms (Lever's robots.txt sets Crawl-delay: 1); a larger value raises that floor.
maxRetriesinteger 0–104Retries on 429/5xx/timeouts (honors Retry-After).
requestTimeoutSecsinteger 5–12030Per-request timeout.
maxConcurrentBoardsinteger 1–206Boards fetched in parallel.

Example input

{
"preset": "gameStudios",
"sources": ["https://jobs.lever.co/kabam", "ashby:thatgamecompany"],
"keyword": "engineer, programmer",
"remoteOnly": true,
"postedSince": "30 days"
}

Example output (one row)

{
"company": "Kabam",
"ats": "lever",
"boardSlug": "kabam",
"sourceJobId": "6f9175f3-bbf9-4ab7-bdb7-bfbcf85274b4",
"title": "Concepteur de jeux (Contrat)",
"department": "Design",
"team": "Currently Hiring",
"employmentType": "Contractor",
"location": "Montreal",
"locations": ["Montreal"],
"remote": false,
"workplaceType": "hybrid",
"salaryMin": 40,
"salaryMax": 45,
"salaryCurrency": "CAD",
"salaryPeriod": "HOUR",
"postedAt": "2026-10-02T18:21:15.180Z",
"updatedAt": null,
"applyUrl": "https://jobs.lever.co/kabam/6f9175f3-bbf9-4ab7-bdb7-bfbcf85274b4/apply",
"postingUrl": "https://jobs.lever.co/kabam/6f9175f3-bbf9-4ab7-bdb7-bfbcf85274b4",
"scrapedAt": "2026-10-27T16:14:05.498Z"
}

(Sample row from the Actor README (unchanged in v0.2.1); contains no personal data. descriptionSnippet appears only when includeDescription is on.)

The dataset has two views: Overview and With salary. Each run also writes a summary to the OUTPUT record (per-board status, totals, errors, HTTP stats). A wrong slug is reported and skipped; the run fails only if every board fails.

FAQ

Is this legal? The Actor only calls the public, unauthenticated job-board endpoints that Greenhouse, Lever and Ashby document for publishing jobs (Greenhouse: "Job Board data is publicly available, so authentication is not required for any GET endpoints"; Lever: "all job postings in the published state are publicly viewable. These jobs may be scraped by third parties"). It uses no logins, private APIs or access-control bypasses, never returns candidate data, and skips unlisted Ashby postings. Job content belongs to the employers: link back to applyUrl, and check that your use (for example republishing on a job board, or using text to train AI models) fits each employer's and ATS's terms and your local law. This is not legal advice.

Does it collect personal data? No by design. It reads an allow-list of job fields and never outputs recruiter, hiring-manager or custom-metadata fields. Description snippets are off by default; when on, emails, phone numbers, handles, profile links, URLs and names after contact phrases are removed. That scrubbing is best-effort, so leave snippets off if you need a hard guarantee.

What are the limits? Greenhouse, Lever and Ashby only; only postings the public board shows. Greenhouse has no structured remote flag (inferred from text) and publishes pay without a period (inferred as hourly or yearly for major currencies). Ashby applyUrl is the ATS-hosted page on jobs.ashbyhq.com, not the employer's own site. Location filtering is a plain text match. Careers-page detection reads one page (public http/https addresses only); boards loaded by JavaScript from another domain may be missed — paste the board URL instead. When an employer's own Greenhouse apply link is not https or does not load (currently Nordeus), applyUrl points to the Greenhouse-hosted application form instead. 256 MB handles the full preset; use 512 MB for boards with several thousand postings.

Can I schedule it? Yes. Create an Apify Schedule (e.g. daily) and turn on Only new postings. Each run returns and charges only postings it hasn't returned before for that stateKey; closed postings drop out of memory automatically. Use a different stateKey per schedule or client.

How do I integrate it? Use the Apify API or SDKs (JavaScript/Python) to start runs and read the dataset as JSON, CSV or Excel; connect webhooks, Make, Zapier, n8n, Google Sheets or Slack via Apify integrations; or let an AI agent call it as a tool through the Apify MCP server.

Pricing

$1.50 per 1,000 job postings — you pay $0.0015 for each posting saved to your dataset. No subscription, no separate compute charges on standard runs. Postings are charged as they're saved, and the run stops cleanly at your Max cost per run, so you never pay more than you set.

Example: a run that returns 10,000 job postings costs 10,000 × $0.0015 = $15.00.

Delta mode keeps schedules cheap: with Only new postings on, repeat runs charge only for postings you haven't received before — unchanged postings cost nothing.