Apify actor · Jobs data API
ATS Jobs API: Greenhouse, Lever, Ashby & Workable jobs as JSON
Live$3 per 1,000 jobsNo start feeATS Jobs API is an Apify actor that returns every open job from a company's career site on Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio or BambooHR as one clean, normalised row per job. Give it a careers-page URL, an ats:slug, a company domain or just a company name, and it finds the board. It costs $3 per 1,000 jobs ($0.003 per job returned), with no start fee; boards that are not found or fail cost nothing.
- Platform
- Apify (cloud). Run in Console, by API, on a schedule, or from an AI assistant via MCP
- Price
- $0.003 per job returned. No start fee, no rental; failed or missing boards are free
- ATS covered
- Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, BambooHR
- Input
- Careers URLs,
ats:slug, company domains or company names, one per line - Output
- One row per job: title, department, location, remote flag, employment type, posted date, salary, apply URL. JSON, CSV, Excel, XML
- Data source
- Each company's own public job-board endpoint, not an aggregator
- Personal data
- None. Recruiter and candidate details are never copied
- Store listing
- apify.com/tidewell/ats-jobs-api
Who it is for
- Niche job boards that fill a climate, crypto, AI or remote-only board from a list of target companies, refreshed daily.
- Job alerts and AI job agents that watch a set of companies and want only new roles matching a candidate's keywords and location.
- Sales and recruiting teams looking for hiring signals, such as a company's first sales hire or a RevOps lead.
- Researchers tracking hiring volume by department and location, and how published salary ranges change.
- Enrichment: answering "which ATS does this company use?" and "how many open roles do they have?" for a list of domains.
What it does
- One schema for eight ATSes, so Greenhouse, Lever, Ashby and Workable jobs merge without per-source code.
- Finds the board for you from a URL, a domain such as
notion.so, or a name such asAllica Bank. Name matching checks that the board's company name matches, and prefers "not found" over a wrong match. - Salary included: structured pay ranges from Greenhouse, Ashby, Lever, Recruitee and BambooHR, plus ranges parsed from the ad text (flagged
salary_source: "description"). - Filters by keyword (with
*wildcards), excluded keywords, location, remote, department and posting age, applied before charging. - Incremental mode (
onlyNewJobs) for feeds and alerts. - Transparent runs: a
RUN_SUMMARYrecord lists every input, what it resolved to and why.
Quick start
Open the actor in Apify Console, paste companies into Companies and run it. Example input: open engineering jobs in London or remote at three companies.
{
"companies": [
"https://boards.greenhouse.io/airtable",
"https://jobs.lever.co/palantir",
"ashby:1password"
],
"keywords": ["engineer*", "developer"],
"excludeKeywords": ["intern*"],
"locations": ["London", "United Kingdom", "Remote"],
"postedWithinDays": 30,
"includeDescription": true
}
Daily feed of new jobs only (schedule it in Apify Console):
{
"companies": ["notion.so", "Monzo", "greenhouse:stripe", "workable:legatics"],
"onlyNewJobs": true,
"stateKey": "my-daily-feed"
}
Example output row (trimmed):
{
"company": "AlphaSense",
"ats": "greenhouse",
"board_slug": "alphasense",
"job_id": "8929518002",
"title": "Enterprise Account Executive, Corporate",
"department": "Corporate Sales",
"location": "New York, New York, United States; Remote - United States; United States",
"remote": true,
"workplace_type": "remote",
"posted_at": "2026-11-04T00:31:43Z",
"salary_min": 105000,
"salary_max": 140000,
"salary_currency": "USD",
"salary_period": "year",
"salary_text": "USD 105,000-140,000 (Base Compensation Range)",
"salary_source": "structured",
"apply_url": "https://job-boards.greenhouse.io/alphasense/jobs/8929518002",
"source_url": "https://boards-api.greenhouse.io/v1/boards/alphasense/jobs/8929518002",
"scraped_at": "2026-11-08T00:49:02Z"
}
Or call it synchronously over HTTP and get the rows back in one request:
curl -X POST "https://api.apify.com/v2/acts/tidewell~ats-jobs-api/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"companies": ["greenhouse:stripe", "notion.so"], "remoteOnly": true}'
It also works from Make, Zapier and n8n through their Apify integrations.
Use it from Claude or ChatGPT (Apify MCP server)
Apify runs a hosted MCP server at https://mcp.apify.com. Add it to your AI assistant with this actor selected, and the assistant can run the actor and read the results for you. You need an Apify account (the free plan works); runs are billed to it at the prices on this page.
Server URL with only this actor loaded:
https://mcp.apify.com/?tools=tidewell/ats-jobs-api
Claude (claude.ai and Claude Desktop)
- Open Settings → Connectors.
- Choose Add custom connector, name it
Apifyand paste the URL above. (Apify is also in the connector directory; the custom URL loads only this actor.) - Connect, sign in to Apify and approve access.
Claude Code
claude mcp add apify "https://mcp.apify.com/?tools=tidewell/ats-jobs-api" -t http
Claude Code opens the Apify sign-in page the first time it uses the server.
ChatGPT
Following Apify's current instructions: add a custom MCP server named Apify, enter the URL above and choose OAuth. In the ChatGPT desktop app this is Settings → MCP servers → Add server → Streamable HTTP. Business, Enterprise and Edu workspaces may need an admin to add it.
Cursor, VS Code and other MCP clients
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=tidewell/ats-jobs-api"
}
}
}
Clients that cannot sign in with OAuth can send your Apify API token (Apify Console → Settings → API & Integrations) instead:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=tidewell/ats-jobs-api",
"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }
}
}
}
Example prompts
- Use tidewell/ats-jobs-api to list every open engineering job at Stripe, Notion and Monzo posted in the last 14 days, as a table with salary and apply link.
- Which ATS do airtable.com, 1password.com and bunq.com use, and how many open roles does each have?
- Find remote product-manager roles at these 20 companies and group them by company.
The actor appears to the assistant as the tool tidewell--ats-jobs-api. Setup steps checked against Apify's MCP documentation and the apify-mcp-server README on 8 November 2026; we also confirmed the tool loads with that URL.
Pricing
Pay per event: $0.003 per job returned ($3 per 1,000 jobs).
- No actor-start fee and no monthly rental.
- Filters run before charging, so you pay only for jobs that pass your filters.
- Boards that are not found, have no matching jobs, or fail cost nothing.
- Set a maximum cost per run in the run options. The actor stops cleanly at your limit and never returns rows you are not charged for.
Example: one daily run over 50 companies that returns about 40 new jobs a day with onlyNewJobs costs about $0.12 a day. Apify platform plans and its free monthly credit apply as usual.
How it compares
Prices below are each actor's own Store pricing on 8 November 2026. We list the cases where another option is the better choice.
| Actor | Price per job (Free → Gold tier) | Start fee | Users (30 days) | Notes |
|---|---|---|---|---|
| tidewell/ats-jobs-api (this) | $0.003 flat | None | New | 8 ATSes in one schema; URL, domain or name input; structured salary from 5 ATSes; new-jobs-only mode |
| fantastic-jobs / Career Site Job Listing API | $0.012 → $0.004 | $0.01 on Free tier | 1,634 (4.1★) | A different product: a pre-crawled, searchable jobs database, so no company list is needed |
| jobo.world / ATS Jobs API | $0.004 → $0.0013 | $0.00005 | 149 (4.6★) | |
| fantastic-jobs / Greenhouse Jobs API | $0.002 → $0.0012 | None | 147 (3.0★) | Greenhouse only |
| factpipe / Jobs Feed API | $0.005 → $0.0035 | None | 129 | Includes Workday, which we do not support |
| yugenox / Greenhouse, Lever & Ashby Jobs Scraper | $0.002 flat | None | 114 | 3 ATSes |
| bovi / Greenhouse, Lever & Ashby Job Scraper | $0.0015 | $0.00005 | 90 | Cheapest per job; 3 ATSes |
| memo23 / Career Site ATS Jobs API | $0.004 → $0.0025 | $0.03 | 82 (5.0★) | Lists 116 ATSes, far more than our 8 |
| jtpalms / ATS Jobs Index | $0.003 → $0.0015 | $0.00005 | 72 |
- Need Workday? Use factpipe's Jobs Feed API; we do not support Workday.
- Need jobs from every company without a list? fantastic-jobs' Career Site Job Listing API is a searchable database; ours fetches the companies you name.
- Need more than 8 ATSes? memo23's actor lists 116 ATSes, at the cost of a $0.03 start fee.
- Only a few companies, and you can code? The Greenhouse, Lever and Ashby board APIs are public and free to call yourself.
Longer write-up: Greenhouse, Lever and Ashby jobs APIs compared.
Frequently asked questions
Which ATS does a company use?
Put its website or name in companies. The ats column and the RUN_SUMMARY record tell you which ATS and board it resolved to. If the company is not on a supported ATS, RUN_SUMMARY says so and you are not charged. For a quick single lookup, try the free Which ATS does this company use? tool.
Which applicant tracking systems are supported?
Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio and BambooHR. Workday is not supported yet, because Workday career sites do not have a simple public board API.
Is this scraping? Is it allowed?
The actor reads the public job-board endpoints that these ATSes provide so companies can show their jobs on their own sites and job boards can list them. It does not log in, bypass protections or collect personal data. It sends polite, rate-limited requests with an identifying user agent. You remain responsible for how you use the data, for example linking back to the original posting.
Do you collect recruiter or candidate data?
No. Hiring-manager names, recruiter emails, phone numbers and application questions are deliberately left out. The output contains job postings only.
How accurate is salary?
salary_source: "structured" values come from the ATS's own pay fields (Greenhouse pay transparency, Ashby compensation, Lever salary range, Recruitee and BambooHR). "description" values are parsed from ranges written in the ad. salary_text keeps the original wording.
Can I get only new jobs each day?
Yes. Turn on onlyNewJobs with a stateKey and schedule the actor. Each run returns, and charges for, only postings not returned before for that key.
How fast is it?
In tests, 20 boards across all eight ATSes (about 2,400 jobs) took about 6 seconds, and 150 boards took about 10 seconds.
How much does it cost?
$0.003 per job returned, so $3 per 1,000 jobs. No start fee, no monthly rental, and nothing for boards that are not found. Set a maximum cost per run and the actor stops cleanly at that limit.
Last updated 8 November 2026. Questions or corrections: [email protected].