ATS jobs - Greenhouse, Lever, Ashby, Workable (public APIs)
Pricing
from $5.00 / 1,000 records
ATS jobs - Greenhouse, Lever, Ashby, Workable (public APIs)
Job postings from any company's public Greenhouse, Lever, Ashby or Workable board, read from the ATS's own keyless JSON endpoint and normalised to one row per job: title, department, location, remote flag, type, dates, URL, description, salary when published. Filter by keyword and location.
Pricing
from $5.00 / 1,000 records
Rating
0.0
(0)
Developer
RetrainMap Team
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
ATS job boards — Greenhouse, Lever, Ashby, Workable (public APIs)
One row per job posting from any company's public job board on the four most common applicant-tracking systems, read from each ATS's own keyless JSON endpoint (the same data the company's careers page renders) and normalised to one flat schema: ATS, company, job id, title, department, team, location(s), remote flag, employment type, posted/updated dates, absolute job URL, description text (first 3,000 characters), salary range when the company publishes one. Give any number of board tokens per ATS; filter by keyword, location or remote.
The default input (Stripe + Airbnb on Greenhouse, Spotify on Lever, Ramp on Ashby, Netguru on Workable, 200 rows) succeeds within 5 minutes and returns rows — Apify auto-tests it daily.
Data sources and status
| ATS | Endpoint (no key) | Fields the row keeps |
|---|---|---|
| Greenhouse | boards-api.greenhouse.io/v1/boards/<token>/jobs?content=true&pay_transparency=true — Job Board API, documented at https://developers.greenhouse.io/job-board.html | id, title, departments, location, offices, first_published, updated_at, absolute_url, content, pay_input_ranges, "Workplace Type" metadata |
| Lever | api.lever.co/v0/postings/<site>?mode=json — Postings API, documented at https://github.com/lever/postings-api | id, text, categories (department, team, location, allLocations, commitment), workplaceType, country, createdAt, hostedUrl, applyUrl, descriptionPlain, salaryRange |
| Ashby | api.ashbyhq.com/posting-api/job-board/<name>?includeCompensation=true — Job Posting API, documented at https://developers.ashbyhq.com/reference/jobpostingapi | id, title, department, team, employmentType, location, secondaryLocations, address, publishedAt, isRemote, workplaceType, jobUrl, applyUrl, descriptionPlain, compensation |
| Workable | apply.workable.com/api/v1/widget/accounts/<subdomain> (list) + apply.workable.com/api/v2/accounts/<subdomain>/jobs/<shortcode> (per-job detail) — the embeddable careers widget feeds | title, shortcode, department, employment_type, telecommuting, city/state/country, locations, published_on, url, application_url; detail: description, requirements, benefits, workplace, remote |
The board token is the slug in the public URL: boards.greenhouse.io/<token>,
jobs.lever.co/<site>, jobs.ashbyhq.com/<name>, apply.workable.com/<subdomain>. Companies
move between ATSs — an unknown token answers HTTP 404, is skipped and listed in the run's
status message and RUN_SUMMARY; the run fails only when every board failed.
Honesty notes:
- Rows are the ATS's own fields renamed.
remoteis the ATS's flag where one exists (LeverworkplaceType, AshbyisRemote, Workabletelecommuting/workplace); Greenhouse has no flag, so it is inferred from a "Workplace Type" metadata field or the word remote in the location.remote_sourceon every row says which (ats_flag,location_text,none). - Salary fields are filled only when the ATS publishes them (Greenhouse
pay_input_ranges— first range,salary_notecounts the rest; AshbySalarycompensation component; LeversalaryRange). Workable publishes none. Nothing is parsed out of description text. descriptionis the posting text with HTML stripped, cut at 3,000 characters (...).- Layout changes (a board answer without the documented shape, a job without an id/title) stop the run with an error rather than guess.
Terms: these endpoints are the public, unauthenticated feeds each ATS provides for companies'
careers pages; the postings are the employers' own public content. Use the rows for search,
alerts and analysis; link back to url for the full posting and to apply. Requests carry a
product-token User-Agent and the operator contact in the From: header; at most one request
per 500 ms by default.
Input
| Field | Type | Meaning |
|---|---|---|
greenhouse, lever, ashby, workable | arrays of slugs | Board tokens per ATS; at least one in total |
keyword | string | Optional substring on title/department/team/description (case-insensitive) |
location | string | Optional substring on location(s) and country |
remote_only | boolean | Keep only remote == true |
max_records | integer | Default 200; rows are interleaved across boards (round-robin) |
workable_details | boolean | Default on: one extra request per Workable job for the description |
request_interval_ms | integer | Default 500 (floor 250) |
contact_email | string | Sent in the From: header |
Example — remote engineering roles at Figma (Greenhouse), Veeva (Lever) and Ramp (Ashby):
{ "greenhouse": ["figma"], "lever": ["veeva"], "ashby": ["ramp"], "keyword": "engineer", "remote_only": true, "max_records": 100 }
Output (dataset row)
ats, board, company, job_id, title, department, team, location, all_locations,
country, remote, remote_source, workplace_type, employment_type, posted_at,
updated_at, url, apply_url, description, salary_min, salary_max, salary_currency,
salary_interval, salary_note, source_url, fetched_at.
A run summary (per-board job counts, matches, skipped boards with the reason, requests, whether
the pay-per-event budget stopped the run) is stored as RUN_SUMMARY in the run's key-value store.
Pricing (pay per event)
| Event | Price |
|---|---|
run-start — once per run | $0.10 |
record — per row written | $0.005 |
The default pull (200 rows) costs $1.10; 1,000 jobs cost $5.10. Rows stop when your run's maximum charge is reached; the run summary says so.
Operator
Steelyard Ventures LLC (RetrainMap) — info@steelyardclinical.com. Not affiliated with Greenhouse, Lever, Ashby, Workable or any listed employer. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing else.