Greenhouse, Lever, Ashby, Workable, Recruitee & Personio Jobs
Pricing
from $4.00 / 1,000 results
Greenhouse, Lever, Ashby, Workable, Recruitee & Personio Jobs
One API for Greenhouse, Lever, Ashby, Workable, Recruitee and Personio job boards. Pass a company domain, get every open role in a single schema. Duplicates are removed before billing, empty runs cost nothing, and posting dates come from the platform, never today's date.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
CleanAPI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Job postings from Greenhouse, Lever, Ashby, Workable, Recruitee & Personio
Give it a company domain or a careers page URL. Get every open role that company has published, whatever applicant tracking system it runs, in one schema.
What you are guaranteed
- No duplicates charged. Deduplication happens on a stable key, before billing. Not after.
- No empty results charged. Billing follows delivery, never the other way around.
- Real posting dates.
postedAtis never filled with today's date.postedAtSourcealways tells you where the date came from:platform_fieldfor a genuine publication date,platform_created_atwhen the platform only exposes a creation date,unavailablewhen it gives nothing. The field is thennullrather than guessed. - A country filter that works on all six platforms. Recruitee and Workable
supply an ISO code directly. The other four publish only a free-text location,
so the country is derived from it and flagged as
derived_from_location, never passed off as reported data. A posting whose location cannot be resolved is dropped with reasoncountry_unknown, never counted as a match. On a real sample of 635 postings, 93% resolved; the rest carried labels like "N/A". - Never an empty output without a reason. Every company gets a status in the
coverage report:
ok,no_open_positions,platform_not_detectedorfetch_failed, with the detail. - No runaway runs.
maxResultsandmaxRuntimeSecsare hard limits.
Platforms
| Platform | Source |
|---|---|
| Greenhouse | boards-api.greenhouse.io, documented public API |
| Lever | api.lever.co, documented public API |
| Ashby | api.ashbyhq.com, documented public API |
| Recruitee | {account}.recruitee.com, documented public API |
| Workable | apply.workable.com, undocumented endpoint, monitored daily |
| Personio | {account}.jobs.personio.de/xml, public XML feed |
Known limits, stated upfront
- Personio has no publication date. It only exposes a creation date, so
postedAtSourcereadsplatform_created_at. A role created in 2017 and still open will carry that date. - Personio descriptions are often empty. Around 19% of Personio postings carry a description, because many companies leave that block blank in their feed. Nothing can be done about it from the outside.
- Lever descriptions. About 92% of Lever postings have one. The rest have neither a plain-text nor an HTML description on the platform itself.
- Four platforms expose no country code. Greenhouse, Lever, Ashby and
Personio publish a location label only. The country is derived from it, which
works for about 93% of postings in practice.
countrySourcealways tells you which postings were derived. - Greenhouse does not expose remote or employment type. When the location
says "Remote", the
remotefield is set totrueandremoteSourcereadsderived_from_location, so you always know it was inferred and not reported.
Spend limit per run
Apify defaults to a maximum cost of $4.99 per run, which is roughly 415 postings
at $0.012 each. A larger request stops cleanly with charge_limit_reached, a
warning in the log, and the detail in the coverage report. Raise
Maximum cost per run in the run options to go further.
Input
{"companies": ["stripe.com", "https://jobs.lever.co/spotify"],"platforms": ["greenhouse", "lever"],"postedAfter": "2026-06-01","country": "NL","excludeCompanies": [],"excludeKeywords": ["intern"],"maxResults": 1000,"maxRuntimeSecs": 900}
A bare domain triggers automatic platform detection. A careers page URL is faster and always reliable, so prefer it when you have it.
Output
One posting per dataset item.
{"jobId": "greenhouse:stripe:8172508","title": "Abuse Investigator","company": "Stripe","department": "Security Analytics","location": "Dublin","country": "IE","countries": ["IE"],"countrySource": "derived_from_location","remote": null,"remoteSource": "unavailable","employmentType": null,"description": "<h2>Who we are</h2>...","applyUrl": "https://stripe.com/jobs/search?gh_jid=8172508","postedAt": "2026-09-03T17:32:53.000Z","postedAtSource": "platform_field","collectedAt": "2026-09-12T10:46:59.837Z","sourcePlatform": "greenhouse","sourceUrl": "https://boards-api.greenhouse.io/v1/boards/stripe/jobs?content=true","salary": null}
A coverage report is written to the COVERAGE_REPORT key of the key-value
store, listing every company, the platform it resolved to, how many postings
were found, how many were delivered, and why any were dropped.
Keywords
greenhouse api, lever api, ashby api, workable api, recruitee api, personio xml, ats jobs, job board api, career site jobs, hiring signals, job postings feed, applicant tracking system, boards-api.greenhouse.io, jobs.lever.co, api.ashbyhq.com