ATS Jobs Feed: Greenhouse, Ashby & Lever with Change Tracking
Pricing
from $1.00 / 1,000 jobs
ATS Jobs Feed: Greenhouse, Ashby & Lever with Change Tracking
Track company job boards from the official Greenhouse, Ashby and Lever APIs. Each run tells you which jobs are new, changed or closed since last time. Clean fields, salaries where posted, keyword filters.
Pricing
from $1.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Neatrow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Features
Share
Watch the job boards of the companies you care about. Every run returns their open jobs as clean, flat records and tells you what happened since the last run: which jobs are new, which changed (and which fields), which were closed, and which were reopened.
Data comes from the official, public job board APIs of Greenhouse (Job Board API), Ashby (Job Posting API) and Lever (Postings API, including EU-hosted boards), the same feeds that power companies' own career pages. Mix all three in one run. No login, no proxies, no scraping of HTML pages. Ashby and Lever boards include posted salary ranges where the company shows them.
Typical uses:
- Job alerts. Schedule a daily run with Only changes and get just the new and closed roles from 5 or 500 companies.
- Hiring signals. See which teams a company is growing or freezing, by department and location.
- Job boards and newsletters. Keep your listings in sync and remove closed roles automatically.
What makes it different
| This Actor | Typical job scraper | |
|---|---|---|
| Change tracking | new, changed (with changedFields), closed, reopened across runs | A fresh dump every time; you diff it yourself |
| Safe "closed" | A job is marked closed only after a complete, successful read of the board | A failed or partial page can look like mass closures |
| Pay for changes only | Only changes mode outputs (and bills) only what changed | Pay for every job on every run |
| Noise | Greenhouse's internal updated_at bumps are ignored; only visible fields count | Every bump looks like a change |
| Pay data | Ashby and Lever salary ranges as numbers (salaryMin, salaryMax, salaryCurrency) plus the text summary; pay changes are tracked | Missing or free text only |
| Descriptions | Plain text (decoded, bullet points kept), HTML, or left out | Raw escaped HTML |
| Errors | One bad board never breaks the run; the log says how to fix it | Whole run fails |
Input
| Field | What it does |
|---|---|
boards | Greenhouse board URLs (https://job-boards.greenhouse.io/gitlab, boards.greenhouse.io/acme, embed URLs), Ashby board URLs (https://jobs.ashbyhq.com/linear), Lever board URLs (https://jobs.lever.co/spotify, https://jobs.eu.lever.co/<name>), or greenhouse:gitlab / ashby:linear / lever:spotify / lever-eu:<name>. A bare name (gitlab) means Greenhouse |
outputMode | all = every open job with its status, plus jobs closed since last run. changes = only new, changed, reopened and closed |
description | text (default), html or none |
titleKeywords, excludeTitleKeywords, locationKeywords | Simple case-insensitive filters, for example engineer / intern / remote |
trackingId | Runs with the same ID share their memory of seen jobs. Use one per task |
maxItems | Safety cap per run (0 = none) |
Finding a board: open the company's careers page. If job links go to job-boards.greenhouse.io/<token>/..., boards.greenhouse.io/<token>, jobs.ashbyhq.com/<name>/... or jobs.lever.co/<name>/..., paste that URL.
Run it with an empty input to see a free preview (10 jobs from a public board, nothing billed or tracked).
Output
One item per job:
{"source": "greenhouse","board": "gitlab","company": "GitLab","jobId": "8638232002","title": "AI Transformation Owner, CRO","url": "https://job-boards.greenhouse.io/gitlab/jobs/8638232002","location": "Remote, United States","departments": ["Enablement"],"offices": ["United States of America"],"requisitionId": "6682","applyUrl": "https://job-boards.greenhouse.io/gitlab/jobs/8638232002","firstPublishedAt": "2026-07-22T13:38:40-04:00","updatedAt": "2026-11-06T15:25:07-05:00","description": "GitLab is the intelligent orchestration platform...","changeStatus": "changed","changedFields": ["title"],"firstSeenAt": "2026-11-10T09:00:00.000Z","lastSeenAt": "2026-11-11T09:00:00.000Z","closedAt": null}
Ashby jobs fill a few extra fields (Greenhouse leaves them null): employmentType (FullTime, Contract…), workplaceType (Remote, Hybrid, OnSite), isRemote, compensation (for example "$207K – $285K • Offers Equity"), salaryMin, salaryMax, salaryCurrency, salaryInterval. For Ashby, company is the board name and departments holds the department and team.
Lever jobs fill the same extra fields: employmentType is the company's own label (Full-time, Permanent, Internship…), workplaceType is Remote, Hybrid or OnSite, and the salary fields are set when the company publishes a range. company is the board name, departments holds the department and team, and offices lists every location of the job. Lever board names are case-sensitive, so paste the URL as it is.
Closed jobs keep their last known title, URL, location and company, with changeStatus: "closed" and closedAt set. A run summary (counts per board, failures with a fix hint) is saved as OUTPUT in the run's key-value store.
How tracking works: the first run for a board marks every job as new (that is the baseline). Later runs compare against the jobs seen before, stored in a named key-value store ats-jobs-feed-tracking in your own account. A closed job is reported once; if it is re-posted within 90 days it comes back as reopened.
Pricing
Pay per event:
- Job output: $1.00 per 1,000 jobs in the dataset (new, changed, unchanged or closed).
- Actor start: $0.001 per run.
With Only changes on a daily schedule you pay only for what changed. Example: 50 companies with 2,000 open jobs and about 60 changes a day cost about $0.06 a day.
Works with Neatrow
- Google Sheets Sync: Append & Deduplicate — add it as an integration on this Actor, de-duplicate by
jobId+changeStatus, and get a spreadsheet that fills itself with new and closed roles.
Notes
- Only public job boards are read. The data is what companies publish for applicants.
- If a board answers with a partial list, no job is marked closed in that run (the log says so).
- If you hit your maximum cost per run, the unfinished board is reported in full again next run, so no change is lost.