Career Site Jobs API: Greenhouse, Lever, Ashby & Workable
Pricing
from $1.61 / 1,000 job postings
Career Site Jobs API: Greenhouse, Lever, Ashby & Workable
Search open jobs across 14,000+ company career sites on Greenhouse, Lever, Ashby, Workable, Recruitee, SmartRecruiters, Personio, JazzHR, Pinpoint, Comeet, Manatal and HireHive by title, location, company, remote and posting date. No company list needed. Daily index, alerts.
Pricing
from $1.61 / 1,000 job postings
Rating
0.0
(0)
Developer
Tabulary
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Features
Share
What does Career Site Jobs API do?
It searches open jobs on 14,000+ company career sites at once: every employer in its daily index whose careers page runs on Greenhouse, Lever, Ashby, Workable, Recruitee, SmartRecruiters, Personio, JazzHR, Pinpoint or Manatal. Filter by job title, location, company name, remote and how recently the job was posted, and get one clean record per job, newest first, in a single schema. No company list needed. Prefer specific employers? List their board slugs or careers-page URLs and it fetches those boards live, with full descriptions — two more platforms, Comeet (rebranded Spark Hire Recruit) and HireHive, are also supported this way. Job boards and aggregators use it for fresh listings, sales teams for hiring signals, recruiters for sourcing roles, and analysts and AI agents for hiring trends. No login or API key needed.
What you get
- About 500,000 open jobs from 14,000+ companies, refreshed every day, searchable in seconds.
- Company, board, platform, job ID, title, department and location.
- Remote flag, employment type (full time, part time, contract, internship and more), and posted and updated dates where the platform publishes them.
- Links to the job page and the application page.
- Full job descriptions as plain text (always in company mode; on request in search mode), with email addresses masked.
- The same fields on every platform, so twelve systems become one table.
- Alert mode for scheduled runs: only jobs that are new or changed since the last run.
- Export as JSON, CSV or Excel, send to Google Sheets, Slack, a CRM or a webhook, or call it as a tool from AI agents through the Apify MCP server.
How much does it cost?
You pay per job posting saved, with no monthly fee: $2.30 per 1,000 job postings on Apify's free plan, and 10–40% less on paid Apify plans. Each run also costs $0.001 to start. Apify's free plan includes $5 of credit every month, enough for about 2,100 job postings. Prices as of November 2026; the price shown on this page is the one that applies.
| Use | Job postings | Cost on the free plan |
|---|---|---|
| Newest 500 data engineering jobs across all companies | 500 | about $1.15 |
| Daily feed of new remote software jobs, about 150 a day | about 4,500 a month | about $10.35 a month |
| All open jobs at 5 mid-size companies (company mode) | about 500 | about $1.15 |
Set Maximum results and the filters to pay only for the roles you need, and Maximum cost per run to cap any run; the Actor stops cleanly at the cap and keeps everything it saved.
Ready-made inputs
Paste one of these into the JSON input tab, or set the same fields in the form.
Data engineering jobs posted in the last 7 days, all companies · open this example
{ "titleKeywords": "data engineer", "postedWithinDays": 7, "maxItems": 500 }
Remote software engineering jobs, newest first · open this example
{ "titleKeywords": "software engineer, developer", "remoteOnly": true, "postedWithinDays": 3, "maxItems": 1000 }
Daily feed: new sales jobs in London (schedule it every morning) · open this example
{ "titleKeywords": "sales, account executive", "locationKeywords": "London", "onlyNewSinceLastRun": true }
Greenhouse and Ashby jobs only, with descriptions · open this example
{ "titleKeywords": "product manager", "platforms": ["greenhouse", "ashby"], "postedWithinDays": 14, "includeDescription": true, "maxItems": 200 }
All open jobs at a few companies, live (company mode, any mix of platforms) · open this example
{ "companies": ["gitlab", "https://jobs.lever.co/dnb", "https://jobs.ashbyhq.com/notion", "https://vandebron.recruitee.com", "https://riverdale.applytojob.com", "https://hirehive-testing-account.hirehive.com"] }
Sales hiring signals at named companies, daily · open this example
{ "companies": ["gitlab", "stripe", "figma", "notion"], "titleKeywords": "sales, account executive, marketing", "onlyNewSinceLastRun": true }
Two modes
- Search mode (leave
companiesempty): filters the daily index of every known company board. Fast, newest first, no company list needed. Descriptions are fetched live for the matched jobs only if you turn onincludeDescription. - Company mode (list companies): fetches each listed board live from the platform, with full descriptions. Use it for employers not yet in the index, or when you need the latest minute. Comeet companies only work in this mode (see "Finding a Comeet company_uid and token" above).
Alerts: only new since the last run
- Set your filters (and, in company mode, the companies) and turn on Only new since last run.
- Save it as a task and add an Apify Schedule (for example every morning).
- Connect the output: Apify's built-in Slack and email notifications, a webhook, or Make, Zapier and n8n to push new roles into Google Sheets, HubSpot, Clay or a Teams channel.
Each run returns only jobs that are new, or whose posting was updated, since earlier runs with the same filters (and companies, in company mode). Jobs cut off by your spending limit are delivered next time. With filters, the memory is kept per set of filters, so separate tasks never interfere.
Input
| Field | Type | Default | Description |
|---|---|---|---|
companies | array | empty (search mode) | Board slugs (e.g. gitlab) or careers-page URLs (e.g. https://jobs.lever.co/dnb). Empty searches every company in the index. |
titleKeywords | string | "" (all) | Comma-separated words; keeps jobs whose title contains any of them. |
locationKeywords | string | "" (all) | Comma-separated words; keeps jobs whose location contains any of them. |
companyKeywords | string | "" (all) | Search mode: comma-separated words matched against the company name or board slug. |
remoteOnly | boolean | false | Keep only jobs the platform marks as remote. |
postedWithinDays | integer | empty (all) | Keep only jobs posted within this many days (1–365). |
platforms | array | all | Limit to greenhouse, lever, ashby, workable, recruitee, smartrecruiters, personio, jazzhr, pinpoint, manatal, hirehive and/or comeet. |
maxItems | integer | 1000 | Stop after this many job postings; search mode returns the newest first. |
includeDescription | boolean | false | Search mode: also fetch full descriptions live for the matched jobs. |
onlyNewSinceLastRun | boolean | false | Return only jobs that are new or changed since earlier runs (see Alerts). |
| Finding a company's slug: open its careers page. The slug is the part after the ATS domain: | |||
boards.greenhouse.io/gitlab → gitlab, jobs.lever.co/dnb → dnb, jobs.ashbyhq.com/notion → | |||
notion, apply.workable.com/acme → acme, jobs.smartrecruiters.com/Acme → Acme, and for | |||
Recruitee, Personio, JazzHR, Pinpoint and HireHive the subdomain: acme.recruitee.com → acme, | |||
acme.jobs.personio.de → acme, acme.applytojob.com → acme, acme.pinpointhq.com → acme, | |||
acme.hirehive.com → acme. | |||
Manatal's careers-page.com board works either way: careers-page.com/acme → acme, or | |||
acme.careers-page.com → acme. If a company's careers page is on its own domain, look for one | |||
| of these links behind the "Apply" button. |
Finding a Comeet company_uid and token: Comeet has no board slug; a company's careers page
embeds both a company_uid (like E5.007) and a public widget token in its page, and Comeet's
own API needs both on every request. Open the company's Comeet careers page (for example
comeet.com/jobs/<company>/<company_uid>), open your browser's developer tools, reload the page,
and look in the Network tab for a request to comeet.co/careers-api/2.0/company/.../positions —
its URL has both values. Enter them here as comeet:<company_uid>:<token>, for example
comeet:E5.007:5E7236A0BCE5E7295111B55E70BCE (that example is Comeet's own public sandbox
company, "Careers API Sandbox", which anyone can use to try this out). Comeet can't be searched by
company name or keyword and never appears in search mode, since the daily index has no way to
discover a token for every company; it only works with comeet:<company_uid>:<token> in company
mode.
Output
One dataset item per job. A real item from a run on 21 October 2026 (description shortened):
{"company": "dnb","company_name": null,"ats": "lever","job_id": "d0e51a7a-5f0f-483a-9b65-78a9024f1681","title": "2027 Enterprise Sales Development Program","department": "Sales","location": "Florham Park - New Jersey - United States","remote": false,"employment_type": "full_time","posted_at": "2026-10-15T18:18:27.254Z","updated_at": null,"url": "https://jobs.lever.co/dnb/d0e51a7a-5f0f-483a-9b65-78a9024f1681","apply_url": "https://jobs.lever.co/dnb/d0e51a7a-5f0f-483a-9b65-78a9024f1681/apply","description": "Shape the Future with Dun & Bradstreet. At Dun & Bradstreet, we believe data has the power to create a better tomorrow…"}
A real Recruitee item, from vandebron.recruitee.com on 30 October 2026 (description shortened):
{"company": "vandebron","company_name": "Vandebron","ats": "recruitee","job_id": "2773494","title": "Marketing Project Manager","department": "Marketing","location": "Amsterdam, Noord-Holland, Nederland","remote": false,"employment_type": "full_time","posted_at": "2026-10-06T14:54:28.000Z","updated_at": "2026-10-09T08:07:03.000Z","url": "https://werkenbij.vandebron.nl/o/marketing-project-manager","apply_url": "https://werkenbij.vandebron.nl/o/marketing-project-manager/c/new","description": "Wie wij zijn. Onze reis begon in 2014 met Hoofdstuk 1 van de energietransitie…"}
A real JazzHR item, from riverdale.applytojob.com on 6 November 2026 (description shortened):
{"company": "riverdale","company_name": "Riverdale Poultry","ats": "jazzhr","job_id": "job_20251017200615_ATDHJ55NBCH37G4N","title": "310T Truck Mechanic","department": "Shop","location": "London, ON, Canada","remote": false,"employment_type": "full_time","posted_at": null,"updated_at": null,"url": "https://riverdale.applytojob.com/apply/fCWh1g5Nen/310T-Truck-Mechanic","apply_url": "https://riverdale.applytojob.com/apply/fCWh1g5Nen/310T-Truck-Mechanic","description": "Riverdale is looking for our next licensed 310T Technician to join the day shift in our London yard…"}
A real Pinpoint item, from workwithus.pinpointhq.com on 7 November 2026 (description shortened):
{"company": "workwithus","company_name": null,"ats": "pinpoint","job_id": "559663","title": "Founding Legal Counsel","department": "Operations","location": "Remote","remote": true,"employment_type": "full_time","posted_at": null,"updated_at": null,"url": "https://workwithus.pinpointhq.com/en/postings/ce6c9e5c-a2d3-42b0-a01e-9edeae315b04","apply_url": "https://workwithus.pinpointhq.com/en/postings/ce6c9e5c-a2d3-42b0-a01e-9edeae315b04","description": "Hi 👋 I'm Ellis, COO at Pinpoint. We want Pinpoint to be the best place you've ever worked…"}
A real Comeet item, from Comeet's own public sandbox company "Careers API Sandbox"
(comeet:E5.007:...) on 7 November 2026 (description shortened):
{"company": "E5.007","company_name": "Careers API Sandbox","ats": "comeet","job_id": "E8.91F","title": "Android Developer","department": "Engineering","location": "Brooklyn, NY, US","remote": false,"employment_type": "full_time","posted_at": null,"updated_at": "2020-10-08T16:19:06.000Z","url": "https://www.comeet.com/jobs/careersapi-sandbox/E5.007/android-developer/E8.91F","apply_url": "https://www.comeet.com/jobs/careersapi-sandbox/E5.007/android-developer/E8.91F","description": "What you'll be doing: Develops different layers of Android apps…"}
A real Manatal item, from manatal.careers-page.com on 8 November 2026 (description shortened):
{"company": "manatal","company_name": null,"ats": "manatal","job_id": "2883259","title": "AI Content Marketing Internship","department": "Marketing","location": "Bangkok, Bangkok, Thailand","remote": null,"employment_type": "full_time","posted_at": null,"updated_at": null,"url": "https://www.careers-page.com/manatal/job/L9Y69V66","apply_url": "https://www.careers-page.com/manatal/job/L9Y69V66","description": "AI Content Marketing Internship Manatal is an HRTech software service (B2B SaaS) company headquartered in Bangkok, Thailand…"}
A real HireHive item, from HireHive's own public test tenant hirehive-testing-account.hirehive.com
on 8 November 2026 (description shortened):
{"company": "hirehive-testing-account","company_name": null,"ats": "hirehive","job_id": "job_QxZUlo","title": "Human Resources Assistant","department": "HR","location": "San Francisco, CA, United States","remote": false,"employment_type": "full_time","posted_at": "2018-05-16T10:36:01.300Z","updated_at": null,"url": "https://hirehive-testing-account.hirehive.com/human-resources-assistant-san-francisco-QxZUlo","apply_url": "https://hirehive-testing-account.hirehive.com/human-resources-assistant-san-francisco-QxZUlo","description": "Supports human resources processes by administering tests; scheduling appointments; conducting orientation; maintaining records and information…"}
employment_type is full_time, part_time, contract, internship, temporary, other or
null (Greenhouse boards don't publish it). updated_at is null where the ATS doesn't publish
an update time (Lever, Ashby, Workable, SmartRecruiters, Personio, JazzHR, Pinpoint, Manatal,
HireHive). posted_at is also always null for JazzHR, Pinpoint, Comeet and Manatal: none of
these platforms' public feeds publish a posting date at all; HireHive does publish one
(published_date). Dates are ISO 8601. Recruitee and Comeet also generate a per-job application
mailbox address; it is never included in the output. HireHive has no remote flag, so remote is
inferred from the location text, like Greenhouse and JazzHR.
company is the board slug (for Comeet, its company_uid); company_name is the employer's
display name where the platform publishes it (Greenhouse, Workable, Recruitee, JazzHR, Comeet),
otherwise a name derived from the slug in search mode and null in company mode (HireHive does
not publish a company name, so it is always null for this platform). In search mode
description is null unless includeDescription is on.
Use it from AI agents
Add the Actor to Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server
(https://mcp.apify.com?tools=tabulary/multi-ats-job-postings). Ask in plain language, for
example: "Find data engineering jobs posted this week at companies in London" or "Which roles
are GitLab and Stripe hiring for right now?" The agent fills
in the input and gets structured job records back.
Use it from code
curl -X POST "https://api.apify.com/v2/acts/tabulary~multi-ats-job-postings/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"titleKeywords": "data engineer", "postedWithinDays": 7, "maxItems": 200}'
The same works with the Apify Python and JavaScript clients. See the API tab for details.
Data source and limits
- Greenhouse Job Board API (docs): "Job Board data is publicly available, so authentication is not required for any GET endpoints."
- Lever Postings API (docs): published postings are public.
- Ashby public job posting API (docs).
- Workable public careers widget API (
apply.workable.com), the same data its careers pages show. - Recruitee public careers-site offers API (
{company}.recruitee.com/api/offers/), documented in Recruitee's own API FAQ; the same data each tenant's careers site shows. - SmartRecruiters public Posting API (docs), keyless, made for career sites. Descriptions take one request per job, so company mode includes them for the first 100 jobs of each company.
- Personio job postings XML feed (
{company}.jobs.personio.de/xml), which Personio provides for publishing open positions on other sites. - JazzHR career-page XML feed (
app.jazz.co/feeds/export/jobs/{company}), documented in JazzHR's own help center as the export for publishing open, career-site-listed positions elsewhere; JazzHR caches it for about 24 hours and publishes no posting or update date. - Pinpoint public postings feed (
{company}.pinpointhq.com/postings.json), documented in Pinpoint's own help center as the open JSON endpoint built for listing a company's Pinpoint jobs on any external website; keyless, and it publishes no posting or update date either. - Comeet (Spark Hire Recruit) Careers API
(docs), documented as the list of
a company's published positions. It needs no account or API key, but does need a
company_uidand atokenper company — both public values embedded in that company's own careers page, not a secret credential — so it can't be auto-detected from a bare name the way the other eleven platforms are; see "Finding a Comeet company_uid and token" above. It publishes no posting date. - Manatal Career Page API (
api.manatal.com/open/v3/career-page/{slug}/jobs/), documented in Manatal's own API reference as the keyless feed behind every company's public careers-page.com site; descriptions come inline, with no second request needed. It publishes no posting or update date. - HireHive Public Jobs API (
{company}.hirehive.com/api/v2/jobs), documented in HireHive's own API reference as a dedicated, keyless endpoint separate from its authenticated dashboard API, built for showing a company's open jobs on its own website or elsewhere. It publishes a posting date but no update date, and no remote flag. - In company mode, and when fetching descriptions, the Actor makes at most about one request per second to each host and backs off when a host asks it to slow down. A bare slug can need up to ten requests to find its platform, and two companies can own the same slug on different systems, so pass the full careers-page URL when you can.
- The search index covers 14,000+ companies with open jobs, found through Common Crawl's public web index and checked against each platform's API. It is rebuilt every day at about 2 requests a second per platform, so search results are at most about a day old. A company missing from the index can still be fetched live in company mode.
- Jobs are returned as the employer publishes them; check the employer's page before acting on a posting. Email addresses in descriptions are masked; Recruitee's and Comeet's generated per-job application mailbox addresses are dropped entirely.
- Not affiliated with or endorsed by Greenhouse, Lever, Ashby, Workable, Recruitee, SmartRecruiters, Personio, JazzHR, Pinpoint, Comeet, Manatal or HireHive.
Other Tabulary tools
Clean data from official and public sources, priced per result:
- Airport METAR & TAF Weather
- EU Tenders API: TED Public Procurement Notices
- Remote Jobs API: RemoteOK & Jobicy Postings
- SAM.gov Federal Contract Opportunities
- UK Gender Pay Gap Reports API: Employer Filings
- UK House Price Index API: Average Prices by Area
- UK Modern Slavery Statement Registry API
- UK Tenders API: Contracts Finder & Find a Tender
FAQ
How many companies does search cover? 14,000+ companies with open jobs today, about 500,000 jobs in all. Any other company on these eleven platforms works in company mode; see "Finding a company's slug" above.
How fresh is the search index? It is rebuilt every day. The run log shows when the index was built. Company mode reads the boards live.
Do I need API keys or accounts? No. All twelve job boards are public and keyless. Comeet needs
a company_uid and token per company instead of an account, both copied from the company's own
careers page (see "Finding a Comeet company_uid and token" above).
Why did a company return 0 jobs? Either it has no open roles right now, or its slug belongs to a different company on another ATS. The run log says which board matched; pass the full careers-page URL to be exact.
Does it include salaries? Only where the employer writes them into the job description.
How do I get only new jobs every day? Turn on Only new since last run, save the input as a task and schedule it (see Alerts).
Something broke? Open an issue on the Issues tab. The Actor is tested daily.
Changelog
- 2026-11-08: added HireHive as a twelfth ATS, via its official, keyless Public Jobs API
(
{company}.hirehive.com/api/v2/jobs), the same per-tenant-subdomain pattern as Recruitee, Personio, JazzHR and Pinpoint. It publishes no update date and no remote flag, soremoteis inferred from the location text. - 2026-11-08: added Manatal (the careers-page.com platform) as an eleventh ATS, via its
official, keyless Career Page API. Descriptions come inline with the listing. Manatal publishes
no posting or update date, so both are
nullfor this platform. - 2026-11-07: added Comeet (Spark Hire Recruit) as a tenth ATS, via its official, keyless
Careers API. Comeet needs a
company_uidandtokenper company instead of a board slug, so it only works in company mode withcomeet:<company_uid>:<token>, never in search mode. It publishes no posting date, soposted_atisnullfor this platform. - 2026-11-07: added Pinpoint as a ninth ATS, via each tenant's public, keyless
postings.jsonfeed. Pinpoint publishes no posting or update date, so both arenullfor this platform. - 2026-11-06: added JazzHR as an eighth ATS, via each account's static career-page XML feed.
JazzHR publishes no posting or update date, so both are
nullfor this platform. Also fixed numeric HTML entities leaking into plain-text descriptions on every platform. - 2026-11-03: search mode: search open jobs across 14,000+ company career sites by title,
location, company, platform and posting date, without a company list. Added SmartRecruiters and
Personio. New
company_namefield. - 2026-10-30: added Recruitee as a fifth ATS.
- 2026-10-21: job title, location and remote filters; ready-made inputs; slug guide.
- 2026-10-21: first version: Greenhouse, Lever, Ashby and Workable, ATS auto-detection, hiring monitor, masked emails.
About Tabulary
This tool is part of Tabulary: clean tables from official public sources. Every Tabulary tool uses the source's official API or open data where one exists, collects no personal data, and is tested on Apify every day. Questions or ideas? Open an issue on the Issues tab.