Use the ATS Jobs API Actor. Give it company domains (it finds the ATS for you) or board names per provider. It reads the ATS’s official public job-board endpoints and returns one clean row per job: title, company, location, department, salary when published, posting date and link. Filter by keywords, locations, remote-only or posting date. $1.50 per 1,000 jobs.
Try it: ATS Jobs API on Apify — click Try for free, the input is prefilled.
{
"companyDomains": [
"stripe.com",
"figma.com"
],
"keywords": [
"engineer"
],
"remoteOnly": false
}
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/ats-jobs-api").call(run_input={
"companyDomains": [
"stripe.com",
"figma.com"
],
"keywords": [
"engineer"
],
"remoteOnly": False
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
curl -X POST "https://api.apify.com/v2/acts/om_kh~ats-jobs-api/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"companyDomains": ["stripe.com", "figma.com"], "keywords": ["engineer"], "remoteOnly": false}'
titlecompanylocationdepartmentsalaryposted_atsource (greenhouse / lever / ashby / workday …)source_url$0.0015 per job listing. You only pay for results delivered; set maxTotalChargeUsd to cap a run.
Connect Claude, Cursor or any MCP client to https://mcp.apify.com and add om_kh/ats-jobs-api as a tool.
The agent sends the same JSON input and gets the rows back.
Do I need to know which ATS a company uses?
No, pass the company domain and the Actor detects it.
Is this LinkedIn or Indeed?
No, it reads the company’s own career board, which is usually fresher and complete. For LinkedIn and Indeed there are separate Actors.
Can I get only new jobs?
Yes, turn on monitoring to receive only jobs that appeared since the last run.