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.