ATS Job Scraper: Only New Jobs (Greenhouse, Lever, Ashby) avatar

ATS Job Scraper: Only New Jobs (Greenhouse, Lever, Ashby)

Pricing

from $1.50 / 1,000 jobs

Go to Apify Store
ATS Job Scraper: Only New Jobs (Greenhouse, Lever, Ashby)

ATS Job Scraper: Only New Jobs (Greenhouse, Lever, Ashby)

Only new or changed jobs since your last run, at $1.50 per 1,000 jobs plus $0.001 per board. Track the public job boards of up to 1,000 companies on Greenhouse, Lever, Ashby, Workable, Recruitee and Breezy HR. Filters for title, location, remote and posting date run before you pay.

Pricing

from $1.50 / 1,000 jobs

Rating

0.0

(0)

Developer

Batch Pane

Batch Pane

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

ATS Job Scraper: Only New Jobs (Greenhouse, Lever, Ashby, Workable, Recruitee, Breezy)

Track the job boards of hundreds of companies and get only the jobs you have not seen yet.

Give it a list of companies (job board links or short names). Every run reads their public job boards and outputs the jobs that are new or changed since your last run. Schedule it daily and you have a clean feed of fresh openings.

  • Only new since the last run, built in. The actor remembers which jobs you already received (in your own Apify account), so a daily run gives you just the new ones. In our test, 10 company boards with 2,452 open jobs: the first run delivered all 2,452 in 46 seconds; the next run checked the same 10 boards in 4 seconds and delivered 0 jobs, because nothing had changed.
  • Six ATS in one actor: Greenhouse, Lever (US and EU), Ashby, Workable, Recruitee and Breezy HR. Mix them in one list. Paste the company's own careers page and the actor finds the job board link on it.
  • Filters that run before you pay: title contains / does not contain, location, remote only, and posted within the last N days. Jobs that do not match are not output and not charged.
  • Changed jobs and closed jobs: see when a job's title, location, team, salary or type changes, and (optional) get a row for every job that disappeared since the last run.
  • Clean, flat rows: title, department, team, locations, remote, workplace type, employment type, salary (when the ATS publishes it), publish date, job link and apply link. Optional plain-text description.
  • No personal data: no recruiter names, no e-mail addresses, no phone numbers. E-mail addresses and phone numbers are removed from descriptions.

Measured on the Apify platform on 20 October 2026 (UTC), 512 MB memory: Airbnb, Stripe, Figma, Discord (Greenhouse), Palantir, Spotify (Lever), Notion, OpenAI (Ashby), Hugging Face (Workable), bunq (Recruitee).

