Career Page Jobs Scraper & Monitor - Greenhouse, Lever, Ashby avatar

Career Page Jobs Scraper & Monitor - Greenhouse, Lever, Ashby

Pricing

from $2.80 / 1,000 job returneds

Go to Apify Store
Career Page Jobs Scraper & Monitor - Greenhouse, Lever, Ashby

Career Page Jobs Scraper & Monitor - Greenhouse, Lever, Ashby

Open jobs from company careers pages that use an ATS with a public job feed (Greenhouse, Lever, Ashby, Workable, Workday, BambooHR, Teamtailor) or publish JobPosting JSON-LD: title, location, remote, department, salary, job URL. Monitoring returns only new and removed jobs. Unreadable ones are free.

Pricing

from $2.80 / 1,000 job returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

Share

Give this Actor the careers pages (or just the domains) of the companies you care about. It works for companies whose careers page uses an ATS with a public job feed (Greenhouse, Lever, Ashby, Workable, Workday, BambooHR, Teamtailor) or publishes schema.org JobPosting data; it does not work for every company. It reads each company's own site at run time and returns that company's open jobs, one row per job, and says how it read them. In monitoring mode it returns only the jobs that appeared and the jobs that disappeared since the last run.

It is not a job database that you search. It reads the companies you name, when you run it.

What you get per job

title, location, remote (only when the source states it), workplaceType, employmentType, department, postedAt, salary (when published), jobUrl, jobId, descriptionExcerpt (first 300 characters), company, plus where the row came from:

  • source - json-ld or the ATS name (greenhouse, lever, ...)
  • atsBoard - the board identifier that was written on the company's page, for example greenhouse:figma
  • evidence - the exact text on the page that named the board, and what tied the board to this company
  • coverage - all-jobs-in-feed, partial or jobs-on-this-page

How a company is read

  1. The page you gave is fetched (for a bare domain: the home page, up to two careers links found on it, then /careers and /jobs; at most 4 pages).
  2. If the HTML names a job board of a supported ATS, the public job feed of that board is read. This gives the complete list.
  3. Otherwise, if the HTML has schema.org JobPosting data (JSON-LD), those jobs are returned (coverage: jobs-on-this-page - only what that one page lists).
  4. Otherwise you get a free no-jobs-found row. Jobs are never guessed from link texts.

ATS that can be read

ATSFeed that is readNotes
GreenhouseJob Board API
LeverPostings API
AshbyPosting API
Workablepublic widget API
Workdaycareers site JSON endpointat most 500 jobs per company; larger boards are returned as partial and are not monitored
BambooHR/careers/listno posting date in the list
Teamtailor/jobs.rssalso on a company's own domain

Not read: SmartRecruiters. The robots.txt of its job API disallows all paths, so this Actor does not request it. A company whose page names a SmartRecruiters board comes back as a free robots-disallowed row.

What cannot be read (you are not charged for these)

  • Careers pages that load their jobs only with JavaScript and do not write an ATS board or JobPosting data into the HTML. Many large companies build their page this way. In a test of 40 well-known companies' careers pages on 2026-10-06 (10 large companies, 15 startups, 8 European, 2 Japanese, 5 with a home-built careers site), 14 returned jobs (all through an ATS feed, 2,433 jobs), 22 had no ATS board and no JobPosting data in their HTML, 3 refused the request or their robots.txt could not be read, and 1 address was a 404. Expect roughly one careers page in three to be readable from the page address alone. If you know the company's job board address (for example https://jobs.ashbyhq.com/acme), give that address instead: it is read directly.
  • Sites that answer 401/403/429 or a verification page. The Actor does not retry around them.
  • Hosts whose robots.txt disallows the address (checked at run time for every host, including the ATS feed host).
  • ATS that are not in the table (SmartRecruiters, Recruitee, Personio, iCIMS, SuccessFactors, Phenom, Eightfold, Talentio, HRMOS and others).

A board must belong to the company

A page can link to another company's board (a parent, a partner, a portfolio company). The board identifier is only used when it is the address you gave, or it is written in the page HTML and it can be tied to the site: its name matches the site's host name, or the feed's company name or job addresses do. If a page names several boards and exactly one matches the site name, that one is used; otherwise none is used and you get a free no-jobs-found row that lists what was seen. Identifiers are never made up from a company name.

Monitoring mode

  • First run for a company: its jobs are remembered. Nothing is returned, nothing is charged (baseline-recorded).
  • Later runs: one row per new job (change: new-job) and one per job that is no longer listed (change: removed-job, with the remembered title, URL and location).
  • No change: a free no-change row, and one company-checked event is charged.
  • A company that could not be read in a run is free, and its memory is left untouched, so jobs are not reported as removed because of a failed read.
  • If a company's source changes (for example it moves to another ATS), the list is recorded again instead of reporting every job as removed and new.
  • Memory is kept per address exactly as you give it. JSON-LD sources are compared by job URL and only cover the jobs written on that page.
  • Runs for the same company should not overlap.

Pricing (pay per event)

  • job-returned - each job row returned (in monitoring mode: each new or removed job).
  • company-checked - monitoring mode only: each company that was compared and had no change.
  • Free: companies that could not be read, companies with no readable jobs, the first monitoring run, every explanatory row. No start fee.

Input example

{
"companies": ["https://www.figma.com/careers/", "https://jobs.lever.co/palantir", "vercel.com"],
"maxJobsPerCompany": 500,
"monitoringMode": false
}

If you already know the ATS board names and want filters across many boards, use ATS Jobs API.

Notes

  • Requests identify themselves as NeverEmpty/1.0 (+https://apify.com/neverempty), go out one at a time, and wait more than one second between requests to the same host.
  • remote is null unless the source says so. salary and postedAt are null when the source does not publish them. Nothing is estimated.
  • Workday does not give a posting date in its list; BambooHR does not give date or salary in its list.

Thanks for using this Actor

We build these tools for people who run them every day, and we improve them from what users tell us.

  • Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
  • Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.

If this Actor saved you time, a short review helps other people find it.