Job Postings API – Greenhouse, Lever, Ashby & Workable Jobs avatar

Job Postings API – Greenhouse, Lever, Ashby & Workable Jobs

Pricing

Pay per event

Go to Apify Store
Job Postings API – Greenhouse, Lever, Ashby & Workable Jobs

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

Scrapeworks HQ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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)

  1. Click Try for free – the input is prefilled with a working example.
  2. Press Start. A small run finishes in seconds and costs fractions of a cent.
  3. 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

companyNametitlelocationisRemotedepartmentpostedAtapplyUrl
Hugging FaceOpen-Source ML EngineerParis, FrancetrueOpen Source2026-05-29apply.workable.com/j/81B46579FE
AirbnbSenior Software EngineerRemote - UStrueEngineering2026-10-14boards.greenhouse.io/airbnb/jobs/…

Why this job postings API / ATS jobs scraper?

This ActorTypical 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

FieldDescription
companiesCareer board URLs, platform:slug, or bare slugs (auto-detect).
titleKeywords / excludeTitleKeywordsCase-insensitive title filters.
locationKeywordsKeep jobs whose location contains any keyword.
remoteOnlyOnly remote-flagged jobs.
postedWithinDaysOnly jobs published in the last N days.
includeDescriptionInclude descriptionText + descriptionHtml (default on).
maxJobsPerCompany, maxJobsTotalLimits (0 = unlimited).

Accepted company formats:

greenhouse:airbnb https://boards.greenhouse.io/airbnb https://job-boards.greenhouse.io/stripe
lever:palantir https://jobs.lever.co/palantir
ashby:ramp https://jobs.ashbyhq.com/ramp
workable:huggingface https://apply.workable.com/huggingface
smartrecruiters:BoschGroup https://jobs.smartrecruiters.com/BoschGroup
notion (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, plus monitorKey) – 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 SUMMARY record in the run's key-value store (also linked in the Output tab) and optionally POSTed to summaryWebhookUrl.
  • Changes dataset view – see what's new/changed at a glance.

💰 Pricing (pay per result)

EventPrice
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: 1 for a new-jobs feed.
  • SmartRecruiters descriptions need one extra request per job; turn off includeDescription for very large SmartRecruiters boards to go faster.

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 ApifyClient
client = 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.