State of ATS 2026 — Dataset

MCP serverDev tools

This integration tells you which applicant tracking system (ATS) a company uses to handle job applications. It covers 743 employers with answers verified from their application portals, and it can also run a check on a resume for those systems. No key is needed to use it.

Use State of ATS 2026 — Dataset in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add State of ATS 2026 — Dataset and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the which ats tool from State of ATS 2026

Details

Available today. Use it from your connected AI after setup.

After adding it, ask which applicant tracking system a company you are interested in uses, or ask it to check a resume. No key or extra setup is required.

State of ATS 2026 — DatasetStart free

What your AI can do with it

  • Look up which applicant tracking system a specific employer uses
  • Get portal-verified answers for any of the 743 covered companies
  • Run a resume check for applicant tracking system readiness
  • Start using it right away without needing a key

Install State of ATS 2026 — Dataset

The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.

  • Claude Code

    claude mcp add --transport http --scope user state-of-ats-2026-dataset 'https://withresumeai.com/api/mcp'

    Run it once in your project, then open /mcp to approve any sign-in the server asks for.

  • Claude Desktop

    https://withresumeai.com/api/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=state-of-ats-2026-dataset&config=eyJ1cmwiOiJodHRwczovL3dpdGhyZXN1bWVhaS5jb20vYXBpL21jcCJ9

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://withresumeai.com/api/mcp

    In Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.

  • Codex

    codex mcp add state-of-ats-2026-dataset --url 'https://withresumeai.com/api/mcp'

    Run it once, then sign in with codex mcp login state-of-ats-2026-dataset if the server asks for an account.

From the project's README

As published by kayvan-zahiri/state-of-ats-2026 in README.md.

A selected employer dataset of ATS attributions and published careers-portal evidence, with a CSV and a typed, dependency-free Node.js API. Published by ResumeAI alongside the State of ATS 2026 report.

This snapshot contains 738 employers, with 421 rows marked verified=true and 557 rows containing a recorded apply_host. These are different measures. The latest nonempty per-row checked_at is 2026-10-09.

The table counts only rows marked verified=true in this selected snapshot. It is not an estimate of industry-wide market share or current employer configurations.

ATS vendorRecordsShare of flagged subset
Workday20348.2%
Greenhouse6515.4%
Oracle Cloud HCM307.1%
iCIMS307.1%
Eightfold174.0%
Avature143.3%
Ashby143.3%
SmartRecruiters112.6%
Taleo81.9%
Internal / proprietary61.4%
SAP SuccessFactors61.4%
USAJobs61.4%

Version 2.1.0 is a re-verification of this snapshot on 2026-10-09. Version 2.0.0 copied the September 2026 export and did not check employers again. The latest nonempty checked_at is 2026-10-09 on rows that cleared this pass. Other rows may still carry an earlier date.

421 of 738 employers are marked verified=true: 420 confirmed on the recorded vendor, plus Rocket Lab, whose recorded vendor changed from Workday to Greenhouse. The previous headline base was 704 rows marked verified. This pass kept a row in that base only when a live probe on 2026-10-09 met the evidence rules below. 284 previously verified rows missed that bar, and one previously unverified row (Orange, Workday) was confirmed, so the verified base is 704 − 284 + 1 = 421.

The other 317 rows are labeled not re-verified in Oct 2026. That set is the 284 rows whose verified flag was cleared, plus 33 rows that were already unverified. Their recorded ats_system, apply_host, evidence_method, and checked_at stay as historical attribution. verified=false on these rows means this pass could not re-prove them. It does not relabel the recorded vendor as wrong. They drop out of every headline percentage.

The share table above counts only the re-verified subset of this selected sample. It is not an estimate of industry-wide market share. The re-verified subset over-represents vendors with public job APIs (Workday, Greenhouse, Oracle, and iCIMS tenant hosts) and under-represents SuccessFactors, Avature, and BrassRing, which mostly sit on shared hosts. These shares describe the re-verified subset only, not the market.

Per-employer evidence URLs from the 2026-10-09 pass are in data/verification-2026-10.csv.

