ATS Jobs API — Greenhouse, Lever, Workday & 7 more | $1/1K avatar

ATS Jobs API — Greenhouse, Lever, Workday & 7 more | $1/1K

Pricing

from $1.00 / 1,000 jobs

Go to Apify Store
ATS Jobs API — Greenhouse, Lever, Workday & 7 more | $1/1K

ATS Jobs API — Greenhouse, Lever, Workday & 7 more | $1/1K

Paste any company careers URL and get its open jobs in one clean schema. Auto-detects 10 ATSs (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Personio, Teamtailor, Pinpoint, Gem) via their official public job feeds, extracts salaries, and monitor mode returns only new jobs.

Pricing

from $1.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Steadyrow

Steadyrow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Categories

Share

ATS Jobs API — Greenhouse, Lever, Workday & 7 more ATSs

Paste a careers URL, get clean job data. $1 per 1,000 jobs.

This Actor pulls open positions straight from 10 applicant tracking systems (ATS) and returns them in one unified schema — no matter which ATS the company uses. It detects the ATS from the URL for you, extracts salary ranges, and has a monitor mode that returns only the jobs that are new since your last run.

  • ✅ 10 ATSs, 1 schema — Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Personio, Teamtailor, Pinpoint, Gem
  • ✅ Just paste a URL — board URLs, job URLs, company careers pages that embed an ATS, ats:company identifiers, or a bare company name
  • ✅ Salary extraction — structured pay ranges from Ashby, Lever, Pinpoint and Greenhouse pay transparency, plus ranges parsed from the description (Workday, SmartRecruiters, Workable, Gem…)
  • ✅ Monitor mode — schedule it daily and pay only for new jobs
  • ✅ Official public job-board APIs and feeds — the endpoints and XML/RSS feeds the vendors publish for career sites and job boards. No browser, no proxies, no login → fast and reliable
  • ✅ Filters — keywords, excluded words, location, remote, department, posted within N days
  • ✅ Privacy-safe — no recruiter names or contact details; e-mail addresses inside descriptions are removed

What can I use it for?

  • Job boards & aggregators — feed hundreds of company boards into your site with one schema
  • Job alerts — run daily in monitor mode and push new roles to Slack, e-mail or a Google Sheet
  • Sales intelligence — hiring signals: which companies are hiring for which teams, where, and at what pay
  • Labor-market & salary research — compare roles, locations and pay ranges across companies
  • AI agents — a clean, typed job feed your agent can call through the Apify API or MCP

Supported inputs

Put one source per line in Career pages or ATS boards. Mix ATSs freely.

ATSPaste any of these
Greenhousehttps://boards.greenhouse.io/airbnb, https://job-boards.greenhouse.io/figma, https://job-boards.eu.greenhouse.io/<company>, greenhouse:stripe
Leverhttps://jobs.lever.co/spotify, https://jobs.eu.lever.co/<company>, lever:palantir
Ashbyhttps://jobs.ashbyhq.com/ramp, ashby:openai
Workdayhttps://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, https://wd3.myworkdaysite.com/recruiting/<tenant>/<site>, workday:nvidia.wd5/NVIDIAExternalCareerSite
SmartRecruitershttps://careers.smartrecruiters.com/BoschGroup, smartrecruiters:ServiceNow
Workablehttps://apply.workable.com/european-dynamics/, https://apply.workable.com/katmai/j/<code>, workable:katmai
Personiohttps://1komma5grad.jobs.personio.de, https://ottonova.jobs.personio.com, personio:ottonova
Teamtailorhttps://sats.teamtailor.com/jobs, a Teamtailor career site on the company's own domain (e.g. https://careers.oatly.com/jobs), teamtailor:sats, teamtailor:careers.oatly.com
Pinpointhttps://impulsespace.pinpointhq.com, pinpoint:intermedia
Gemhttps://jobs.gem.com/nominal, gem:function-health
AnyA company's own careers page (we look for the embedded ATS board), or just a name like openai (tried on Greenhouse, Ashby, Lever and SmartRecruiters — for the other ATSs use a URL or an ats: prefix)

Job URLs work too — https://jobs.lever.co/spotify/<job-id> scrapes the whole Spotify board.

Input example

{
"sources": [
"https://boards.greenhouse.io/airbnb",
"https://jobs.lever.co/spotify",
"https://jobs.ashbyhq.com/ramp",
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
"https://careers.smartrecruiters.com/BoschGroup",
"https://apply.workable.com/european-dynamics/",
"https://1komma5grad.jobs.personio.de",
"https://sats.teamtailor.com/jobs",
"https://impulsespace.pinpointhq.com",
"https://jobs.gem.com/nominal"
],
"keywords": ["engineer", "data"],
"excludeKeywords": ["intern"],
"locations": ["United States", "Remote"],
"remote": "any",
"postedWithinDays": 14,
"maxItemsPerSource": 200,
"includeDescription": true,
"monitorMode": false
}
FieldWhat it does
sourcesBoards to scrape (see above). Required.
keywordsKeep jobs whose title contains any of these words (whole word, case-insensitive). Set searchInDescription to also search the description.
excludeKeywordsDrop jobs whose title contains any of these words.
locationsKeep jobs whose location, any secondary location, or country contains one of these words. remote matches remote jobs.
remoteany, remote_only, or exclude_remote.
departmentsKeep jobs whose department or team contains one of these strings.
postedWithinDaysOnly jobs posted in the last N days.
maxItemsPerSource / maxItemsLimits per board / per run (0 = no limit).
includeDescription / includeDescriptionHtmlPlain-text and/or HTML description.
fetchGreenhouseSalaryRead Greenhouse pay-transparency ranges (one extra request per Greenhouse job without a salary in its text).
monitorModeOutput only jobs not delivered in earlier runs.
monitorStateNameName of the store that remembers delivered jobs — use a different name per independent monitor.

