ATS Job Board Feed: Greenhouse, Lever & Ashby Jobs avatar

ATS Job Board Feed: Greenhouse, Lever & Ashby Jobs

Pricing

from $1.70 / 1,000 job postings

Go to Apify Store
ATS Job Board Feed: Greenhouse, Lever & Ashby Jobs

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

Shyheim Ulrickson

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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-closed row 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):

companytitlelocationdepartmentisRemoteats
AirbnbAssociate Principal, Procurement Innovation Supplier ProgramsUnited StatesFinancial Planning and Analysistruegreenhouse
LeverdemoCustomer Success ManagerAtlanta, GeorgiaCustomer Successfalselever
ashbySenior Product DesignerRemote - USDesigntrueashby

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 new or changed, unchanged jobs are skipped, and jobs that disappeared are returned as job-closed rows.
  • 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

FieldDefaultNotes
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.
modesnapshotchanges returns only new, changed and closed jobs.
emitClosedJobstrueChange mode: return job-closed rows.
skipExistingOnFirstRunfalseChange mode: save today's jobs silently and alert only on later ones.
stateStoreNameats-job-board-feed-stateChange mode: where the baseline lives. Use one per saved task.
titleKeywords / excludeTitleKeywords—Case-insensitive, any word matches.
locationKeywords / departmentKeywords—Case-insensitive, any word matches.
remoteanyremote or notRemote to filter.
includeDescriptionfalseAdds redacted plain-text descriptions.
maxItems100Rows per run, shared fairly across boards.
requestsPerSecond2Global 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 new and job-closed rows.
  • 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.
  • updatedAt is 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. Renaming stateStoreName starts 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 maxItems or 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

EventPriceCharged 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.