ATS Jobs Scraper & New-Job Monitor (Greenhouse, Lever +6) avatar

ATS Jobs Scraper & New-Job Monitor (Greenhouse, Lever +6)

Pricing

from $2.00 / 1,000 jobs

Go to Apify Store
ATS Jobs Scraper & New-Job Monitor (Greenhouse, Lever +6)

ATS Jobs Scraper & New-Job Monitor (Greenhouse, Lever +6)

Scrape jobs from Greenhouse, Lever, Ashby, Workday, Recruitee, Workable, HERP & HRMOS career pages in one schema. Monitor mode returns only new and removed jobs.

Pricing

from $2.00 / 1,000 jobs

Rating

0.0

(0)

Developer

panda studio

panda studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

ATS Jobs Scraper & New-Job Monitor

ATS Jobs Scraper collects every open job from company career pages hosted on Greenhouse, Lever, Ashby, Workday, Recruitee, Workable and the Japanese ATSs HERP and HRMOS, and returns them in one normalized schema (title, department, location, remote flag, employment type, posting date, salary when published, apply URL, optional full description). Paste a job-board URL, a provider:slug shorthand, or just the company's own careers page — the ATS is detected for you. Turn on monitor mode and each run returns only jobs that are new or removed since the last run, which makes it a cheap hiring-signal and job-alert feed. No login, no proxies, no browser.

