Tidewell Software

Apify actor · Jobs data API

ATS Jobs API: Greenhouse, Lever, Ashby & Workable jobs as JSON

Live$3 per 1,000 jobsNo start fee

ATS 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 as Allica 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_SUMMARY record 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)

  1. Open Settings → Connectors.
  2. Choose Add custom connector, name it Apify and paste the URL above. (Apify is also in the connector directory; the custom URL loads only this actor.)
  3. 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.

Per-company ATS job actors on the Apify Store (prices and users from the public Store API, 8 Nov 2026)
ActorPrice per job (Free → Gold tier)Start feeUsers (30 days)Notes
tidewell/ats-jobs-api (this)$0.003 flatNoneNew8 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 tier1,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.00005149 (4.6★)
fantastic-jobs / Greenhouse Jobs API$0.002 → $0.0012None147 (3.0★)Greenhouse only
factpipe / Jobs Feed API$0.005 → $0.0035None129Includes Workday, which we do not support
yugenox / Greenhouse, Lever & Ashby Jobs Scraper$0.002 flatNone1143 ATSes
bovi / Greenhouse, Lever & Ashby Job Scraper$0.0015$0.0000590Cheapest per job; 3 ATSes
memo23 / Career Site ATS Jobs API$0.004 → $0.0025$0.0382 (5.0★)Lists 116 ATSes, far more than our 8
jtpalms / ATS Jobs Index$0.003 → $0.0015$0.0000572
  • 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].