ATS Job Board Feed: Greenhouse, Lever & Ashby Jobs
Pricing
from $1.70 / 1,000 job postings
ATS Job Board Feed: Greenhouse, Lever & Ashby Jobs
Pulls open jobs from company job boards on Greenhouse, Lever and Ashby through their public APIs into one clean schema. Filter by location, department, keyword or remote, and track only new, changed and closed jobs between runs. No recruiter names or emails.
Pricing
from $1.70 / 1,000 job postings
Rating
0.0
(0)
Developer
Shyheim Ulrickson
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Use it to get every open job from the companies you track, straight from their Greenhouse, Lever and Ashby job boards, in one clean table, and on a schedule get only the jobs that are new, changed or closed.
Cost: $2 per 1,000 jobs returned, plus $0.50 per 1,000 closed-job alerts. A default run is capped at 100 rows, which is at most $0.20.
Why this one
- Three ATSs, one schema. Greenhouse, Lever and Ashby jobs come back with the same fields: company, title, location, department, remote flag, dates, apply link and pay range when it is published.
- Only what changed. Change tracking returns new and changed jobs plus a
job-closedrow when a posting comes down, so a daily schedule is a hiring-signal feed, not the same list every day. - Straight from the source. It reads each ATS's official public job-board API, the same feed the company's careers page uses. No browser, no login, no proxies.
- No personal data. Recruiter and hiring-manager names, emails, phone numbers and profile links never reach the output.
Sample output (real run on the prefilled boards airbnb on Greenhouse, leverdemo on Lever and ashby on Ashby, Oct 20, 2026):
| company | title | location | department | isRemote | ats |
|---|---|---|---|---|---|
| Airbnb | Associate Principal, Procurement Innovation Supplier Programs | United States | Financial Planning and Analysis | true | greenhouse |
| Leverdemo | Customer Success Manager | Atlanta, Georgia | Customer Success | false | lever |
| ashby | Senior Product Designer | Remote - US | Design | true | ashby |
That run read 253 open jobs across the three boards in under 3 seconds, made 3 API requests, and returned 100 rows (the default cap, shared across the boards).
What it does
- Accepts whatever you paste. A board token (
airbnb), the careers board URL (https://boards.greenhouse.io/airbnb,https://jobs.lever.co/leverdemo,https://jobs.ashbyhq.com/ashby), a single job URL, or the API URL itself. - Normalises three ATSs. Departments, teams, employment type, workplace type, all listed locations and salary ranges are mapped into the same fields whichever ATS the company uses.
- Filters before you pay. Title keywords (include and exclude), location, department or team, and remote/not remote. Only matching jobs are returned and charged.
- Tracks changes. In change mode each board's baseline lives in a named key-value store. Jobs are labelled
neworchanged, unchanged jobs are skipped, and jobs that disappeared are returned asjob-closedrows. - Optional descriptions. Turn on Include job description text to get the description as plain text, with contact details removed.
Input
Minimum viable input:
{"greenhouseBoards": ["airbnb"]}
Engineering jobs in New York or remote, across several companies:
{"greenhouseBoards": ["airbnb", "https://boards.greenhouse.io/stripe"],"leverSites": ["leverdemo"],"ashbyBoards": ["ashby"],"titleKeywords": ["engineer"],"excludeTitleKeywords": ["intern"],"locationKeywords": ["new york", "remote"],"maxItems": 500}
A daily hiring-signal monitor that alerts only on jobs posted from now on:
{"greenhouseBoards": ["airbnb"],"ashbyBoards": ["ashby"],"mode": "changes","skipExistingOnFirstRun": true,"stateStoreName": "my-hiring-monitor"}
Key settings
| Field | Default | Notes |
|---|---|---|
greenhouseBoards | — | Greenhouse board tokens or URLs. If none of the three board fields is filled, the run uses the demo boards (airbnb, leverdemo, ashby), capped at 100 jobs (at most $0.20), instead of failing. |
leverSites | — | Lever site names or URLs. EU sites (jobs.eu.lever.co) are detected automatically. |
ashbyBoards | — | Ashby job board names or URLs. Case-sensitive. |
mode | snapshot | changes returns only new, changed and closed jobs. |
emitClosedJobs | true | Change mode: return job-closed rows. |
skipExistingOnFirstRun | false | Change mode: save today's jobs silently and alert only on later ones. |
stateStoreName | ats-job-board-feed-state | Change mode: where the baseline lives. Use one per saved task. |
titleKeywords / excludeTitleKeywords | — | Case-insensitive, any word matches. |
locationKeywords / departmentKeywords | — | Case-insensitive, any word matches. |
remote | any | remote or notRemote to filter. |
includeDescription | false | Adds redacted plain-text descriptions. |
maxItems | 100 | Rows per run, shared fairly across boards. |
requestsPerSecond | 2 | Global ceiling. robots.txt crawl-delay is honoured as well. |
Output
One row per job. A real row from the run above:
{"type": "job","ats": "lever","boardToken": "leverdemo","company": "Leverdemo","jobId": "ad208490-4052-4f91-a57e-433f2d1e484b","title": "Customer Success Manager","location": "Atlanta, Georgia","locations": ["Atlanta, Georgia"],"department": "Customer Success","team": "Customer Success Team","employmentType": "Regular Full Time (Salary)","workplaceType": "hybrid","isRemote": false,"postedAt": "2026-08-31T18:12:19.703Z","applyUrl": "https://jobs.lever.co/leverdemo/ad208490-4052-4f91-a57e-433f2d1e484b/apply","jobUrl": "https://jobs.lever.co/leverdemo/ad208490-4052-4f91-a57e-433f2d1e484b","salary": { "min": 85000, "max": 175000, "currency": "USD", "interval": "per-year-salary" },"scrapedAt": "2026-10-20T14:24:26.947Z"}
In change mode a row also carries changeType (new or changed) and firstSeenAt. A posting that came down is returned as a job-closed row with this shape (illustrative timestamps):
{"type": "job-closed","ats": "greenhouse","boardToken": "airbnb","company": "Airbnb","jobId": "7789554","title": "Associate Legal Counsel, Japan","location": "Tokyo, Japan","department": "Legal","changeType": "closed","firstSeenAt": "2026-10-19T12:00:00.000Z","closedDetectedAt": "2026-10-20T12:00:00.000Z","scrapedAt": "2026-10-20T12:00:00.000Z"}
ats + boardToken + jobId is a stable unique key across runs. The dataset ships two views: Jobs and New, changed and closed.
RUN_SUMMARY in the key-value store lists, per board, how many jobs were on the board, how many matched your filters, how many rows were written, the change counts, any error, and the charged events.
Use cases
- Sales and recruiting signals. A company opening five data roles is buying data tools. Watch your target accounts and get only the new postings.
- Job aggregators and niche job boards. Pull clean, deduplicated jobs from the source ATS instead of scraping careers pages.
- Competitive intelligence. Track which teams competitors are growing or shutting down, through
newandjob-closedrows. - Labour-market research. Remote share, locations and published pay ranges across companies, in one schema.
Limits and things to know
- You supply the boards. The Actor reads companies you name; it does not search all of Greenhouse, Lever or Ashby. The token is the first part of the path on the company's job board.
- Public postings only. It reads the public job-board APIs that the ATSs publish for careers pages. Unlisted Ashby postings are skipped.
- Personal data is removed, best effort. Only an allow-list of job fields is copied; Greenhouse custom fields, which can hold recruiter or hiring-team details, are never output. Descriptions are off by default, and when on, emails, phone numbers, personal profile links and named recruiter or "Hi, I'm …" introductions are replaced with placeholders.
- Company name. Greenhouse reports the company name; for Lever and Ashby the board name is used.
updatedAtis Greenhouse only. Lever and Ashby do not publish an update time, so "changed" there means a tracked field such as title, location, team or pay changed.- Change mode's first run returns everything unless you set
skipExistingOnFirstRun. RenamingstateStoreNamestarts a fresh baseline. - No false closures from a bad response. A board that fails to load leaves its baseline untouched, and a board that suddenly shows zero jobs must stay empty for two runs before its jobs are reported closed.
- Rows held back by
maxItemsor your spending limit are not lost in change mode: they are returned on the next run. - robots.txt is honoured on every API host, including any crawl-delay.
Pricing events
| Event | Price | Charged when |
|---|---|---|
job | $0.002 ($2 per 1,000) | One job row was written to the dataset. |
job-closed | $0.0005 ($0.50 per 1,000) | One job-closed row was written in change mode. |
Jobs filtered out, unchanged jobs in change mode, and boards that failed to load are not charged. A board that cannot be read (for example a mistyped name) adds one free board-error row with the reason and is named in the run's status message; the other boards still run. When the run reaches your maximum total charge it writes only the rows already paid for and stops cleanly, with the reason in RUN_SUMMARY. RUN_SUMMARY.charging shows units of work next to units billed.
FAQ
How do I find a company's board token?
Open the company's careers page and look at the job-board address: boards.greenhouse.io/<token>, jobs.lever.co/<site> or jobs.ashbyhq.com/<name>. You can also paste that URL, or any single job URL, and the Actor works out the token.
How do I get only new jobs every day?
Set Run mode to only new and changed jobs and schedule the Actor (Console > Schedules). Turn on Skip existing jobs on the first run if you want alerts only for jobs posted from now on.
Can it search all companies on Greenhouse, Lever or Ashby?
No. You choose the companies. The Actor reads the public job boards of the companies you list, which keeps results precise and runs cheap.
Does it collect recruiter names or emails?
No. Only job fields are copied. Descriptions are off by default and, when on, have emails, phone numbers, personal profile links and named recruiter introductions removed.
Can I send new jobs to Google Sheets, Slack or my CRM?
Yes. Use Apify's integrations (Google Sheets, Slack, Zapier, Make, n8n, webhooks) or the API to forward each scheduled run's new jobs.
Feedback
This Actor is new and actively maintained. If a board fails, a field is missing, or a result looks wrong, please open an issue on the Issues tab with the run ID and the board. We read and reply to every issue, and requests for more ATSs or filters are very welcome.