Install and use

Requires Node.js 18 or later. Pin the package version for reproducible work:

npm install --save-exact @withresumeai/ats-data@2.1.0

ES modules (.mjs, or a project with "type": "module"):

import { companies, verifiedCompanies, getATSForCompany } from "@withresumeai/ats-data";

console.log(companies.length, verifiedCompanies.length);
console.log(getATSForCompany("apple")); // Snapshot attribution; null if absent.
const recordedHostRows = companies.filter((company) => company.applyHost);
console.log(recordedHostRows.length);

CommonJS (.cjs):

const { companies, getATSForCompany } = require("@withresumeai/ats-data");
console.log(companies.length, getATSForCompany("apple"));

Both module formats load the package's own bundled CSV, regardless of the caller's working directory. A caller's data/companies.csv does not override it.

companies contains all rows; verifiedCompanies filters the dataset's verified flag. getATSForCompany(nameOrSlug) performs a case-insensitive lookup and returns only { company, slug, atsSystem, industry, sourceUrl }, or null. Find a row in companies when you need its verification or evidence fields. getCompaniesByATS(name) and getCompaniesByIndustry(name) return matching rows, including unconfirmed ones.

atsDistribution() returns counts and atsShare() returns percentages within the rows marked verified, which in this release is the 2026-10-09 re-verified subset. Both accept { all: true } to include rows labeled not re-verified in Oct 2026. Their default results describe this selected sample, not industry-wide market share, and that subset over-represents vendors with public job APIs. For an evidence-host subset, filter companies by applyHost before computing your own counts.

Python / pandas

After installing the npm package and pandas (pip install pandas), run this from the directory containing node_modules:

import pandas as pd

df = pd.read_csv(
    "node_modules/@withresumeai/ats-data/data/companies.csv",
    keep_default_na=False,
)
verified = df.loc[df["verified"]]
recorded_host_rows = df.loc[df["apply_host"].ne("")]
print(df.shape)
print(verified["ats_system"].value_counts().head(5))

The CSV starts with its header; no comment="#" option is needed. keep_default_na=False preserves empty CSV fields as empty strings. Download the repository CSV or canonical export separately if preferred; those URLs may change independently of an installed package version.

Runnable repository examples are in examples/quickstart.mjs and examples/python.py.

CSV and TypeScript schema

The CSV has 14 columns in the order below. Blank evidence and geography strings become undefined in the JavaScript API. An empty top_roles value becomes an empty array.

CSV columnCompany propertyMeaning / JavaScript type
namenameEmployer name; string.
slugslugCompany-guide identifier; string.
industryindustryAssigned industry label; string.
ats_systematsSystemRecorded ATS attribution; ATSSystem.
verifiedverifiedtrue when re-verified with live evidence on 2026-10-09; false when labeled not re-verified in Oct 2026, with historical attribution kept. boolean.
apply_hostapplyHostPublished careers/apply host; optional string.
evidence_methodevidenceMethodPublished evidence method; optional string.
checked_atcheckedAtPer-row evidence date (YYYY-MM-DD); optional string.
hq_countryhqCountryAssigned headquarters country; optional string.
hq_country_codehqCountryCodeAssigned headquarters country code; optional string.
hq_regionhqRegionAssigned headquarters region; optional string.
hiring_volume_tierhiringVolumeTierEditorial tier: mega, high, or mid; optional HiringVolumeTier.
top_rolestopRolesPipe-separated role slugs in CSV; optional string[] in JavaScript.
source_urlsourceUrlResumeAI company-guide URL; string.

source_url points to https://withresumeai.com/ats-checker/{slug}, not an independent employer evidence page. Hiring tiers and role labels are descriptive metadata, not measured current vacancy counts or live job listings. Types Company, ATSInfo, ATSSystem, and HiringVolumeTier are exported.

Upgrading from 1.3.0

Version 2 is a breaking CSV schema update: the published npm 1.3.0 snapshot had 743 rows and 8 columns; this release has 738 rows and 14 columns. The six evidence/headquarters columns were added, verified moved to fifth, and source_url is now last. The prose preamble was removed. Update positional readers, skipped-line settings, row-count assertions, and schema checks; prefer named columns.