How "only new" works

  1. The first run reads all boards and outputs every open job as "changeType": "new" (or, with firstRunOutputsAll: false, outputs nothing and just remembers today's jobs).
  2. The actor stores the job ids it has seen (plus a short fingerprint of title, locations, team, salary and type) in a key-value store named batchpane-ats-jobs-state in your Apify account. No job content is stored there.
  3. Every next run with the same company list outputs only jobs that are new (and, in the default mode, changed).
  4. Want separate feeds? Give each task its own Memory name. Want to start over? Tick Forget previous runs.

Modes: newAndChanged (default), new, or all (every open job, every run, no memory).

Use with AI agents (MCP)

Works as a tool through the Apify MCP server: https://mcp.apify.com?tools=batchpane/ats-jobs-only-new

Input the agent should send: {"companies": ["greenhouse:airbnb", "https://jobs.lever.co/palantir"], "outputMode": "new", "titleIncludes": ["engineer"], "postedWithinDays": 7}

Results: rows with "type": "job" are jobs (charged); one row per company with "type": "board" tells whether the board was read and how many jobs were new (free).

Example prompt:

Use batchpane/ats-jobs-only-new to check greenhouse:airbnb, jobs.lever.co/palantir and jobs.ashbyhq.com/notion for remote engineering jobs posted in the last 7 days. Give me a table with company, title, location and link.

Input

FieldDefaultNotes
Companies–Job board URLs (https://job-boards.greenhouse.io/airbnb, https://jobs.lever.co/palantir, https://jobs.ashbyhq.com/notion, https://apply.workable.com/huggingface, https://bunq.recruitee.com, https://acme.breezy.hr), short forms (greenhouse:airbnb, lever:palantir, ashby:notion, workable:huggingface, recruitee:bunq, breezy:acme), or a careers page. Up to 1,000 per run.
Which jobs to outputnew and changednewAndChanged, new or all
First run outputs all jobsonoff = first run only remembers
Title contains / does not contain–case-insensitive words
Location contains–e.g. Amsterdam, Germany, Remote
Remote jobs onlyoff
Posted within the last N days–1-365
Include job descriptionoffplain text, e-mails and phone numbers removed
Also list removed jobsofffree rows with changeType: "removed"
Memory namefrom the company listshare or separate memories between tasks

Example input (tested on the platform):

{
"companies": ["greenhouse:airbnb", "https://jobs.lever.co/palantir", "https://jobs.ashbyhq.com/notion"],
"outputMode": "newAndChanged",
"titleExcludes": ["intern"]
}

Output

Job row:

{
"type": "job",
"changeType": "new",
"ats": "ashby",
"board": "notion",
"boardUrl": "https://jobs.ashbyhq.com/notion",
"companyName": null,
"jobId": "1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"title": "Software Engineer, AI Connections (Developer Platform)",
"department": "Engineering",
"team": "Engineering",
"locations": ["San Francisco, California", "New York, New York"],
"location": "San Francisco, California",
"remote": false,
"workplaceType": "Hybrid",
"employmentType": "FullTime",
"salary": null,
"publishedAt": "2026-08-24T14:44:49.699+00:00",
"updatedAt": null,
"url": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"applyUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a/application",
"scrapedAt": "2026-10-20T10:54:02.811Z"
}

Board row (one per company, free): type: "board", status (ok, failed, blocked, skipped), jobsFound, jobsMatchingFilters, newJobs, changedJobs, removedJobs, jobsOutput, and an error code when it failed.

Pricing

  • $1.50 per 1,000 jobs delivered ($0.0015 per job row).
  • $0.001 per company board checked, also when it has no new jobs. That is what a daily "anything new?" check costs: 100 companies = $0.10 per day.
  • Plus Apify's standard start fee per run ($0.00005 per GB of memory; $0.000025 at the default 512 MB).
ExampleCost
First run, 100 companies with 3,000 open jobs in total3,000 x $0.0015 + 100 x $0.001 = $4.60
Daily run after that, 100 companies, 40 new jobs40 x $0.0015 + 100 x $0.001 = $0.16
20 companies, only "engineer" jobs, 5 new5 x $0.0015 + 20 x $0.001 = $0.0275

Boards that fail, are blocked or skipped are not charged; removed-job rows and board rows are never charged. You can set a maximum cost per run in Apify; the actor stops before it would go over it.

Good to know

  • Supported: Greenhouse, Lever, Ashby, Workable, Recruitee, Breezy HR. Not (yet): Workday, SmartRecruiters, Personio, Teamtailor, iCIMS, Taleo. SmartRecruiters' and Personio's job feeds ask automated clients not to fetch them in their robots.txt, and this actor respects that.
  • Salary appears only where the company publishes it in the ATS (common on Ashby and Lever, rare on Greenhouse).
  • Greenhouse EU boards (job-boards.eu.greenhouse.io) are not supported yet.
  • "Changed" looks at title, locations, department/team, workplace type, employment type and salary, not at the description text. The same locations in another order, or a change in only upper/lower case or spacing, does not count as a change (so you are not charged twice for the same job).
  • A careers page is loaded once to find the job board link; pages that load their job widget only with JavaScript may not show the link. Use the job board URL or the short form in that case.
  • Requests are polite: at most one request per second per ATS host, robots.txt respected.
  • Safety stop: the run stops after 20 boards in a row fail ("Stop after failures in a row"; 0 switches only this rule off). A second rule cannot be switched off: after 50 boards, the run stops if fewer than 25% succeeded.

Responsible use

This actor reads job boards that companies publish through their ATS so that their jobs are found. It is not affiliated with Greenhouse, Lever, Ashby, Workable, Recruitee or Breezy HR. Use the data in line with the job boards' terms and the law that applies to you; do not use it to contact individual employees. Job descriptions are the employers' content; if you turn on descriptions, they may mention people by name. Do not republish them wholesale or use them to profile individuals.

Support

Found a board that should work but does not? Open an issue in the Issues tab with the board URL and the run ID. We aim to answer within 7 days. Answers may be drafted with help of an AI assistant and are checked by a person.

Changelog

  • 0.1: first version.