Skip to main content
Open dataMIT licensedNo API keyCORS enabled

Free ATS dataset API

A free JSON API over the State of ATS 2026 dataset: 738 Fortune 500 and Global 2000 employers mapped to the applicant tracking system each one actually uses — 704 of them verified against the company's live careers portal (June 2026 audit, re-verified July 2026). Build company lookups, recruiting-tech dashboards, or job-search tools on top of it. No key, no signup, no rate limit on the dataset API. AI agents can query the same data (plus the resume-scoring engine, capped at 10 checks/day per IP) over the MCP server.

Using this at work? The data stays free and MIT forever — but if you need it to stay true, there's a paid service on top: automated weekly re-probing of every employer whose vendor exposes a public endpoint (309 of 738 today), hand re-verification of any record you dispute, and an alert the week a switch is confirmed. Verified ATS data for teams →

Endpoints

EndpointReturns
GET /api/v1/atsFull dataset — meta block + all 738 companies
GET /api/v1/ats?ats=workday&verified=trueFiltered by ATS vendor and/or verification status
GET /api/v1/ats/{slug}One company by slug (case-insensitive name fallback); 404 JSON if unknown

Every row carries a verified flag — true means the ATS was confirmed against the employer's live apply-URL host. Published percentages (Workday 38.0%, Greenhouse 12.6%, top-3 vendors ~60%) are computed from the 704 verified rows only.

Copy-paste examples

1. Look up one company by slug (or name)

Slug first, case-insensitive company-name fallback. Unknown companies return a 404 JSON error.

curl -s https://withresumeai.com/api/v1/ats/anthropic
{
  "meta": {
    "updated": "2026-07-28",
    "source": "https://withresumeai.com/reports/state-of-ats-2026",
    "license": "MIT"
  },
  "company": {
    "company": "Anthropic",
    "slug": "anthropic",
    "industry": "Technology",
    "ats": "Greenhouse",
    "verified": true,
    "hiring_volume_tier": "mid",
    "top_roles": ["software-engineer", "product-manager", "data-analyst"],
    "source_url": "https://withresumeai.com/ats-checker/anthropic"
  }
}

2. Filter by ATS vendor, verified rows only

?ats= is a case-insensitive substring match (so oracle finds "Oracle Cloud HCM"). ?verified=true keeps only portal-confirmed rows.

curl -s "https://withresumeai.com/api/v1/ats?ats=workday&verified=true"
{
  "meta": {
    "total": 738,
    "verified": 704,
    "returned": 269,
    "updated": "2026-07-28",
    "source": "https://withresumeai.com/reports/state-of-ats-2026",
    "license": "MIT",
    "docs": "https://withresumeai.com/developers",
    "filter_ats": "workday",
    "filter_verified": true
  },
  "companies": [
    {
      "company": "Salesforce",
      "slug": "salesforce",
      "industry": "Enterprise Software",
      "ats": "Workday",
      "verified": true,
      "hiring_volume_tier": "mega",
      "top_roles": ["software-engineer", "account-executive", "customer-success-manager"],
      "source_url": "https://withresumeai.com/ats-checker/salesforce"
    },
    ...268 more
  ]
}

3. Pull the full dataset and pipe it into jq

The whole 738-row dataset in one response — small enough to fetch whole (~250 KB).

curl -s https://withresumeai.com/api/v1/ats | jq '.meta'
{
  "total": 738,
  "verified": 704,
  "returned": 738,
  "updated": "2026-07-28",
  "source": "https://withresumeai.com/reports/state-of-ats-2026",
  "license": "MIT",
  "docs": "https://withresumeai.com/developers"
}

MCP server for AI agents

The same dataset — plus the production resume-scoring engine behind the ATS checker — is available as a remote Model Context Protocol server, so Claude, Cursor, and any other MCP-capable agent can query it natively. Streamable HTTP, no auth, no key:

https://withresumeai.com/api/mcp
ToolArgumentsReturns
which_ats{ company }The verified ATS for one employer — verification status/date, apply-URL host, company-specific resume tips
ats_stats{}Canonical market-share numbers, computed live from the 704 verified rows (Workday 38.0%, top-3 ~60%)
list_companies{ ats?, industry?, verified_only? }Filtered company list, max 100 rows per call
ats_changes{ limit? }Living changelog: human-confirmed ATS changes at tracked employers (weekly automated portal re-verification), max 50 rows
check_resume{ resume_text, company?, ats?, job_description? }0–100 score from the production ATS engine + per-ATS parsing rules, fixes, missing keywords (10/day per IP)
get_agent_resume{ token }A candidate's consent-shared resume as JSON Resume + per-ATS rendering context — only against a token its owner minted and can revoke; no token, no data

Claude Code

One command — registers the server for the current project.

claude mcp add --transport http resumeai-ats https://withresumeai.com/api/mcp

Claude Desktop

Settings → Connectors → Add custom connector, with URL https://withresumeai.com/api/mcp. Or, for the config-file route, add this to claude_desktop_config.json (uses mcp-remote to bridge stdio → HTTP):

{
  "mcpServers": {
    "resumeai-ats": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://withresumeai.com/api/mcp"]
    }
  }
}

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "resumeai-ats": {
      "url": "https://withresumeai.com/api/mcp"
    }
  }
}

