If you're comfortable with a URL and a blob of JSON, Greenhouse and Lever both expose a public feed of job listings you can pull straight from the source — no third-party tool required. This is the technical, DIY path, and where it works it's usually the fastest, most direct option available — faster than waiting on a job board, and free. It's also unfiltered, has no built-in dedupe, and doesn't cover Workday, which is the biggest gap for anyone trying to cover a mixed shortlist of companies. JobNotify builds a monitoring tool that comes up as one alternative near the end; this guide is primarily about doing it yourself.
About this guide. JobNotify builds a careers-page monitoring tool, mentioned near the end as one alternative to maintaining this yourself. The Greenhouse and Lever endpoint details, and the DIY setup instructions, work whether or not you ever use a paid product. See About JobNotify for who we are.
What “RSS feed” means for job boards today
Most modern hiring platforms don’t publish classic XML RSS — Greenhouse and Lever expose public JSON APIs: a predictable URL that returns current listings as structured data. That’s often better for automation than old-school RSS, but you can’t paste the URL into a feed reader and expect blog-style RSS. You need a JSON-to-RSS bridge or a bit of scripting.
Where a feed exists and covers your targets, it’s generally the better default over Google Alerts or a paid monitor: closer to real time, free, straight from the source. The trade-off is your setup time — and Workday (and most other ATS platforms) usually have no equivalent. Method overview: situation hub for company job alerts.
Greenhouse’s Job Board API
Greenhouse publishes a public Job Board API — offices, departments, and published jobs as JSON:
https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs?content=trueThe {board_token} is often visible in the careers URL (job-boards.greenhouse.io/{board_token}) or in network requests on the page. ?content=trueincludes each job’s full HTML description. Per job you get title, URL, location, department and office associations, an ID, and an update timestamp — JSON only, no native XML/RSS.
Lever’s Postings API
Lever’s equivalent:
https://api.lever.co/v0/postings/{company}?mode=jsonThe {company} slug matches jobs.lever.co/{company}. mode=jsonreturns structured JSON — title, team, location, commitment, posting URL, timestamp — every current opening, unfiltered. Same story as Greenhouse: you’re reading the data the careers page renders from, not a secondary RSS format.
Ashby’s public job-board endpoint, and the Workday gap
Ashby also documents a public job posting API many boards expose at this pattern:
https://api.ashbyhq.com/posting-api/job-board/{JOB_BOARD_NAME}The {JOB_BOARD_NAME} usually matches the slug in jobs.ashbyhq.com/{JOB_BOARD_NAME}. Like Greenhouse and Lever, it’s JSON you can poll and filter downstream, not classic RSS. Workday is the common exception in the other direction: for job seekers, Workday-hosted careers pages usually do not expose a comparable public JSON/RSS endpoint you can subscribe to directly.
Worked example: poll one board and diff job IDs
Use placeholder tokens first, then swap in the real company values you found in the careers URL or network requests:
# Greenhouse
board_token="acme"
curl -s "https://boards-api.greenhouse.io/v1/boards/${board_token}/jobs?content=true"
# Lever
company_slug="acme"
curl -s "https://api.lever.co/v0/postings/${company_slug}?mode=json"
# Ashby
JOB_BOARD_NAME="acme"
curl -s "https://api.ashbyhq.com/posting-api/job-board/${JOB_BOARD_NAME}"Minimal checklist:
- Fetch the endpoint and confirm the response contains an array or object with current jobs.
- Extract each stable job ID (
id, postingId, or the platform’s equivalent) plus title and URL. - Store yesterday’s IDs in a file, database table, or automation tool data store.
- Diff today’s job IDs against the stored set; notify only on IDs you have not seen before.
- Update the stored set after a successful run so edits and reorders don’t become duplicate alerts.
Turning JSON into a feed (and piping it somewhere)
Once you have a working JSON URL:
- JSON-to-RSS bridge.Self-hosted RSS-Bridge or a hosted converter wraps the endpoint into XML you can subscribe to in Feedly, Inoreader, or NetNewsWire — closest to “paste a URL and be done.”
- Zapier, Make, or n8n. Poll every 15–60 minutes, filter on keywords if the tool allows, notify via email, Slack, or a spreadsheet. n8n is useful when you combine several companies and want shared dedupe/filter logic before notifying.
- A small scheduled script. Fetch, diff against stored job IDs, notify on new ones — most flexible, and you own dedupe and filtering entirely.
The endpoint returns the same unfiltered list to everyone — filtering, dedupe, and formatting live in whatever consumes it.
These are polling endpoints, not push notifications. “Real time” means as fast as you (or your bridge) choose to poll — every few minutes is near-instant; once a day is a digest.
What DIY doesn’t do — and when to skip it
- No filtering at the source — location, department, and keywords are all downstream, on you
- No dedupe — track job IDs yourself or the same role can resurface on edit/reorder/overlap
- Workday usually has no equivalent public feed — myworkdayjobs.com pages typically need another method
- Other ATS platforms (SmartRecruiters, Workable, custom pages, etc.) are their own research project
- You maintain it — bridges break, endpoints shift, scripts go quiet
- Multi-company multiplies work — separate endpoint, bridge/poll, and filter logic per company
Skip DIY if any target is on Workday (or another platform without a public endpoint), your shortlist spans several ATS platforms, you don’t want to own maintenance, or you need filtering/dedupe without building it. Then a dedicated monitor — JobNotify, OpenJobRadar, JobBeacon, or a general page-change tool like Visualping or ChangeTower — trades your setup time for someone else’s infrastructure. Fair trade for some people, not others. Lever native alerting: does Lever have job alerts?
DIY feeds vs. a dedicated monitoring tool
| DIY feed (Greenhouse/Lever API + bridge) | Dedicated monitoring tool |
|---|
| Platforms covered | Greenhouse, Lever, Ashby (public endpoints only) | Varies — JobNotify, OpenJobRadar, and JobBeacon cover Workday and several other ATS platforms plus Greenhouse/Lever |
| Filtering | None built in — you build it downstream | Keyword, description, location, exclude words (varies by product) |
| Dedupe | Not built in — you track job IDs yourself | Typically handled for you |
| Setup effort | Medium to high — bridge or script per company | Low — add a company URL and set filters |
| Speed | As fast as you choose to poll | Minutes to daily, depending on plan and product |
| Cost | Free (your time is the cost) | Free tiers exist on several products; paid plans typically buy speed and scale |
DIY fitsif you’re only on Greenhouse and/or Lever, you’re comfortable maintaining a bridge or script, and you want raw access (or enjoy the plumbing). A monitor fits if your list spans platforms (especially Workday), you want filters without building them, or per-company setup is adding up. Middle ground: DIY for one or two companies you care about technically; a monitor or board alert for the rest. One employer: job alerts for a specific company; how monitors work: career page monitoring.
The bottom line
Greenhouse and Lever public job endpoints are genuinely useful if you’re technical and want raw, close-to-real-time access with no third party — and where they exist, they’re usually the better default over Google Alerts or a paid tool. Filtering, dedupe, and maintenance are on you; Workday or another non-feed platform usually ends coverage. For a mixed shortlist — or if you’d rather not maintain the plumbing — JobNotify, OpenJobRadar, JobBeacon, or a general page-change tool trades setup time for a subscription. Which side wins depends on your list, not on which option is “better” in the abstract.
Want filtered alerts without maintaining feeds?
Roles hit a company’s careers page first. Be in the first wave of applicants — not the two-hundredth on LinkedIn.