Job Postings API – Greenhouse, Lever, Ashby & Workable Jobs
Pricing
Pay per event
Job Postings API – Greenhouse, Lever, Ashby & Workable Jobs
Job postings API for company career sites: get every open job from Greenhouse, Lever, Ashby, Workable and SmartRecruiters job boards in ONE unified format – title, location, remote, department, salary, posted date, apply URL, description. No login, no proxy.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Scrapeworks HQ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Job Postings API – Greenhouse, Lever, Ashby, Workable & SmartRecruiters Jobs Scraper
Pull every open job from company career boards hosted on Greenhouse, Lever, Ashby, Workable and SmartRecruiters – the applicant-tracking systems behind most tech, startup and enterprise career pages – and get them back in one unified schema: title, company, location(s), remote flag, workplace type, department/team, employment type, salary range (when the company publishes it), posted date, job URL, apply URL and full description (text + HTML).
Uses each ATS's official public job-board API (the same feeds that power the companies' own careers pages). No login, no API key, no proxy, no personal data. Export to JSON, CSV, Excel or via the Apify API.
🚀 Quick start (60 seconds)
- Click Try for free – the input is prefilled with a working example.
- Press Start. A small run finishes in seconds and costs fractions of a cent.
- Open the Output tab (table view) and export CSV, Excel, JSON or connect Google Sheets.
{"companies": ["greenhouse:airbnb","https://jobs.lever.co/palantir","jobs.ashbyhq.com/ramp"],"titleKeywords": ["engineer"],"maxJobsPerCompany": 20}
Sample output
| companyName | title | location | isRemote | department | postedAt | applyUrl |
|---|---|---|---|---|---|---|
| Hugging Face | Open-Source ML Engineer | Paris, France | true | Open Source | 2026-05-29 | apply.workable.com/j/81B46579FE |
| Airbnb | Senior Software Engineer | Remote - US | true | Engineering | 2026-10-14 | boards.greenhouse.io/airbnb/jobs/… |
Why this job postings API / ATS jobs scraper?
| This Actor | Typical single-ATS scrapers | |
|---|---|---|
| Greenhouse + Lever + Ashby + Workable + SmartRecruiters in one run | ✅ | ❌ usually one ATS per Actor |
| One unified output schema across platforms | ✅ | ❌ different fields per tool |
| Bare company slug auto-detected across all 5 ATSs | ✅ | ❌ |
| Structured salary min/max/currency/interval (Ashby, Lever) | ✅ | rarely |
| Filters: title include/exclude, location, remote only, posted within N days | ✅ | partial |
| Full description as clean text and HTML | ✅ | often HTML only |
| No proxy needed → fast & cheap | ✅ | varies |
| Price | $1.10 / 1,000 jobs | $2.00 / 1,000 (most-used Greenhouse jobs Actor) |
Use cases – job board aggregation, hiring signals & job alerts
- 🧲 Job aggregators & niche job boards – feed fresh postings from hundreds of companies daily.
- 📈 Hiring-signal / sales intelligence – detect which companies are hiring for which teams (e.g. "hiring first data engineer" = buying intent).
- 💰 Salary benchmarking – collect published pay ranges by title and location.
- 🔎 Job seekers & recruiters – monitor target companies, get alerted to new roles with
postedWithinDays: 1. - 🤖 AI agents / RAG – clean, consistent job JSON for LLM pipelines.
Input
| Field | Description |
|---|---|
companies | Career board URLs, platform:slug, or bare slugs (auto-detect). |
titleKeywords / excludeTitleKeywords | Case-insensitive title filters. |
locationKeywords | Keep jobs whose location contains any keyword. |
remoteOnly | Only remote-flagged jobs. |
postedWithinDays | Only jobs published in the last N days. |
includeDescription | Include descriptionText + descriptionHtml (default on). |
maxJobsPerCompany, maxJobsTotal | Limits (0 = unlimited). |
Accepted company formats:
greenhouse:airbnb https://boards.greenhouse.io/airbnb https://job-boards.greenhouse.io/stripelever:palantir https://jobs.lever.co/palantirashby:ramp https://jobs.ashbyhq.com/rampworkable:huggingface https://apply.workable.com/huggingfacesmartrecruiters:BoschGroup https://jobs.smartrecruiters.com/BoschGroupnotion (bare slug – tried on all 5 platforms)
Example:
{"companies": ["greenhouse:stripe", "ramp", "https://jobs.lever.co/palantir"],"titleKeywords": ["engineer"],"excludeTitleKeywords": ["manager"],"locationKeywords": ["New York", "Remote"],"postedWithinDays": 30}
Output
One item per job (see sample-output.json for real examples from each platform):
{"platform": "ashby","companySlug": "ramp","jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","title": "Security Engineer, Cloud","companyName": "Ramp","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],"isRemote": true,"workplaceType": "Hybrid","department": "Engineering","team": "Backend","employmentType": "FullTime","salaryMin": 211400,"salaryMax": 290600,"salaryCurrency": "USD","salaryInterval": "1 YEAR","salaryText": "$211.4K - $290.6K","postedAt": "2026-04-07T17:12:35.753Z","url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application","descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams…","scrapedAt": "2026-10-21T21:43:55.300Z"}
Fields not offered by a given ATS are null (e.g. Greenhouse and Workable public feeds don't publish structured salary; SmartRecruiters has no multi-location list). A RUN_STATS record in the key-value store summarizes companies found, jobs seen, filtered and saved.
⭐ Unique: Monitor mode, CSV-ready output & webhook summary
New-job alerts & closed-job detection: schedule daily with monitorMode: "onlyNew" and you get only jobs that weren't there yesterday (old ones are free). The SUMMARY record also lists notSeenThisRun – jobs that disappeared from the boards, i.e. were closed or filled – a hiring-signal no other ATS Actor gives you.
- Monitor mode (
monitorMode:all|changes|onlyNew, plusmonitorKey) – cross-run dedupe and field-level diffs (changeType,changedFields,changes,firstSeenAt). Skipped items cost $0. - Flat / CSV-ready output (
outputFormat: "flat") – one column per field, perfect for Excel and Google Sheets. - Run summary – a free
SUMMARYrecord in the run's key-value store (also linked in the Output tab) and optionally POSTed tosummaryWebhookUrl. - Changes dataset view – see what's new/changed at a glance.
💰 Pricing (pay per result)
| Event | Price |
|---|---|
| Run start | $0.00005 |
| Job posting | $1.10 / 1,000 |
≥25% cheaper than comparable ATS job Actors ($1.50–$3.00 / 1,000). One unified schema across 5 ATS platforms.
🎁 Sweetener: in Monitor mode you only pay for new/changed items, and duplicates within a run are never charged. Run summary + webhook are free.
Tips
- Find a company's slug from its careers page URL (e.g.
boards.greenhouse.io/<slug>,jobs.lever.co/<slug>). - Schedule a daily run with
postedWithinDays: 1for a new-jobs feed. - SmartRecruiters descriptions need one extra request per job; turn off
includeDescriptionfor very large SmartRecruiters boards to go faster.
Legal & privacy
This Actor reads only public job postings that companies publish through their ATS's public job-board APIs for distribution. It does not log in, does not access candidate/applicant data and collects no personal data. You are responsible for using the data in line with applicable laws and the sites' terms.
🔌 Integrations & API
Works with Zapier, Make, n8n, Google Sheets, Slack, Airbyte, LangChain/LlamaIndex and the Apify MCP server (AI agents).
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('scrapeworkshq/ats-jobs-scraper').call({"companies": ["greenhouse:airbnb", "https://jobs.lever.co/palantir", "jobs.ashbyhq.com/ramp"], "titleKeywords": ["engineer"], "maxJobsPerCompany": 20});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python
from apify_client import ApifyClientclient = ApifyClient('<APIFY_TOKEN>')run = client.actor('scrapeworkshq/ats-jobs-scraper').call(run_input={"companies": ["greenhouse:airbnb", "https://jobs.lever.co/palantir", "jobs.ashbyhq.com/ramp"], "titleKeywords": ["engineer"], "maxJobsPerCompany": 20})items = client.dataset(run['defaultDatasetId']).list_items().items
cURL (sync, returns items)
curl -X POST 'https://api.apify.com/v2/acts/scrapeworkshq~ats-jobs-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>&format=csv' \-H 'content-type: application/json' -d '{"companies": ["greenhouse:airbnb", "https://jobs.lever.co/palantir", "jobs.ashbyhq.com/ramp"], "titleKeywords": ["engineer"], "maxJobsPerCompany": 20}'
❓ More FAQ
Which ATS platforms are supported?
Greenhouse, Lever, Ashby, Workable and SmartRecruiters. Bare slugs are auto-detected.
Is salary included?
Yes when the company publishes it (salaryMin/Max/Currency/Interval).
How does Monitor mode work?
The Actor remembers the IDs and key fields of items it returned before (in a named key-value store in your account, keyed by monitorKey). Next run, each item gets changeType = new / changed / unchanged plus a changes diff. In Only new / Only new or changed modes, the rest is skipped and not charged.
How do I get a clean CSV / Excel / Google Sheet?
Set Output format → Flat / CSV-ready. Nested objects become dot.columns and lists are joined with |, so every export is one row per item with no JSON blobs.
Can I get notified when a run finishes?
Set Summary webhook URL (Zapier/Make/n8n catch hook, Slack workflow, your API). You receive one compact JSON: counts, new/changed, price drops/rises, dataset ID. Or use Apify's native webhooks/integrations.
How do I limit cost?
Use the max-results inputs and Apify's Maximum cost per run. The Actor stops cleanly when the limit is reached.
Found a bug or need a field? Open an issue on the Issues tab – we usually reply within 24 h.
Changelog
- 2026-10-21 – Monitor mode (new/changed only, free skips), flat CSV-ready output, SUMMARY record + webhook, Changes view.