The three data tools are unlimited (same fair-use ask as the JSON API). check_resume runs a real scoring pass through the same engine as the web checker, so it's limited to 10 checks per day per IP — unlimited checks stay free on the site.

Agent-readable resumes (consent-gated)

A resume built on ResumeAI can be exposed as a structured, machine-readable career record that an AI agent — a recruiter's sourcing assistant, a candidate's job-search copilot — can fetch on the owner's behalf. It's served in the open JSON Resume schema, paired with an ats_context block that says how to render the profile for the owner's target applicant tracking system — recommended file format, layout, and that vendor's parsing rules, straight from the portal-verified State of ATS 2026 data above.

Consent is the whole design. A resume is returned only against a token the human owner explicitly minted and can revoke at any time. No token, no data — there is no way to browse, search, or enumerate resumes, and the endpoints are noindex. This is a candidate's verified record, exposed on their terms.

The HTTP endpoint mirrors the get_agent_resume MCP tool above — same shared logic, same consent gate:

GET /api/v1/resume/{token}   # token minted & shared by the resume's owner
{
  "standard": "JSON Resume (https://jsonresume.org/schema/)",
  "consent": "Shared by the resume's human owner via a revocable token.",
  "resume": {
    "basics": { "name": "...", "label": "...", "summary": "...", "location": {...} },
    "work": [ { "name": "...", "position": "...", "startDate": "...", "highlights": [...] } ],
    "education": [ ... ],
    "skills": [ { "name": "...", "keywords": [...] } ]
  },
  "ats_context": {
    "target_company": "Stripe",
    "ats": "Greenhouse",
    "verified": true,
    "company_page": "https://withresumeai.com/ats-checker/stripe",
    "ats_vendor": "Greenhouse",
    "recommended_format": "PDF (preferred) or .docx",
    "recommended_layout": "single-column or clean two-column",
    "parsing_rules": [ "..." ]
  }
}

How per-ATS rendering works. When the owner set a target employer on the resume, the response resolves that employer to its portal-verified ATS and attaches that vendor's parsing rules — so the agent renders the same underlying record the way Workday, Greenhouse, or iCIMS each parse best, instead of guessing at format. No target set? Look one up with which_ats first. The agent should keep every claim the owner wrote intact — this is their record, not a draft to rewrite.

Rate limits and caching

The dataset endpoints have no hard rate limit and no API key (the one exception: the check_resume scoring tool is capped at 10 checks per day per IP). Responses are cached at the edge for 24 hours (Cache-Control: public, s-maxage=86400, stale-while-revalidate), which matches how often the dataset can change. Please be nice: if you need the full dataset repeatedly, fetch the CSV once or use a mirror below instead of polling the API.

Need more than 10 checks a day?

Unlimited check_resume calls — the production scoring engine, over MCP — for $49/month. Self-serve: pay with Stripe, the key arrives by email within a minute, cancel anytime and the key simply deactivates. The dataset tools stay free and unlimited for everyone.

Checkout and billing run entirely on Stripe. Questions or volume pricing: kayvan@withresumeai.com.

License, attribution, and mirrors

The dataset and API are MIT-licensed — free for commercial and non-commercial use. If you publish research, a tool, or an article built on this data, please credit ResumeAI — State of ATS 2026 and link to the full report and methodology. Corrections and additions are welcome as pull requests on GitHub.

Frequently asked questions

Is the ATS dataset API free to use?

Yes. The API and the underlying dataset are MIT-licensed — free for commercial and non-commercial use, no API key and no signup. If you publish something built on it, we ask (but don't require) that you credit "ResumeAI — State of ATS 2026" with a link to withresumeai.com/reports/state-of-ats-2026.

How accurate is the ATS data?

704 of the 738 employers are portal-verified: each attribution was confirmed by inspecting the apply-URL host of the company's live public careers portal (June 2026 audit, re-verified July 2026). Rows carry a verified flag, and every published percentage — Workday 38.0%, Greenhouse 12.6%, top-3 vendors ~60% — is computed from verified rows only.

Is there a rate limit on the API?

No hard rate limit. There is also an extended tier — ?tier=extended returns 279 additional employers with a live, name-matched vendor board (machine-verified; a weaker claim than the curated tier's primary-apply-flow verification, and never mixed into the canonical stats). Responses are cached at the edge for 24 hours, which matches how often the data can change. Please be reasonable — if you need the whole dataset repeatedly, download the CSV once or use the GitHub, npm, Kaggle, or Hugging Face mirrors instead of polling.

How do I connect an AI agent to the dataset?

OpenAPI spec for GPT Actions and agent frameworks: https://withresumeai.com/api/v1/ats/openapi.json. Point any MCP-capable client (Claude Code, Claude Desktop, Cursor, or your own agent) at https://withresumeai.com/api/mcp — a remote MCP server over streamable HTTP, no auth. It exposes which_ats, ats_stats, list_companies, ats_changes, check_resume, and get_agent_resume. The data tools are unlimited; check_resume runs the production scoring engine and is limited to 10 checks per day per IP. get_agent_resume returns a candidate's resume only against a consent token its owner minted and can revoke.