Greenhouse, Lever, Ashby, Workable - Career Site Jobs API
Pricing
$2.00 / 1,000 job listing returneds
Greenhouse, Lever, Ashby, Workable - Career Site Jobs API
Scrape every open job from a company's Greenhouse, Lever, Ashby or Workable careers page into one normalised schema. Give it a mixed list of career sites, get one job-listings dataset back. No API key, no proxy, no browser.
Pricing
$2.00 / 1,000 job listing returneds
Rating
0.0
(0)
Developer
Pablo D
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Greenhouse, Lever, Ashby & Workable Jobs API — every career site job listing in one schema
You have a list of companies and you need their open job listings. Their careers pages run on four different applicant tracking systems, each with a different API and different field names. This Actor takes the mixed list and returns one normalised job-listings dataset — same 22 fields for every company, whichever ATS they use.
No API key. No proxy. No browser. No login. Just company career sites in, structured job listings out.
greenhouse:stripe ─┐lever:palantir ─┤ashby:ramp ─┼──► one dataset, 22 identical fields per jobworkable:blueground┘
What problem this solves
Most job scrapers on the Apify Store cover one ATS. Tracking 200 companies therefore means running four different Actors, learning four different output shapes, and writing the reconciliation yourself. Greenhouse calls it updated_at, Lever calls it createdAt, Ashby calls it publishedAt, Workable calls it published_on. This Actor does that reconciliation once, correctly, and gives you postedAt and updatedAt.
It reads each vendor's own public job-board API — the endpoint they publish so that aggregators can consume it — so the data is the company's source of truth, not a re-scrape of a re-scrape.
Use cases
- Recruiting and talent intelligence — track hiring across a portfolio of companies and see which teams are growing. Schedule a daily run and diff the dataset for new-role alerts.
- Build a niche job board or newsletter — climate tech, Berlin, remote design — from the companies' own boards rather than a second-hand aggregator.
- Sales and hiring-intent signals — job postings are a leading indicator. A company hiring five Salesforce admins is buying Salesforce; a company hiring three SREs is scaling infrastructure.
- Market and labour research — department mix, seniority mix, remote share, salary bands where the ATS publishes them.
- Feed an LLM or RAG index with fresh, structured, clearly-sourced job text.
Scrape Greenhouse job boards
Greenhouse boards live at job-boards.greenhouse.io/<token>. Pass the URL or greenhouse:<token>. Greenhouse is the richest source here: it is the only one of the four that publishes updatedAt, and it returns companyName.
Scrape Lever job boards
Lever boards live at jobs.lever.co/<token>. Pass the URL or lever:<token>. Lever's robots.txt asks for a one-second crawl delay and this Actor enforces it — requestDelaySeconds cannot go below 1 for Lever. Lever does not publish the company's display name, so companyName is null (companySlug and boardUrl still identify the company).
Scrape Ashby job boards
Ashby boards live at jobs.ashbyhq.com/<token>. Pass the URL or ashby:<token>. Ashby is the best source for salary: it is the only one of the four that reliably publishes a compensation range, which arrives in salaryText (for example "$211.4K - $290.6K").
Scrape Workable job boards
Workable boards live at apply.workable.com/<token>/. Pass the URL or workable:<token>. Workable returns flat city/state/country fields plus a locations array; all of it is normalised into location, locations and country.
Per-job Workable short links (apply.workable.com/j/<code>) are not board tokens and are rejected with a clear error rather than silently scraped as a board called j.
Input
Pass boards in whatever form you already have them — a careers URL, a provider:token pair, or a bare token:
{"companies": ["https://job-boards.greenhouse.io/stripe","https://jobs.lever.co/palantir","https://jobs.ashbyhq.com/ramp","https://apply.workable.com/blueground/","greenhouse:figma","lever:leverdemo","ashby:ramp"],"includeDescription": true,"remoteOnly": false,"titleKeywords": ["engineer", "data"],"postedWithinDays": 30,"maxJobsTotal": 1000,"requestDelaySeconds": 1}
A bare token (stripe) uses the Default ATS provider setting.
How do I find a company's ATS board token?
It is the path segment in the careers URL:
| ATS | Careers URL | Token |
|---|---|---|
| Greenhouse | https://job-boards.greenhouse.io/stripe | stripe |
| Lever | https://jobs.lever.co/palantir | palantir |
| Ashby | https://jobs.ashbyhq.com/ramp | ramp |
| Workable | https://apply.workable.com/blueground/ | blueground |
If the careers page sits on the company's own domain, the ATS is almost always visible in the Apply link. If you have domains rather than tokens, run Website Tech Stack & Email Finder first — it returns atsProvider and atsToken for a domain, which drop straight into this Actor's companies input.
Boards that were live when this Actor was last verified, if you want something to try it on:
greenhouse:monzo, lever:leverdemo, ashby:ramp, workable:blueground, workable:skroutz, workable:orfium, workable:epignosis.
Output — one row per open job
Every field is present for every ATS, null where that ATS does not publish it:
{"source": "ashby","companySlug": "ramp","companyName": null,"jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","title": "Security Engineer, Cloud","url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-.../application","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "Remote (Canada)"],"country": "USA","department": "Engineering","team": "Backend","employmentType": "FullTime","isRemote": true,"workplaceType": "Hybrid","postedAt": "2026-04-07T17:12:35.753000+00:00","updatedAt": null,"salaryText": "$211.4K - $290.6K","descriptionText": "About Ramp ...","descriptionHtml": "<p>About Ramp ...</p>","boardUrl": "https://jobs.ashbyhq.com/ramp","scrapedAt": "2026-09-10T10:22:41.010000+00:00"}
The run also writes a RUN_SUMMARY record to the key-value store with boards processed, jobs pushed and any board that failed — the quickest way to validate a long list of tokens.
Filtering
titleKeywords, excludeTitleKeywords, locationKeywords, remoteOnly, postedWithinDays, maxJobsPerCompany, maxJobsTotal.
Filtering happens after the fetch, so it does not reduce the number of requests — but maxJobsTotal caps your dataset size and therefore your cost, because this Actor charges per job returned.
Honest limitations
- Four ATS platforms, not all of them. SmartRecruiters and Recruitee are deliberately not supported: their
robots.txtsaysDisallow: /for generic clients, so this Actor does not touch them. Workday, Taleo, iCIMS and SAP SuccessFactors have no comparable open board API and are out of scope. companyNameis published by Greenhouse and Workable only; it isnullfor Lever and Ashby.updatedAtis published by Greenhouse only.- Salary is published by Ashby, and occasionally Lever. Most boards do not expose it at all.
- Only public, listed jobs. Confidential and unlisted postings never appear in these APIs, and this Actor does not try to find them.
- Board tokens must be right. A wrong token returns HTTP 404; turn on Emit an item for failed boards to get those back as dataset rows instead of log lines.
includeDescriptiontypically multiplies dataset size by 10–30×. Turn it off if you only need titles, locations and links.
How the data is obtained
Each source is the ATS vendor's own public, unauthenticated job-board API:
boards-api.greenhouse.io/v1/boards/{token}/jobsapi.lever.co/v0/postings/{token}?mode=jsonapi.ashbyhq.com/posting-api/job-board/{token}apply.workable.com/api/v1/widget/accounts/{token}
No login, no captcha solving, no proxy rotation, no browser automation. robots.txt was checked for every host.
FAQ
Is there a Greenhouse jobs API I can just call?
Yes — boards-api.greenhouse.io is public. This Actor calls it for you, plus the Lever, Ashby and Workable equivalents, and normalises all four into one schema so you do not write four parsers.
How do I scrape a company's careers page? If the careers page is hosted by one of these four ATS platforms, use this Actor with the board token — that is the reliable route. If the company hosts its own HTML careers page, this Actor is not the right tool; nothing here renders JavaScript or parses arbitrary markup.
Can I get job listings from many companies at once?
Yes, that is the point. Pass hundreds of boards in companies. Roughly one request per company; a 50-company list finishes in about a minute, and a measured 25-board run returned 4,287 jobs in 65 seconds.
Does this scrape LinkedIn, Indeed or Glassdoor? No. It reads company-owned ATS boards only. That is a deliberate trade: fewer sources, but first-party data, no anti-bot arms race and no proxy bill.
How do I find which ATS a company uses?
Run Website Tech Stack & Email Finder over the company's domain. It returns atsProvider, atsToken and atsBoardUrl, which feed directly into this Actor.
Do I need an Apify Proxy or residential IPs? No. These are public JSON APIs and this Actor exposes no proxy input at all.
What does it cost?
It charges per job listing returned. maxJobsTotal is the cap that controls your bill; a run that returns nothing costs nothing.
Changelog
See CHANGELOG.md.
Support
Found a bug, or need a field this Actor does not return yet? Open an issue on the Actor's Issues tab, or email pablodevigoalertas@gmail.com. Issues are read first.