ATS Job Scraper - Greenhouse, Lever & Ashby Job Monitor
Pricing
from $3.00 / 1,000 job results
ATS Job Scraper - Greenhouse, Lever & Ashby Job Monitor
Scrape Greenhouse, Lever & Ashby job boards for your companies and get only new job postings — a cross-ATS hiring-signal feed for sales, recruiting & intel.
Pricing
from $3.00 / 1,000 job results
Rating
0.0
(0)
Developer
FeedHarbor
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
ATS Job Scraper — Greenhouse, Lever & Ashby New-Requisition Monitor
Scrape jobs from Greenhouse, Lever, and Ashby job boards for any list of companies, and detect newly-posted requisitions — the companies that just started hiring. Give it your target accounts, run it on a schedule, and get a clean, deduplicated, normalized feed of new, changed, and removed job openings across all three ATS platforms at once.
Unlike a one-off job dump, this actor remembers what it has seen before. Every run compares against the last one and tells you exactly what is new this week — the hiring signal that sales teams, recruiters, and market analysts actually pay for.
What this actor does
- Scrape Greenhouse job boards by board token (e.g.
greenhouse:gitlab) - Scrape Lever postings by company (e.g.
lever:leverdemo) - Scrape Ashby job boards by org (e.g.
ashby:openai) - Detect new job postings across a list of companies since your last run
- Monitor when companies start hiring for specific roles (sales, engineering, marketing…)
- Track removed / filled requisitions so you know when a role closes
- Normalize job data from three different ATS platforms into one clean schema
- Parse seniority from job titles (intern → C-level) for decision-maker targeting
- Normalize salary / compensation into numeric min/max where the board exposes it
- Deduplicate jobs across runs with a stable, cross-ATS job ID
Who it's for
Sales & RevOps teams running hiring-intent prospecting. A company posting a "Marketo Administrator" or "VP of Sales" role is a timed buying signal. Monitor your target account list and get alerted the moment a relevant requisition appears.
Recruiting & staffing agencies who need a live who's-hiring feed. Watch the companies you place into and know within a day when they open a new seat.
Market & competitive intelligence analysts tracking headcount growth by team as a proxy for company expansion, funding, and strategy.
Founders & investors monitoring a portfolio or a competitive set for hiring momentum.
How it works
- Provide a list of companies as
greenhouse:token,lever:company,ashby:org, or full board URLs (the ATS is auto-detected). - The actor fetches every board through its official public API — no login, no proxies required.
- Each posting is normalized into a single unified schema and assigned a stable
job_uid. - The run is compared against previous runs stored under a
trackerName, computingchange_type(new,updated,unchanged,removed) andfirst_seen_at. - With Monitor mode on, you receive only the rows that changed — your new-requisition signal.
Run it on an Apify schedule (say, daily) with the same trackerName to build a continuous hiring-signal feed for your accounts.
Input
| Field | What it does |
|---|---|
companies | Target boards: greenhouse:token, lever:company, ashby:org, or a board URL |
presetList | Use a curated set (AI labs, dev tools, fintech) instead of your own list |
monitorMode | Emit only new / updated / removed rows since the last run |
trackerName | State bucket to diff against — one per monitored account set |
titleKeywords / excludeKeywords | Keep or drop jobs by title |
seniorityFilter | Keep only e.g. director, vp, c_level |
remoteOnly, locationKeywords, employmentTypes, postedSince | Standard filters |
includeDescription, includeCompensation | Add full text / pay data |
outputProfile | full, compact, or signals_only |
Minimal example:
{"companies": ["greenhouse:gitlab", "lever:leverdemo", "ashby:openai"],"monitorMode": true,"trackerName": "my-target-accounts","seniorityFilter": ["director", "vp", "c_level"]}
Output
Each job is a normalized record. Key fields:
{"job_uid": "b1c2…","ats": "greenhouse","company_name": "Gitlab","title": "Senior Backend Engineer","seniority": "senior","department": "Engineering","location_primary": "Remote, US","remote": true,"workplace_type": "remote","salary_min": 120000,"salary_max": 160000,"currency": "USD","posted_at": "2026-07-30T09:00:00.000Z","first_seen_at": "2026-08-04T00:00:00.000Z","change_type": "new","is_new_requisition": true,"days_open": 5,"url": "https://boards.greenhouse.io/gitlab/jobs/12345"}
The change_type, is_new_requisition, and first_seen_at fields are the hiring-signal core — they only exist because the actor accumulates state across runs.
Pricing
Pay-per-result. A full scrape is billed per job returned; new & changed rows (Monitor mode) are billed at the signal rate, because that is the output worth paying for. Start with a small free allowance so you can validate the data before committing. See the pricing tab for current rates.
FAQ
Do I need API keys or proxies? No. Greenhouse, Lever, and Ashby all expose public job-board JSON APIs. No login, no proxies.
How do I find a company's board token?
It's the slug in their careers URL — boards.greenhouse.io/**gitlab**, jobs.lever.co/**company**, jobs.ashbyhq.com/**org**. Paste the full URL and the actor detects the ATS.
How does "new this week" work on the first run?
The first run has no history, so everything is new. From the second run onward (same trackerName), only genuinely new/changed roles are flagged. For instant history, run it a few times before you rely on the signal, or keep a daily schedule.
Does it handle companies switching or renaming their ATS?
Yes — failed or moved boards are reported in the run summary, and removed requisitions are surfaced as change_type: removed.
Is scraping these boards allowed? These are public job-board APIs designed to be indexed, and the actor only reads public company job data — not personal contact information.
For developers
The scraping, normalization, and change-detection logic lives in a platform-agnostic core (src/core) with the Apify actor as a thin adapter (src/adapters/apify.js). State (the first-seen ledger) is stored in your own Postgres when DATABASE_URL is set, or Apify's key-value store as a fallback. Run the same core locally with node cli.js greenhouse:gitlab --monitor. Tests: node --test test/smoke.test.js.