Greenhouse, Lever and Ashby job board APIs: one feed of new jobs at the companies you care about
Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee all publish public job-board endpoints so companies can show openings on their own careers pages. No API key is needed. If you know a company's board slug, you can read its open jobs as JSON:
- Greenhouse:
https://boards-api.greenhouse.io/v1/boards/<slug>/jobs - Lever:
https://api.lever.co/v0/postings/<slug>?mode=json - Ashby:
https://api.ashbyhq.com/posting-api/job-board/<slug>
That's enough for one company. It gets messy when you want "these 200 companies, every morning, only what's new":
- six different schemas (salary is a structured field on some and buried in the description on others),
- figuring out which ATS each company uses,
- diffing today's list against yesterday's to find new and removed jobs,
- collapsing the same role posted in five cities.
Who actually needs this
- Sales teams using hiring as a buying signal ("they just opened four data-engineering roles").
- Recruiters watching competitors and target companies.
- Niche job boards that need new listings plus a notice when a listing comes down.
- Analysts tracking headcount plans at a set of companies.
Step 1: Build a watchlist
The Company Careers Job Feed Actor on Apify accepts careers URLs, ats:slug, domains or plain names. If you don't know the ATS, give it a domain and it tries each supported board:
{ "companies": ["https://boards.greenhouse.io/stripe", "lever:palantir", "ramp.com", "notion"], "titleKeywords": ["data engineer", "revops", "security"], "countries": ["US"], "onlyNew": true, "includeRemoved": true, "monitorId": "target-accounts" } Companies that can't be found are listed in the run's NOT_FOUND_COMPANIES record and aren't charged.
Step 2: What comes back
One schema across all six ATSs: title, department, seniority (derived from the title), location normalized to city, region and country, workplaceType (remote/hybrid/onsite), salaryMin/salaryMax with salarySource (ats or description), postedAt, apply URL and the company domain.
Step 3: Schedule it and only pay for new jobs
Save it as a Task and schedule it daily. The first run returns all matching open jobs. Every run after that returns only new jobs for this monitorId, plus a free removed record when a job disappears (so you can tell it was filled or closed, and how long it was open).
- Money: $0.018 per job delivered. Repeats, collapsed duplicates, filtered-out jobs, removed notices and not-found companies are free.
- Time: no diffing script to maintain, and no dedupe in your sheet.
- Mental effort: the Slack message says "3 new roles at Acme", not a list of 400 you've already seen.
Step 4: Pipe it somewhere useful
From Python:
from apify_client import ApifyClient client = ApifyClient("<YOUR_APIFY_TOKEN>") run = client.actor("SureSignal/company-careers-job-feed").call(run_input={ "companies": ["ramp.com", "notion", "lever:palantir"], "titleKeywords": ["data engineer"], "monitorId": "data-eng-watch", }) for job in client.dataset(run["defaultDatasetId"]).iterate_items(): print(job["status"], job["companyName"], job["title"], job.get("salaryMin"), job["url"]) Or with no code: Apify integrations → Slack, Google Sheets, a webhook, n8n, Make or Zapier.
Cost examples (list price)
- 50 target accounts producing about 600 new jobs a month ≈ $10.80
- A one-off snapshot of 1,500 jobs ≈ $27
These are illustrations only. Your cost depends on how often your companies post, and Max jobs per run caps it.
Honest limits
- No LinkedIn, Indeed or Glassdoor. Only first-party company job boards.
- Workday, iCIMS, Taleo and SuccessFactors aren't supported yet.
- It doesn't discover companies; you bring the list.
- No currency conversion.
- Greenhouse and Workable rarely expose salary as a field.
A decision is only as good as the information behind it. Knowing which account just started hiring is only useful if you hear about it this week, not after you've re-read the same 400 postings.
SureSignal: only pay for new data.
Try it: company-careers-job-feed on the Apify Store. You only pay for new data: runs on a schedule skip what you've already received.