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

Multi-ATS Jobs API: Greenhouse, Lever, Ashby, Workable & more

Pricing

Pay per event

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

Multi-ATS Jobs API: Greenhouse, Lever, Ashby, Workable & more

Get job postings from 7 ATS job boards in one normalized feed: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio. Paste board URLs or company domains, the ATS is auto-detected. Salary, remote, filters, only-new mode.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Rod Services

Rod Services

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Multi-ATS Jobs API collects job postings straight from the official public job board APIs of 7 applicant tracking systems: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee and Personio. You get one clean, normalized feed with title, department, locations, remote status, employment type, salary ranges when published, dates, apply links and the full description.

Paste ATS board URLs, careers page URLs or just company domains. The Actor finds the ATS behind the careers page for you. It is built for job aggregators, recruiting and sales teams, labor market research and AI agents that need fresh job data without maintaining seven scrapers.

$1.20 per 1,000 jobs. No browser, no proxy, no API keys.

What does Multi-ATS Jobs API do?

  • Reads the public job board APIs that Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee and Personio provide for career sites.
  • Auto-detects the ATS from a careers page or a domain like figma.com or notion.so, including jobs embedded as JSON or iframes.
  • Normalizes every job into the same 22 fields, so a Lever job and a Personio job look the same in your database.
  • Filters by keyword, location, remote, department and posting date.
  • Only new jobs mode remembers what it returned before, so a daily schedule gives you just the new postings.
  • Runs on the Apify platform: API access, scheduling, webhooks, integrations (Make, Zapier, n8n, Google Sheets, Slack), monitoring and the Apify MCP server for AI agents.

Why use this job board scraper?

  • Job aggregators and job boards: fill a niche board (remote, AI, climate, Berlin startups) from hundreds of company career pages.
  • Recruiting and staffing: track which companies open roles in your field, and reach them first.
  • Sales intelligence: hiring is a buying signal. A company hiring 20 data engineers needs data tools.
  • Labor market data: salary ranges, remote share, skills in demand, hiring velocity per company.
  • AI agents and LLM apps: give an agent a list of companies and get structured, fresh job data through one tool call.
  • One Actor instead of seven: most alternatives cover one ATS per Actor or three at most.

How to scrape jobs from Greenhouse, Lever, Ashby and more

  1. Open the Input tab.
  2. Add companies, one per line. Any of these work:
    • Board URL: https://boards.greenhouse.io/gitlab, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/linear
    • Shorthand: greenhouse:airbnb, lever:palantir, ashby:openai, workable:huggingface, smartrecruiters:BoschGroup, recruitee:bunq, personio:holidu
    • Careers page: https://linear.app/careers
    • Domain: figma.com
  3. Optional: add keywords, locations or turn on Remote jobs only.
  4. Click Start. The prefilled example (3 companies, 20 jobs each) finishes in a few seconds.
  5. Download the jobs as JSON, CSV, Excel or HTML, or read them through the API.

For monitoring, turn on Only new jobs since last run and create a schedule (daily or hourly).

Input

FieldWhat it does
companiesBoard URLs, ats:slug, careers page URLs or domains. Required.
keywordsKeep jobs whose title, department or team contains any word. Short words like AI or QA match whole words only.
excludeKeywordsDrop jobs whose title contains any word (intern, director).
locationsKeep jobs whose location contains any text (Berlin, Germany, United States). Add remote to include remote jobs.
departmentsKeep jobs in matching departments or teams.
remoteOnlyOnly remote jobs.
postedWithinDaysOnly jobs first published in the last N days.
onlyNewReturn only jobs not returned in earlier runs. Seen IDs are kept per company in a named key-value store.
stateStoreNameName of that store. Use one per schedule.
includeDescriptionPlain text description (default on).
includeDescriptionHtmlOriginal HTML description (default off).
maxJobsPerCompanyCap per company after filters, newest first. 0 = all.
probeSlugsIf a careers page shows no ATS link, try the domain name on each ATS (stripe.com -> stripe).
maxConcurrencyCompanies processed in parallel (default 5).

Example input:

{
"companies": ["https://boards.greenhouse.io/gitlab", "lever:spotify", "notion.so"],
"keywords": ["engineer", "data"],
"locations": ["remote", "Germany"],
"postedWithinDays": 14,
"onlyNew": true
}

Output

One dataset item per job. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

