Greenhouse, Lever & Ashby Job Monitor — New Job Alerts
Pricing
from $1.00 / 1,000 jobs
Greenhouse, Lever & Ashby Job Monitor — New Job Alerts
Greenhouse jobs, Lever jobs and Ashby jobs monitor: get every open job from company career pages, then only what changed (new, updated, closed, reposted), with optional Slack/webhook alerts. Official public APIs, no login, no proxies. From $0.001 per job.
Pricing
from $1.00 / 1,000 jobs
Rating
0.0
(0)
Developer
mullvad lu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Job Postings Monitor for Greenhouse, Lever & Ashby
Watch a list of companies and get alerted when they post, change or close a job.
- Paste career-page links (
boards.greenhouse.io/…,job-boards.greenhouse.io/…,jobs.lever.co/…,jobs.ashbyhq.com/…) — guaranteed to work — or just a company domain and let the Actor try to detect the job board. - Snapshot mode: all current jobs, normalized fields, filters for keywords, departments, locations, remote only, posted within N days.
- Monitor mode: first run saves a baseline; every later run returns only changes: new, updated (with
changedFieldsand the previous title/location), closed (only after 2 consecutive misses, to avoid false alarms from a temporary glitch), reposted. - Optional webhook (monitor mode): a Slack-formatted summary to your Slack incoming webhook, or JSON to any HTTPS endpoint, only when something changed.
- Up to 500 companies per run. Contact info is stripped from descriptions by default.
Use it as a monitor in 3 steps
Snapshot mode (the default) shows you all current jobs once. The real product is Monitor mode — it tells you only what changed:
- Set Mode to
monitorand give your watchlist a Monitor ID (e.g.my-targets). The pre-filled example companies work as-is. - Run it once. This first run only records a baseline — you will not get hundreds of "new" jobs.
- Schedule it daily in Apify Schedules and set a Webhook URL (Slack or any https endpoint). From now on you only hear about new, updated, closed and reposted jobs.
Who it's for
Recruiters and sourcers tracking target startups and mid-size tech companies, sales teams using hiring as a buying signal, job seekers watching dream companies, and analysts tracking hiring trends. Best fit: companies that hire through Greenhouse, Lever or Ashby (common at startups and scale-ups). Large enterprises on Workday or other systems are not covered yet.
How to add companies
Paste one entry per line. You can mix the formats.
| Input | Example | Reliability |
|---|---|---|
| Job board URL (recommended) | https://job-boards.greenhouse.io/duolingo, https://boards.greenhouse.io/airbnb, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/posthog | Guaranteed: read directly |
| ats:slug | greenhouse:airbnb, lever:spotify, ashby:ramp | Guaranteed: read directly |
| Company domain (bonus) | stripe.com | Auto-detected, see below |
| Company pack (optional) | YC startups (verified boards) | Verified boards, read directly |
Tip: open the company's careers page, click a job, and copy the board part of the URL (jobs.lever.co/<slug>, etc.). Slugs are case-sensitive on some boards; we keep them exactly as written (URL-decoded).
Duplicate inputs for the same board are merged and charged once: if one company is entered in several forms (board link, ats:slug, domain, name or a pack entry), it is scraped once and charged once per run; the extra inputs get a free duplicate_merged row and the job rows list them in mergedInputs.
Company packs
Select Company packs to add a ready-made watchlist to your own companies (you can use a pack alone or together with your list):
- YC startups (verified boards): 88 Y Combinator startups (active, hiring, 20+ staff; from a random sample of 200 in our Oct 2026 detection test) whose Greenhouse, Lever or Ashby board was found via a link on the company website (73) or via a name guess that the job content confirmed (15). Every board was re-checked on 2026-10-24 against the public ATS APIs and had open jobs (about 2,100 jobs in total: 66 Ashby, 18 Greenhouse, 4 Lever). Boards that share a name with an unrelated company on another ATS were left out. It is a sample, not all YC companies.
Pack boards are treated exactly like pasted board links (detection input, never charged as company-resolved). Duplicates with your own entries are removed (your entry is kept), and the total including packs is capped at 500 companies. In snapshot mode a pack can return a couple of thousand jobs (charged as job), so use filters to keep it small.
Domain auto-detection (bonus path)
- Website links: we read the company's homepage,
/careers,/jobs,/company/careersand/about/careers(one short request each) and look for Greenhouse, Lever or Ashby board links. A linked board found this way isconfirmed. A board that exists but currently has 0 jobs still counts: it is detected and can be monitored. - Name guessing (fallback): we try board names derived from the domain (e.g.
linear.app→linear) on all three ATS. A hit isguessed, and becomesconfirmedonly if the company domain appears in the job content or links. If the guessed name exists on two or more ATS it isambiguous: we don't use it and list the candidates so you can pick the right one.
Confirm-first for guessed boards (monitor mode). A guessed board might belong to a different company with the same name, so by default monitor mode does not monitor it and charges nothing for it (no monitor-check, no job-change, no company-resolved). Instead you get a free Companies row with status needs_confirmation, the found ats, board and boardUrl, and a message. If it is the right board, paste that board URL (or ats:slug) into Companies: from then on it is a normal input board. Turn on Monitor guessed boards (monitorGuessedCompanies) to monitor guessed boards anyway (charged like any other company). In snapshot mode guessed boards are still output: their jobs are returned and charged as job, with a free Companies row warning that the board was guessed (never charged as company-resolved).
Every row has a detection field: input (you gave the board), confirmed, guessed, ambiguous, not_found. Results are cached for 30 days in a key-value store ats-resolver-cache in your account.
Measured coverage (Oct 2026, 200 random YC startups with 20+ staff): about 45% high-confidence detection (website links 36.5%; guessing adds more). Large enterprises use Workday and other systems more often, so coverage is lower there. Use the board URL when you can.
Modes
Snapshot
Every current job that matches your filters, one row per job.
Monitor
Give the watchlist a Monitor ID (e.g. fintech-targets) and schedule the Actor (e.g. daily) in Apify Schedules. Each run compares the boards with the previous run of the same Monitor ID:
| changeType | Meaning |
|---|---|
new | A job id we have not seen before |
updated | Same job id, but the title, location, salary or description changed (changedFields tells which; previous holds the previous title and location only, not previous salary or description) |
closed | The job id was missing in 2 consecutive checks (one miss is tolerated to avoid false alarms from a temporary glitch) |
reposted | A new job with the same title and location as a job closed in the last 30 days (or a closed id that came back); repostOf points to the old id, previous has its title, location and closedAt |
- The first check of a company is a baseline: its jobs are recorded and nothing is reported, so you don't get hundreds of "new" jobs on day one. Turn on Output all jobs on the first monitor run to also get them (as
changeType: baseline). - If a board can't be loaded (network/server error), nothing is reported and nothing changes for that company; it is checked again next run.
- Domains whose board was only
guessedare not monitored unless you turn on Monitor guessed boards (see Confirm-first above); they get a freeneeds_confirmationrow. - State is stored in a named key-value store
monitor-<yourUserId>-<monitorId>in your account. Delete that store to reset the monitor. - Keep the Monitor ID fixed when you add or remove companies. Without a Monitor ID, one is derived from the company list and filters, so changing them starts a new baseline. Changing the filters of an existing Monitor ID also records a new baseline.
Push
In monitor mode, set Webhook URL to get one POST per run when there are changes: a Slack incoming webhook (hooks.slack.com/..., short summary message) or any https endpoint (JSON with counts and all change rows, without descriptions). If delivery fails (3 attempts), the undelivered changes are saved with the monitor and re-sent together with the next run's changes (up to 1,000 kept). Every change is always in the run's dataset, whatever happens to the webhook. You can also use Apify integrations (Zapier, Make, Google Sheets, webhooks) on the run's dataset.
Filters
Title keywords, departments/teams, locations, remote only, and posted within N days (snapshot only; ignored in monitor mode so aging jobs are not reported as closed). Matching is case-insensitive "contains".
Output
Dataset, one row per job (snapshot) or per change (monitor):
company, companyDomain, ats, board, jobId, title, department, team, location, isRemote, workplaceType, employmentType, salaryMin, salaryMax, currency, salaryInterval, postedAt, updatedAt, url, applyUrl, descriptionText, detection plus in monitor mode changeType, changedFields, previous, repostOf, firstSeen, lastSeen, detectedAt, monitorId.
Free company rows (recordType: company) report not_found, ambiguous, guessed, needs_confirmation (monitor mode) and errors, include boardUrl, and in monitor mode one status row per company (baseline or change counts). Use the dataset views Jobs, Changes and Companies. A run summary is saved to the key-value record OUTPUT.
Example job row:
{"recordType": "job", "company": "Duolingo", "ats": "greenhouse", "board": "duolingo", "jobId": "8851677002","title": "Ad Sales Lead, Programmatic", "department": "Business Development", "location": "New York, NY","isRemote": false, "salaryMin": 152000, "salaryMax": 228000, "currency": "USD", "postedAt": "2026-09-28T13:09:53Z","url": "https://careers.duolingo.com/jobs/8851677002?gh_jid=8851677002", "detection": "input"}
Notes on fields: salary is filled only when the employer publishes it (Greenhouse pay transparency ranges, Lever salaryRange, Ashby compensation). postedAt is Greenhouse first_published, Lever createdAt, Ashby publishedAt; employers can refresh these, so monitoring relies on job ids, not dates. Ashby jobs marked unlisted are never output. By default, emails and phone numbers in descriptions are replaced with [email removed] / [phone removed].
Pricing (pay per event)
| Event | Price | When |
|---|---|---|
job | $0.001 | Each job row in snapshot mode (and baseline rows if you turn them on) |
company-resolved | $0.002 | A domain was auto-detected with detection confirmed (not for board URLs / ats:slug, cache hits, guessed, ambiguous or not found) |
monitor-check | $0.002 | Monitor mode: each company checked per run (including the baseline check). Not for needs_confirmation (guessed, not monitored) companies |
job-change | $0.01 | Monitor mode: each new / updated / closed / reposted row |
No start fee. Not found, ambiguous, failed and needs_confirmation companies are free. Company packs cost nothing extra: pack boards are charged like pasted board links (job / monitor-check / job-change only). Examples: watching 50 companies daily ≈ $0.10 per day in checks ($3 per month), plus $0.01 per change; snapshot of 3,000 jobs ≈ $3; monitoring 50 companies daily with ~5 changes a day ≈ $3 + $1.50 = ~$4.50 per month.
Max cost per run is respected: the Actor stops outputting before your limit. In monitor mode, changes that didn't fit are not lost: they are reported on the next run.
Supported and not supported
- Supported: Greenhouse, Lever, Ashby public job board APIs (US instances).
- Not supported yet: Workday, Workable, SmartRecruiters, Recruitee, BambooHR, Gem, Dover, Wellfound, YC Work at a Startup, Greenhouse/Lever EU-hosted boards, iframes rendered only by JavaScript (auto-detection can miss these; paste the board URL instead).
- Max 500 companies per run.
- Domain auto-detection found a high-confidence board for roughly 45% of startups in our internal test (200 YC startups with 20+ staff) and less for large companies, so career-page links are the reliable path. Not affiliated with Greenhouse, Lever or Ashby.
FAQ
How do I get an alert when a company posts a new job?
Add the company (board URL, ats:slug, domain, or a company pack), set Mode to monitor with a Monitor ID, and schedule the Actor daily. Add a Webhook URL to get the changes pushed to Slack or your own endpoint.
Which job boards are supported? Greenhouse, Lever and Ashby public job boards. Workday and other systems are not covered yet — most startups and scale-ups use one of the three supported boards.
How is this different from a job scraper? A scraper sells you the full list every time. This Actor remembers the previous state and charges mainly for what changed: new, updated, closed and reposted jobs.
Can I just enter a company domain?
Yes — the Actor tries to detect the board (about 45% high-confidence on startups in our test). Board URLs and ats:slug inputs always work and are the recommended path. Guessed boards are never monitored or charged until you confirm them.
What does it cost to watch 30 companies? 30 companies checked daily ≈ $1.80/month in monitor checks, plus $0.01 per detected change.
Data source and responsible use
Data comes only from the employers' public job boards through the ATS providers' public, read-only job board endpoints (no login, no application endpoints, no internal jobs). Requests are rate-limited (max 2 per second per ATS) and identify this Actor in the User-Agent. Users must comply with the terms of the employers and ATS providers and applicable law. This Actor is not affiliated with or endorsed by Greenhouse, Lever or Ashby. Employers who want their company excluded can ask through the Actor's Issues tab and we will stop reading that board.