ATS Jobs Scraper

In the Apify Store

Open jobs from company career pages on Workday, Greenhouse, Lever, Ashby, Workable, Recruitee and Personio, as one uniform record per job.

Give it board names, career-site URLs or company domains. It returns every open job in the same fields for all seven vendors, one hiring summary per company, or only the jobs that are new since your last run.

What you get

  • Jobs mode. Every open job as one record: title, department, team, locations, remote flag, seniority, salary range when the employer publishes one, posted date, job and apply links.
  • Signals mode. One row per company: open roles, roles by department, new roles in the last 7 and 30 days, roles that closed, seniority mix and a hiring-spike flag.
  • New-only mode. With a state name, each run returns only the jobs that were not there before. The first run records today's jobs and returns nothing, so you are not charged for the backlog.
  • Filters at the source. Keywords, excluded keywords, departments, locations, remote only, posted within N days.
  • Board lookup from a domain. Enter notion.so and it looks for a linked board of any of the seven vendors on the company's home and careers pages, where the site's robots.txt allows it.

Real output

Job rowReal output from a run on Ramp's Ashby board, trimmed.
{
  "recordType": "job",
  "atsVendor": "ashby",
  "company": "Ramp",
  "boardToken": "ramp",
  "jobId": "0d731586-3626-48fb-9dc5-3061ae5fd240",
  "title": "Customer Experience Associate - London",
  "department": "Customer Experience",
  "team": "CX Frontline",
  "locations": ["London"],
  "isRemote": false,
  "workplaceType": "hybrid",
  "employmentType": "full-time",
  "seniority": "junior",
  "salaryMin": 39000,
  "salaryMax": 43000,
  "salaryCurrency": "GBP",
  "salaryInterval": "year",
  "postedAt": "2026-10-01T18:38:56Z",
  "jobUrl": "https://jobs.ashbyhq.com/ramp/0d731586-3626-48fb-9dc5-3061ae5fd240",
  "applyUrl": "https://jobs.ashbyhq.com/ramp/0d731586-3626-48fb-9dc5-3061ae5fd240/application",
  "sourceUrl": "https://api.ashbyhq.com/posting-api/job-board/ramp",
  "status": "open"
}
Company signal rowReal output for notion.so in signals mode, trimmed.
{
  "recordType": "signal",
  "company": "Notion",
  "domain": "notion.so",
  "atsVendor": "ashby",
  "openRoles": 134,
  "rolesByDepartment": { "Sales": 44, "Engineering": 16, "Outcomes Architect": 14, "People": 11 },
  "seniorRoles": 47,
  "remoteRoles": 0,
  "newLast7d": 10,
  "newLast30d": 29,
  "closedLast30d": null,
  "hiringSpike": false,
  "latestTitles": ["Software Engineer, Mobile Core (Android)", "Forward Deployed Architect", "Product Manager"]
}

Example input

Paste this into the input form, or send it through the API.

{
  "companies": ["stripe", "lever:palantir", "https://jobs.ashbyhq.com/ramp", "workable:huggingface", "recruitee:bunq",
                "personio:matrix42", "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite", "notion.so"],
  "mode": "jobs",
  "keywords": ["account executive", "sales"],
  "postedWithinDays": 30,
  "maxJobsPerCompany": 25
}

Run it from code

One request to the Apify API starts a run and returns the dataset rows when it finishes. Use your own Apify API token. The Apify client libraries and Apify's MCP server work too.

API=https://api.apify.com/v2/acts/tinlark~ats-jobs-hiring-signals
curl -X POST "$API/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["stripe", "lever:palantir"], "mode": "jobs", "maxJobsPerCompany": 25}'

Limits

  • Seven vendors. SmartRecruiters is left out on purpose: its robots.txt disallows automated access to its posting API. BambooHR, Breezy HR, iCIMS, Taleo, Oracle Recruiting, SuccessFactors and others are not supported.
  • Workday: up to 2,000 jobs per career site per run. Some large employers run protected Workday sites that do not answer; those come back as an error row. Sites on myworkdaysite.com are not supported.
  • You supply the companies. It cannot discover companies by itself.
  • Domain lookup is best effort. In a test of 15 well-known company domains it found a board for 9. For the others, enter the board name or URL.
  • Public postings only. Closed jobs can only be reported by comparing with an earlier run, so they need a state name.

Data source

The public job-board endpoints that each vendor provides for company career sites (for example the Greenhouse Job Board API and the Lever Postings API). No login, no browser, no proxy. It follows robots.txt and the vendors' stated crawl delays, and identifies itself as TinlarkBot.

Not affiliated with Workday, Greenhouse, Lever, Ashby, Workable, Recruitee or Personio.

Questions before you start?

Write to [email protected]. Each product page lists what the tool does, what it does not do, and its exact price.