Fast ATS Job Scraper - Greenhouse, Lever, Ashby, Workable avatar

Fast ATS Job Scraper - Greenhouse, Lever, Ashby, Workable

Pricing

from $2.00 / 1,000 job postings

Go to Apify Store
Fast ATS Job Scraper - Greenhouse, Lever, Ashby, Workable

Fast ATS Job Scraper - Greenhouse, Lever, Ashby, Workable

Pull live job postings straight from company career boards on Greenhouse, Lever, Ashby, Workable, Recruitee and SmartRecruiters. Paste a careers URL and the ATS is detected for you. Title, location, department, remote flag and posting date. No API key, no browser, no proxy.

Pricing

from $2.00 / 1,000 job postings

Rating

0.0

(0)

Developer

Andrés Santiso

Andrés Santiso

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Pull live job postings straight from the source: the applicant tracking system that the company itself publishes. Give it a careers URL and the ATS is detected automatically.

Supported boards: Greenhouse, Lever, Ashby, Workable, Recruitee and SmartRecruiters.

Why go to the ATS instead of a job aggregator

Aggregators lag, duplicate and drop postings. The ATS board is the company's own list, so a job appears here the moment the company publishes it and disappears the moment it is filled. No API key, no browser, no proxy.

Input

Paste careers URLs, or use the short board:slug form:

{
"companies": [
"https://boards.greenhouse.io/stripe",
"https://jobs.lever.co/example",
"ashby:ramp",
"https://apply.workable.com/loomly/"
],
"remoteOnly": true,
"titleContains": "engineer",
"includeDescription": false,
"maxJobsPerCompany": 0
}
OptionWhat it does
companiesCareers URL or board:slug. The ATS is detected from the URL.
includeDescriptionAdds the full posting text. Off by default - it makes rows much larger.
remoteOnlyKeeps only postings that look remote.
titleContainsCase-insensitive filter on the job title.
maxJobsPerCompanyCap per company. 0 means no limit.

Output

One flat row per job, with the same shape across all six boards:

{
"title": "Senior Backend Engineer",
"company": "stripe",
"ats": "greenhouse",
"location": "Remote - US",
"isRemote": true,
"department": "Engineering",
"employmentType": "Full-time",
"publishedAt": "2026-07-28T10:04:00+00:00",
"url": "https://boards.greenhouse.io/stripe/jobs/123456",
"jobId": "123456",
"scrapedAt": "2026-08-05T13:20:00+00:00"
}

Dates from six different ATS formats are normalised to ISO 8601 UTC, so you can sort across companies without cleaning anything.

A JOB_SUMMARY record in the key-value store lists every company, how many jobs it returned, and the reason for any that returned none.

No personal data

A job posting is a company, not a person. Recruiter names, hiring-manager names and contact details are never collected, even when the ATS returns them in the same payload.

Honest limits

  • A company that has no open roles returns zero rows. That is not an error - and you are not charged for it.
  • A wrong slug returns HTTP 404. Check the careers URL; it is reported in JOB_SUMMARY.
  • SmartRecruiters does not include the description text in its list endpoint, so description comes back empty for that board even with includeDescription on.
  • Some companies self-host their board behind a custom domain. If the URL is not one of the six supported hosts, it is skipped and listed under skipped.

Pricing

Pay per event: a small charge on start, then per job returned. A run that finds no jobs costs you the start event only - you never pay for rows that do not exist.