Output example

Every job has the same fields, whatever the ATS:

{
"job_id": "ashby:ramp:34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"ats": "ashby",
"company": "Ramp",
"company_board_id": "ramp",
"title": "Security Engineer, Cloud",
"department": "Engineering",
"team": "Backend",
"location": "New York, NY (HQ)",
"locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],
"country": "USA",
"remote": true,
"workplace_type": "hybrid",
"employment_type": "FULL_TIME",
"posted_at": "2026-04-07T17:12:35.753Z",
"updated_at": null,
"salary_min": 211400,
"salary_max": 290600,
"salary_currency": "USD",
"salary_period": "YEAR",
"salary_source": "ats",
"description_text": "About Ramp\n\nRamp is building the smart infrastructure for finance teams…",
"apply_url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",
"source_url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"input": "https://jobs.ashbyhq.com/ramp",
"scraped_at": "2026-10-19T20:21:09.179Z"
}
FieldNotes
job_idStable across runs: ats:board:job.
remotetrue when the job can be done remotely (Ashby "remote allowed", Workable "telecommuting", Lever/SmartRecruiters/Teamtailor/Pinpoint/Gem workplace type, or "Remote" in a location). null when the ATS does not say.
workplace_typeremote, hybrid, onsite, or null when the ATS does not say.
employment_typeFULL_TIME, PART_TIME, CONTRACT, TEMPORARY, INTERN, OTHER, or null.
salary_*salary_source is ats (structured field) or description (parsed from text); all null when no range is published.
posted_atFirst-published date (Workday and Workable: day precision). Pinpoint does not publish a date, so it is null there.

A run summary (per board: listed / output / errors) is saved in the default key-value store as SUMMARY.

Monitor mode: only new jobs

  1. Turn on Monitor mode and save the input as a task.
  2. Add a schedule (e.g. every morning).
  3. The first run returns all matching jobs. Every later run returns only jobs you have not received yet — and you only pay for those.

Delivered job IDs are kept per board in a named key-value store (monitorStateName, default ats-jobs-monitor) for 90 days after a job was last seen. If you run several independent monitors on the same boards, give each task its own monitorStateName.

Pricing

Pay per event — you pay only for what you get:

EventPrice
Job in the dataset$0.001 ($1 per 1,000 jobs)
Actor start$0.002 per run

Examples: 1,000 jobs ≈ $1. A daily monitor on 20 boards that finds 30 new jobs a day ≈ $0.03 + $0.002 per day. Apify's free plan credits cover the first few thousand jobs every month. Set Maximum cost per run on the run to cap spending — the Actor stops cleanly at the limit.

Good to know

  • Workday returns at most ~2,000 jobs per search. For very large Workday sites, add keywords (they are sent to Workday's own search) to get past the cap.
  • Workday does not publish departments, so the departments filter removes Workday jobs.
  • Lever, Ashby, Workday, Pinpoint and Gem do not expose a display name for the company; company is derived from the board name (e.g. nvidia → Nvidia). Greenhouse, SmartRecruiters, Workable, Personio and Teamtailor return the real company name.
  • Personio feeds contain the description only when the company publishes it in its XML feed (often only part of the jobs); the other fields are always there. Personio has no country field.
  • Teamtailor and Pinpoint feeds have no employment type; Pinpoint has no posting date, so postedWithinDays cannot filter Pinpoint jobs (they are kept).
  • Workable short links (apply.workable.com/j/<code>) do not name the company; we open the page to find the account, but pasting apply.workable.com/<account> is faster.
  • SmartRecruiters company IDs are case-sensitive (BoschGroup, not boschgroup). An unknown ID is reported in the log and in SUMMARY.
  • Some company careers pages block automated requests. In that case paste the ATS board URL directly — we never try to bypass bot protection.
  • Requests are rate-limited (about 4 per second per ATS host) to be a good citizen.

The Actor reads public job postings through the ATS vendors' official public job-board APIs — the same endpoints that power the companies' own career pages. It does not log in, does not bypass any protection, and does not output personal data: recruiter names and contact details are never collected, and e-mail addresses inside job descriptions are replaced with [email removed]. You are responsible for how you use the data; if in doubt, consult a lawyer.

Feedback

Missing an ATS or a field? Open an issue on the Actor's Issues tab — requests are usually handled within a few days.