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

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

Pricing

from $1.50 / 1,000 job postings

Go to Apify Store
ATS Job Feed: Greenhouse, Lever, Ashby, Workable, Recruitee

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

Get every open job from company career pages on Greenhouse, Lever, Ashby, Workable and Recruitee in one clean format, with salary, location and remote fields. Track new and closed jobs between runs. No personal data.

Pricing

from $1.50 / 1,000 job postings

Rating

0.0

(0)

Developer

Kayorama

Kayorama

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Get every open job from a company's own careers page as clean rows. Paste the job board link (or just type the company name) and the Actor reads the official public job feed of Greenhouse, Lever, Ashby, Workable or Recruitee. Turn on change tracking and schedule it, and each run tells you which jobs are new, which changed and which were taken down.

It reads only the public feeds these job boards publish for career sites. No logins, no captcha solving, no proxies needed. It follows each host's robots.txt and waits between requests.

Good for

  • Watching hiring at competitors, customers or target accounts (sales signals)
  • Feeding a niche job board or a newsletter with fresh roles
  • Tracking how fast a company grows a team, or when it starts hiring in a new country
  • Salary research where the company publishes pay ranges (common on Ashby and Lever)

What you get

One row per job:

FieldExample
companyGitLab
titleSenior Backend Engineer, Plan
department, teamEngineering, Plan
locationRemote, EMEA
locationsall listed locations
countryGB
remote, workplaceTypetrue, remote / hybrid / on-site
employmentTypeFullTime
postedAt, updatedAtISO dates
url, applyUrljob page and apply link
salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryText120000, 150000, USD, year
descriptionText (or descriptionHtml)the job ad itself
ats, boardToken, jobId, requisitionIdwhere the row came from
scrapedAtISO timestamp

When change tracking is on, each row also has:

  • changeType: first_scan, new, updated, unchanged or closed
  • firstSeenAt: when the job first showed up in your runs
  • closedAt: when the job disappeared from the board

Salary fields are filled when the ATS publishes structured pay. If it does not, the Actor looks for a clear range like "$120K - $150K" in the job text.

The dataset has two views: Jobs and Changes. A SUMMARY record in the run's key-value store lists every board with the number of jobs found, rows written, new and closed counts, and any error.

No personal data

The rows hold job facts only. Recruiter and hiring manager names, emails and phone numbers are never copied, and email addresses, phone numbers and mailto or tel links are removed from job descriptions before they are saved.

Input

FieldWhat it does
boardUrlsJob board links, for example https://job-boards.greenhouse.io/gitlab, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/ramp, https://apply.workable.com/huggingface, https://bunq.recruitee.com. Shorthand like lever:spotify also works.
companyNamesCompany names when you do not know the link. The Actor tries likely board names on each ATS and keeps the first one that has jobs.
lookupAtsWhich ATS to try for company names
keywords, excludeKeywordsKeep or drop jobs by words in the title
locations, departmentsKeep jobs whose location or department contains one of these
remoteOnlyOnly remote jobs
postedWithinDaysOnly jobs posted in the last N days
includeDescription, descriptionFormat, maxDescriptionCharsJob text as plain text, HTML or both, with a length cap
trackChangesCompare with the previous run and mark new, updated and closed jobs
outputModeall rows, or changesOnly (new, updated and closed jobs only)
stateStoreNameNamed key-value store that keeps the snapshots between runs
maxJobsPerBoard, maxJobsTotalLimits per board and per run
requestDelayMsWait between requests to the same host (default 1000 ms)

Example:

{
"boardUrls": ["https://jobs.ashbyhq.com/ramp", "lever:spotify"],
"companyNames": ["Notion"],
"keywords": ["engineer", "data"],
"trackChanges": true,
"outputMode": "changesOnly"
}

Change tracking

The first run with trackChanges saves a snapshot of each board and marks rows as first_scan. From the next run on, rows show new, updated or unchanged, and jobs that are gone come back once as a closed row. Schedule the Actor daily and use changesOnly to get a short list of what moved.

Snapshots are kept per board, so you can add or remove boards at any time. Filters only change which rows you see; the snapshot always covers the whole board, so a filter change does not create fake new or closed jobs. If a board is cut short by maxJobsPerBoard, closed jobs are not reported for that run because the Actor could not see the full board.

Pricing

Pay per event:

  • Job posting: each job row written to the dataset (open, new, updated or closed)
  • Job board checked: each board read successfully

Boards that cannot be found, company names that do not match a board, and boards that fail are not charged. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.

Limits and good to know

  • Supported: Greenhouse, Lever (US and EU), Ashby, Workable and Recruitee. Workday, SmartRecruiters and custom career sites are not covered.
  • Lever and Ashby do not publish a company name in their feeds, so company holds the board name (for example ramp) for those boards.
  • If a host answers with HTTP 429, the Actor waits as long as the host asks (Retry-After) up to a cap, then skips that board for the run and says so in the summary.
  • Data comes straight from each company's public job board. If a company hides a job or changes its board name, that shows up in the next run.