ATS Job Feed - Greenhouse, Lever, Ashby, Workable & more avatar

ATS Job Feed - Greenhouse, Lever, Ashby, Workable & more

Pricing

Pay per usage

Go to Apify Store
ATS Job Feed - Greenhouse, Lever, Ashby, Workable & more

ATS Job Feed - Greenhouse, Lever, Ashby, Workable & more

Collect public jobs from Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee. Resolve supported boards from URLs, domains or names. Normalized fields, available salaries and descriptions, filters and new-jobs-only mode.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

ClearPipe Data

ClearPipe Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

ATS Job Feed: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee

Collect open jobs from companies using the six supported applicant tracking systems (ATS) listed below. Paste board URLs, careers pages, websites or plain company names. When the actor resolves a supported board, it reads the public feed and returns normalized jobs with available descriptions and published salaries, subject to your filters and limits.

One actor instead of six. Use the same output fields across the supported platforms. Companies that can't be resolved get an error row with a reason and no job-result event fee. Platform usage charges can still apply. Spending limits, interrupted runs and source or storage failures can leave output incomplete; check the run status and error rows.

What you can do with it

  • Job boards and aggregators. Keep a niche board filled with fresh jobs from a list of target companies.
  • Job alerts. Schedule it daily with Only jobs not seen in earlier runs and use an Apify integration or the API to send the new postings to Slack, email or a sheet.
  • Recruiting and sales signals. Hiring is a buying signal. Track which companies are hiring for which teams, where, and how fast.
  • Market and salary research. Compare roles, locations, remote share and posted pay ranges across companies.
  • Your own job search. Watch the 50 companies you would love to work at and get only what is new.

Supported ATS platforms

ATSExample inputNotes
Greenhousehttps://boards.greenhouse.io/airbnb, embedded boardsdepartments, offices, workplace type
Leverjobs.lever.co/spotifyteam, commitment, all locations, salary range when posted (US and EU instances)
Ashbyhttps://jobs.ashbyhq.com/openaisalary ranges and remote flag when posted
Workableapply.workable.com/huggingfacefunction, remote flag
SmartRecruitershttps://jobs.smartrecruiters.com/ServiceNowexperience level; descriptions fetched per job
Recruiteebunq.recruitee.comremote / hybrid / on-site, salary when posted

Input

Companies, one per line, any mix of:

You pasteWhat happens
A job board URLused directly (most reliable)
A careers page URL, e.g. https://example.com/careersthe page is scanned for a supported board link or embed
A website, e.g. notion.sothe site and its /careers and /jobs pages are scanned, then common board names are tried
A company name, e.g. Stripecommon board names are tried on every supported ATS; the board with the most jobs is selected; similar names can resolve to the wrong company, so check company and boardSlug, or supply the exact board URL

Filters (all optional): Title contains any of, Title excludes, Location contains any of, Remote jobs only, Posted within (days), Max jobs per company.

Example input:

{
"companies": ["https://boards.greenhouse.io/airbnb", "jobs.lever.co/spotify", "notion.so", "Ramp"],
"titleKeywords": ["engineer"],
"locations": ["United States", "remote"],
"postedWithinDays": 30,
"onlyNewJobs": false
}

Output

One row per saved job. Illustrative example with shortened values:

{
"status": "ok",
"company": "Ramp",
"ats": "ashby",
"boardSlug": "ramp",
"jobId": "4a1c...",
"title": "Security Engineer, Cloud",
"department": "Engineering",
"team": "Security",
"location": "New York, NY (HQ)",
"locations": ["New York, NY (HQ)"],
"country": "United States",
"isRemote": true,
"workplaceType": "remote",
"employmentType": "FullTime",
"postedAt": "2026-04-07T17:12:35.753000+00:00",
"url": "https://jobs.ashbyhq.com/ramp/...",
"applyUrl": "https://jobs.ashbyhq.com/ramp/.../application",
"salaryMin": 211400,
"salaryMax": 290600,
"salaryCurrency": "USD",
"salaryInterval": "1 YEAR",
"salarySummary": "$211.4K – $290.6K • Offers Equity",
"descriptionText": "About Ramp ...",
"scrapedAt": "2026-10-10T23:40:00+00:00"
}

Fields an ATS does not publish can be null or absent. Salary fields are filled only when the company posts pay on its board (common on Ashby and Lever, required by law in several US states).

A company that can't be resolved returns one error row without a job-result event fee:

{ "input": "Some Company", "status": "error", "errorCode": "ATS_NOT_DETECTED", "error": "No Greenhouse, Lever, Ashby, ... board found. Paste the careers page or job board URL for best results." }
errorCodeMeaning
ATS_NOT_DETECTEDNo supported board found from that input. Paste the careers page or board URL instead.
NOT_FOUNDThe board URL points to a board that doesn't exist (wrong slug, or the company left that ATS).
UPSTREAM_ERROR / NETWORKThe ATS returned an error or timed out on all 3 attempts. Try again later.

Scheduled feeds (only new jobs)

Turn on Only jobs not seen in earlier runs and schedule the actor (Apify Console, Schedules). Successful sequential runs skip job IDs already delivered for the same input company list. Changing the input company list starts a fresh history. A run with no new matching jobs can succeed with an empty dataset. Skipped jobs incur no job-result event fee; platform usage can still apply.

Avoid overlapping runs of the same feed: concurrent runs do not share a lock. Storage failures or interruptions can also affect history persistence. This is not an exactly-once delivery guarantee.

History identifies each job by ATS platform + board slug + job ID. Editing a previously delivered job's title or location does not make it new. A repost with a new ID, or the same role on another board, can be delivered again. Closed jobs disappear from the upstream feed; this actor does not emit closure records. To reconcile closures, compare full snapshots with onlyNewJobs disabled, and account for incomplete runs before removing jobs.

Dates: postedAt comes from the ATS publication or creation date, not the actor's first-seen time. A missing date remains null. The Posted within (days) filter keeps jobs with missing or unparseable dates; check postedAt if you require confirmed recent postings.

Spending limits: reaching the event spending limit stops further job delivery. The run can still succeed; its final status warns that output may be incomplete. A successful run status alone does not establish that every company or job was collected.

Pricing

Free during launch. Apify platform usage still applies. The implemented paid event is one saved successful job row; error rows and skipped jobs do not trigger that event. Published pricing determines whether event fees apply. Check the Actor's current pricing before running it.

How it works

The actor reads public job feeds from supported ATS providers without rendering pages in a browser. Direct board URLs reduce dependence on careers-page layouts; automatic discovery and upstream feeds can still change or fail. Only publicly posted jobs are returned.

FAQ

A company I need isn't found by name. Paste its careers page URL. If its jobs are on Workday, iCIMS, Taleo or another ATS not in the table above, they aren't supported yet. Tell us in the Issues tab which one you need.

How fresh is the data? It is read live from the ATS at run time.

What happens when an ATS rate-limits requests? Feed requests retry HTTP 429, server errors and network failures up to three attempts with fixed increasing delays. There is no unlimited retry or Retry-After handling. An exhausted request returns an error row containing the final error, not a per-attempt history. A failed SmartRecruiters description request is logged and can leave the saved job without its description.

Can I use a large company list? Companies are processed in parallel within the concurrency setting. Large lists may need longer runs; check the run status and output because spending limits, source failures and interruptions can leave a list incomplete.

Support

Open an issue in the Issues tab with the input you used and the run link.