{
"jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"ats": "ashby",
"company": "Ramp",
"companySlug": "ramp",
"title": "Security Engineer, Cloud",
"department": "Engineering",
"team": "Backend",
"locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],
"isRemote": true,
"workplaceType": "hybrid",
"employmentType": "full-time",
"salaryMin": 211400,
"salaryMax": 290600,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"postedAt": "2026-04-07T17:12:35.753Z",
"updatedAt": null,
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",
"jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams...",
"fetchedAt": "2026-09-27T12:11:30.391Z"
}

A SUMMARY record in the key-value store lists every input with the detected ATS, board slug, detection method (input, page, careers-link, slug-probe, cached), job counts and errors. Two inputs that point to the same board (greenhouse:gitlab and https://boards.greenhouse.io/gitlab) are fetched and charged once. The second one shows status duplicate.

If the input has no usable company, the run still finishes and the dataset holds one item with error and help fields. That item is not charged.

Data fields

FieldDescription
jobId, ats, companySlugStable ID per ATS board. ats + companySlug + jobId is unique.
companyCompany name from the ATS.
title, department, teamJob title and org unit.
locations[]All locations.
isRemote, workplaceTypeRemote flag and remote / hybrid / onsite.
employmentTypefull-time, part-time, contract, internship, or the ATS label.
salaryMin, salaryMax, salaryCurrency, salaryPeriodPay range when the employer publishes it (Greenhouse, Ashby, Lever, Recruitee).
postedAt, updatedAtISO 8601 dates. updatedAt only where the ATS provides it (Greenhouse, Recruitee).
applyUrl, jobUrlApply form and public job page.
descriptionText, descriptionHtmlFull description as text and optional HTML.
fetchedAtTime of the fetch.

Supported ATS and what each provides

ATSBoard URL exampleSalaryRemote flagNotes
Greenhouseboards.greenhouse.io/gitlabyes, when publishedfrom locationEU boards supported
Leverjobs.lever.co/spotifyyes, when publishedyesEU boards supported, paged by 100
Ashbyjobs.ashbyhq.com/linearyes, when publishedyescompensation tiers mapped
Workableapply.workable.com/huggingfacenoyesone request per board
SmartRecruiterscareers.smartrecruiters.com/BoschGroupnoyesdescription needs one request per job
Recruiteebunq.recruitee.comyes, when publishedyes
Personioholidu.jobs.personio.denofrom office nameXML feed must be enabled by the employer

Teamtailor and Workday are not supported.

How much does it cost to scrape job postings?

Pay per event, no subscription:

  • $1.20 per 1,000 jobs saved ($0.0012 per job).
  • $0.002 per company when the ATS is auto-detected from a careers page or domain. Board URLs and ats:slug are free to resolve. With onlyNew, a detected board is remembered and not charged again.
  • $0.001 per run start.

Examples: the prefill run costs about $0.07. 30 companies with 5,605 jobs cost about $6.73. A daily only-new check of 100 companies with 150 new jobs costs about $0.18 per day. Jobs removed by filters or already seen are not charged. Set Maximum cost per run to cap spending.

Tips

  • Board URLs are fastest and cheapest. Use detection once, then copy ats:companySlug from the output into your input.
  • Turn off includeDescription for quick counts. SmartRecruiters then needs one request per page of 100 jobs instead of one per job.
  • Use maxJobsPerCompany to sample large employers.
  • Politeness is built in: 2 requests per second per ATS host and automatic backoff on HTTP 429.
  • For AI agents: call the Actor through the Apify API or the Apify MCP server with a short company list and includeDescription: true.

FAQ

Is it legal to scrape these job boards? The Actor reads only the public job board APIs that each ATS offers so employers can publish jobs on their own sites. Greenhouse states job board data is publicly available. Lever states published postings "may be scraped by third parties". No login, key or protection is bypassed. You are responsible for how you use the data.

Personal data? Recruiter names and job inbox addresses are dropped. Personal-looking email addresses inside descriptions are replaced with [email removed]. Names that employers write into description text are not removed.

Why was my company not found? The careers page may use an unsupported ATS (Workday, Teamtailor, SAP, own system) or load jobs only after login. Check SUMMARY. If you know the board URL, pass it directly.

Can slug guessing pick the wrong company? Rarely, two companies can share a slug. Boards whose company name clearly differs from the domain are skipped. Boards that publish no company name (some Personio, Lever and Ashby boards) can still match another company with the same name. Check companySlug and company, or pass the board URL.

Feedback or a custom ATS? Open an issue in the Issues tab. Custom integrations are available on request.