What does ATS Jobs Scraper do?

  • Resolves each input to a job board: board URLs (boards.greenhouse.io/stripe), shorthands (lever:palantir) or a company careers page (https://www.figma.com/careers/ → Figma's Greenhouse board).
  • Downloads all open jobs from that board through the public endpoint the ATS uses to render its own career pages.
  • Normalizes the fields across all 8 ATSs, including salary ranges (Ashby, Lever, Recruitee when the company publishes them) and employment types (Japanese values are translated with the original kept, e.g. Full-time (正社員)).
  • Filters by title keywords, excluded words, location, remote-only and posting age.
  • In monitor mode, remembers every job per board and outputs only the changes.

Who is it for? Use cases

WhoUse case
B2B sales / SDRsHiring signals: watch 50–500 target accounts and get alerted when one posts "Head of Data" or "Salesforce Admin". Push to Slack, HubSpot or a sheet with Apify integrations.
Recruiters & talent intelligenceTrack which competitors hire for which roles, where, and at what salary band.
Job boards & newslettersBuild a niche board (remote Rust jobs, AI jobs in Tokyo, ...) from first-party career pages instead of aggregators.
Job seekersGet an alert the day a target company opens a matching role.
Japan market researchHERP and HRMOS power career pages of many Japanese startups and listed companies (e.g. IVRy on HERP, Money Forward on HRMOS).

Why use this ATS jobs scraper?

  • 8 ATSs, one schema — including HERP and HRMOS, two Japanese ATSs.
  • Careers-page auto-detection — paste https://www.figma.com/careers/ and the Actor finds the embedded Greenhouse board. No need to know which ATS a company uses.
  • Monitor mode with new and removed jobs — detect openings and closings; you pay per company checked plus only the changed jobs.
  • Filters that don't break monitoring — the memory always tracks the full board, so changing filters later does not produce a flood of "new" jobs.
  • Salary normalization — min, max, currency, interval plus the original text. In a run on 2026-09-24, 310 of 637 jobs (OpenAI on Ashby) came with a salary range.
  • One bad input never fails the run — errors are listed per board in RUN_SUMMARY.
  • Lightweight — JSON/HTML requests only, 256 MB memory; a Greenhouse/Lever/Ashby board is one request.

Supported ATS and accepted inputs

ATSExample input
Greenhousehttps://boards.greenhouse.io/stripe, https://job-boards.greenhouse.io/figma, greenhouse:stripe
Leverhttps://jobs.lever.co/palantir, lever:palantir (EU boards: jobs.eu.lever.co/...)
Ashbyhttps://jobs.ashbyhq.com/openai, ashby:notion
Workdayhttps://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, workday:nvidia.wd5/NVIDIAExternalCareerSite
Recruiteehttps://bunq.recruitee.com, recruitee:bunq
Workablehttps://apply.workable.com/skroutz, workable:skroutz
HERP (Japan)https://herp.careers/v1/ivry, herp:ivry
HRMOS (Japan)https://hrmos.co/pages/moneyforward/jobs, hrmos:moneyforward
Any careers pagehttps://www.figma.com/careers/ → detects the embedded board

What data do you get?

FieldDescription
provider, companySlug, companyNameATS, board slug and company name
jobId, titleJob ID on the ATS and job title
department, teamDepartment / team / category as published
location, locations, countryPrimary location, all locations, country when available
workplaceType, isRemoteremote / hybrid / onsite and a boolean, when the ATS provides it
employmentTypeNormalized, e.g. Full-time, Contract, Full-time (正社員)
postedAt, updatedAtISO 8601 timestamps
url, applyUrlJob page and application page
salary{min, max, currency, interval, text} when published
tagsATS tags/categories
descriptionTextPlain-text description (when includeDescription is on)
changeType, firstSeenAtnew / removed and first-seen time in monitor mode
scrapedAt, sourceInputRun timestamp and the input that produced the row

Field availability by ATS

FieldGreenhouseLeverAshbyWorkdayRecruiteeWorkableHERPHRMOS
title, url, jobId✓✓✓✓✓✓✓✓
location✓✓✓✓✓✓–✓
department / team✓✓✓–✓✓✓ (group)✓ (category)
postedAt✓✓✓✓ (exact with description)✓✓––
employmentType–✓✓with description✓✓–✓
salary–when publishedwhen published–when published–––
descriptionText✓✓✓✓ (+1 request/job)✓✓✓ (+1 request/job)summary

How much does it cost to scrape ATS jobs?

Pay per event. Platform usage is included — you only pay these events:

EventPrice
Actor start$0.00005 per run
Company checked (each job board fetched successfully in a run)$0.001
Result (each job — or each new/removed job in monitor mode — in the dataset)$0.002 ($2 per 1,000)

Worked examples (calculated from the prices above):

ScenarioJobs outputCost
Figma's whole board (160 open jobs on 2026-09-24)160$0.321
4 companies with an "engineer" title filter (the example run below)637$1.278
Monitor 200 companies daily, a day with 30 new/removed jobs30$0.26 per run
Monitor 200 companies daily, a day with no changes0$0.20 per run (≈ $6 / 30 days)

The first monitor-mode run outputs all current jobs (that is the baseline); later runs output only changes. Set Maximum cost per run in the run options to cap spending — the Actor stops cleanly at the cap.

How to scrape jobs from Greenhouse, Lever, Ashby, Workday and more

  1. Click Try for free (an Apify account is free).
  2. Add companies to Company career pages / job boards — board URLs, provider:slug, or careers-page URLs.
  3. Optionally set Title must contain, Title must NOT contain, Location contains, Remote jobs only, Posted within last N days, and Include full job description.
  4. Click Start and download the dataset as JSON, CSV, Excel or HTML.
  5. For alerts: turn on Monitor mode, give it a Monitor ID, save as a Task, add a Schedule (e.g. daily 08:00) and an Integration (Slack, email, Google Sheets, webhook, Make, Zapier).

Input example

This is the exact input used for the output example below:

{
"companies": [
"https://www.figma.com/careers/",
"https://jobs.ashbyhq.com/openai",
"lever:palantir",
"https://hrmos.co/pages/moneyforward/jobs"
],
"titleKeywords": ["engineer", "エンジニア"],
"includeDescription": true,
"maxJobsPerCompany": 1000
}
InputDefaultNotes
companies— (required)URLs, provider:slug, or careers pages
includeDescriptionfalseAdds descriptionText (extra request per job on Workday and HERP)
titleKeywords / excludeTitleKeywords—Case-insensitive, any of
locationKeywords—Location contains any of
remoteOnlyfalseOnly jobs marked remote
postedWithinDays00 = no limit
maxJobsPerCompany1000Cap per board
monitorMode / monitorIdfalse / —Output only changes since the last run
emitRemovedtrueAlso output removed (closed) jobs in monitor mode
requestIntervalSecs0.5Pause between requests

Output example

Real output from a run on 2026-09-24 with the input above: 4 boards, 637 matching jobs, 0 errors, 13 s. Descriptions are shortened here.

Ashby (OpenAI) — with a salary range:

{
"provider": "ashby",
"companySlug": "openai",
"companyName": "openai",
"jobId": "240d459b-696d-43eb-8497-fab3e56ecd9b",
"title": "Research Engineer",
"department": "Research",
"team": "Research",
"location": "San Francisco",
"locations": ["San Francisco"],
"country": "United States",
"workplaceType": null,
"isRemote": null,
"employmentType": "Full-time",
"postedAt": "2025-04-05T00:03:20+00:00",
"updatedAt": null,
"url": "https://jobs.ashbyhq.com/openai/240d459b-696d-43eb-8497-fab3e56ecd9b",
"applyUrl": "https://jobs.ashbyhq.com/openai/240d459b-696d-43eb-8497-fab3e56ecd9b/application",
"salary": {"min": 250000, "max": 445000, "currency": "USD", "interval": "1 YEAR", "text": "$250K – $445K • Offers Equity"},
"tags": [],
"descriptionText": "By applying to this role, you will be considered for Research Engineer roles across all teams at OpenAI. ...",
"scrapedAt": "2026-09-24T14:20:04+00:00",
"sourceInput": "https://jobs.ashbyhq.com/openai",
"changeType": null,
"firstSeenAt": null
}

Greenhouse (found from https://www.figma.com/careers/):

{
"provider": "greenhouse",
"companySlug": "figma",
"companyName": "Figma",
"jobId": "6178851004",
"title": "Data Engineer Intern (2027)",
"department": "Early Career",
"location": "San Francisco, CA • New York, NY",
"locations": ["San Francisco, CA • New York, NY", "US"],
"postedAt": "2026-09-23T19:30:27+00:00",
"url": "https://boards.greenhouse.io/figma/jobs/6178851004?gh_jid=6178851004",
"sourceInput": "https://www.figma.com/careers/"
}

Lever (Palantir) — workplace type and country:

{
"provider": "lever",
"companySlug": "palantir",
"title": "Backend Software Engineer - Application Development",
"team": "Dev",
"location": "London, United Kingdom",
"country": "GB",
"workplaceType": "hybrid",
"isRemote": false,
"employmentType": "Full-time",
"url": "https://jobs.lever.co/palantir/10dfc8bc-99ad-4ca2-ab76-853cb90a92c2",
"applyUrl": "https://jobs.lever.co/palantir/10dfc8bc-99ad-4ca2-ab76-853cb90a92c2/apply"
}

HRMOS (Money Forward) — Japanese employment type translated, original kept:

{
"provider": "hrmos",
"companyName": "株式会社マネーフォワード",
"jobId": "0004175",
"title": "【エンジニア】オープンポジション_(東京・大阪・京都・名古屋・福岡)",
"department": "エンジニア",
"location": "東京都港区芝浦3-1-21 msb Tamachi 田町ステーションタワーS 21F",
"employmentType": "Full-time (正社員)",
"tags": ["エンジニア", "オープン", "日本語", "オープンポジション(エンジニア)", "正社員"],
"url": "https://hrmos.co/pages/moneyforward/jobs/0004175"
}

RUN_SUMMARY (default key-value store) from the same run, shortened:

{
"durationSecs": 13.0,
"boards": [
{"board": "greenhouse::figma", "status": "ok", "openJobs": 160, "output": 32, "removed": 0},
{"board": "ashby::openai", "status": "ok", "openJobs": 828, "output": 365, "removed": 0},
{"board": "lever::palantir", "status": "ok", "openJobs": 318, "output": 193, "removed": 0},
{"board": "hrmos::moneyforward", "status": "ok", "openJobs": 47, "output": 47, "removed": 0}
],
"errors": [],
"resultsPushed": 637
}

Monitor mode (new job alerts and hiring signals)

  1. Set monitorMode: true and give the watch list a monitorId.
  2. The first run outputs every open job and remembers them in a named key-value store in your own account (ats-jobs-monitor-state).
  3. Every later run outputs only:
    • changeType: "new" — jobs that were not on the board last time
    • changeType: "removed" — jobs that disappeared (closed or filled), if emitRemoved is on
  4. If nothing changed, the dataset is empty and you pay only the start and company-checked events.

Filters only affect what is output; the memory always tracks the whole board.

Tips

  • Leave includeDescription off for monitoring large Workday boards — it adds one request per job there.
  • Use excludeTitleKeywords (e.g. intern, senior) to cut noise.
  • Not sure of the slug? Paste the company's careers page URL.
  • One Task per watch list (e.g. "target accounts", "competitors") keeps the monitor state separate.

Integrations & API usage

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("panda_studio/ats-jobs-monitor").call(run_input={
"companies": ["greenhouse:stripe", "https://jobs.ashbyhq.com/notion"],
"titleKeywords": ["engineer"],
"monitorMode": True,
"monitorId": "my-accounts",
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["changeType"], job["companyName"], job["title"], job["url"])

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('panda_studio/ats-jobs-monitor').call({
companies: ['greenhouse:stripe', 'lever:palantir'],
remoteOnly: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL (run and get the items in one call):

curl -X POST "https://api.apify.com/v2/acts/panda_studio~ats-jobs-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies": ["greenhouse:stripe"], "titleKeywords": ["engineer"]}'

MCP (Claude, Cursor, VS Code and other AI agents):

{
"mcpServers": {
"apify": { "url": "https://mcp.apify.com?tools=panda_studio/ats-jobs-monitor" }
}
}

The Actor reads the same public job listings anyone can see on a company's career page, through the endpoints the ATS vendors provide for that purpose: Greenhouse Job Board API, Lever Postings API, Ashby job-posting API, Recruitee and Workable career-site APIs, Workday career-site JSON, and the public HERP and HRMOS career pages. It never logs in. robots.txt is checked at run time for Workday, HERP and careers-page detection. SmartRecruiters is not supported because its robots.txt disallows generic crawlers. Job postings are company information, not personal data. You are responsible for how you use the data.

FAQ

A board returns 404. The slug is wrong or the company moved to another ATS. Paste the company's careers page URL instead and the Actor will detect the current board.

Which ATS does a company use? Paste its careers page; the detected board appears in RUN_SUMMARY (e.g. greenhouse::figma).

How fast is it? Greenhouse, Lever, Ashby, Recruitee and Workable boards are one request each. Workday returns 20 jobs per request and HRMOS 100 per page. The 4-board example above took 13 s including descriptions.

Why does companyName show the slug? Lever and Ashby do not publish a display name in their API, so the slug is used.

Is salary always available? No — only when the company publishes it on Ashby, Lever or Recruitee.

Do I pay for unchanged jobs in monitor mode? No. After the first (baseline) run you pay $0.001 per company checked plus $0.002 per new or removed job.

Can I add other ATSs (iCIMS, SmartRecruiters, Personio...)? Not currently. SmartRecruiters is excluded because of its robots.txt.

Does it collect personal data? No. Only job postings (company information).

Changelog

  • 0.1 — Initial release: 8 ATSs, careers-page auto-detection, filters, monitor mode with new/removed jobs, cost-cap aware stopping.