The JavaScript helpers retain their signatures and the narrow getATSForCompany result. Full Company rows now expose the six optional evidence/headquarters properties above. Dataset contents and lookup availability have changed between snapshots.

Five former duplicate record slugs are absent: anthem, ge, k12, smurfit-kappa, and square. In the recorded deduplication, their retained counterparts are elevance-health, ge-aerospace, stride, westrock, and block, respectively. These are historical record aliases, not automatic lookup redirects or claims about current corporate relationships.

Keep the old package snapshot when a migration is not yet possible:

npm install --save-exact @withresumeai/ats-data@1.3.0

October 2026 evidence rules

The 2026-10-09 pass used live HTTP probes from one machine, about one request per second per vendor host, with a custom user agent identifying ResumeAI. A row is marked verified=true only when one of these held:

  1. A vendor job API on the employer's own tenant returned live postings. Accepted APIs are the Workday CXS jobs endpoint (career sites read from that tenant's robots.txt), the Greenhouse board API (the board name matches the employer and lists at least one job), the Lever or Ashby posting APIs (title match), the SmartRecruiters postings API (company name match), and the Oracle Recruiting CE requisitions API (at least one job).
  2. The employer's recorded careers host loaded a page other than a login or SSO wall, and the vendor's domain appeared in the redirect chain or the HTML contained at least two references to that vendor.
  3. For Internal ATS, an employer-run careers or jobs page loaded and showed no third-party ATS signature.

A row that met none of these is labeled not re-verified in Oct 2026 (verified=false). Typical causes are no recorded careers host, a shared vendor host with no employer tenant id (for example careerN.successfactors.com or sjobs.brassring.com), an SSO wall, a bot challenge, no public site, or a weak single-hit signature. This release does not infer a vendor for those rows and does not replace the recorded vendor. A review-flag lead, including a live board on a different vendor, stays under review in the changelog and is left unchanged.

checked_at on a re-verified row is 2026-10-09. On a row not re-verified in Oct 2026, checked_at remains the earlier observation date when one was published.

Provenance and limits

Initial ATS attributions were compiled with AI from public information. Later passes added automated portal and vendor probes and manually recorded portal URLs. The October 2026 pass is a re-verification of the full 738-row file against the rules above. Read the report methodology and the per-row fields before interpreting a count.

  • verified=true in this snapshot means live evidence on 2026-10-09 under the rules above. Read apply_host, evidence_method, and checked_at on that row before citing the host.
  • Rows labeled not re-verified in Oct 2026 keep their historical attribution. A blank host, method, or date means that detail was not published. The recorded vendor stays in place.
  • A careers host does not reveal private screening rules, resume parser behavior, or every configuration across jobs, regions, and subsidiaries.
  • The employer list is a selected sample, not a representative survey. Shares of the re-verified subset over-represent vendors with public job APIs. Attributions can change after their recorded checks. This release makes no guarantee of a recurring refresh schedule.

Contributing, citation, and license

See CONTRIBUTING.md for evidence and schema requirements. Citation is appreciated: Kayvan Zahiri / ResumeAI (2026), State of ATS 2026. Include the package version or repository revision used. Machine-readable metadata is in CITATION.cff.

MIT; see LICENSE. Retain its copyright and permission notices when distributing copies or substantial portions. A scholarly or journalistic citation is optional; NOTICE.md explains that distinction.

Tools it offers (6)

What this server listed when Ahel dialed its public endpoint in Sep 2026, with no key and no account of yours. The names are the server’s own.

  • which_ats
  • ats_stats
  • list_companies
  • ats_changes
  • check_resume
  • get_agent_resume

Signals

GitHub stars
7
Forks
1
Last commit
Sep 2026
Advanced
Delivery
ats MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
Item type
mcp-server
Key
com-withresumeai-ats
Source
github.com/kayvan-zahiri/state-of-ats-2026
Hosted endpoint
https://withresumeai.com/api/mcp