How CheckATS scores your resume
The short answer: CheckATS calculates a simulated score as 60% selected job-description keyword coverage plus 40% extracted-text checks. It runs locally in your browser. Optional AI review is a separate writing assessment. The score is not an employer ATS score or a probability of being hired.
What goes into the score?
Simulated score = round(0.60 × keyword coverage + 0.40 × text-check score)
Keyword coverage is the rounded percentage of selected job-description terms found in the resume. Each selected term contributes equally; the tool does not infer which requirements an employer considers mandatory.
How are job keywords selected and matched?
The browser loads a cross-occupation skills dictionary, then selects up to 40 dictionary matches from the job description. If fewer than five are found, it supplements them with statistical word extraction, excluding common filler words. If the dictionary cannot load, this fallback can change the selected terms.
Resume matching ignores case, normalizes whitespace and long dashes, and checks Latin word boundaries. Chinese terms use direct substring matching. It does not expand synonyms, stem words, or map acronyms: K8s alone does not match Kubernetes, and Amazon Web Services alone does not match AWS in this tool. Repeating an already matched term does not raise coverage.
The four extracted-text checks
Each passing check adds 25 points to the text-check score, which contributes up to 40 points to the overall score.
| Check | Current rule |
|---|---|
| Contact | An email address is found. Phone detection is supplementary and does not determine whether this check passes. |
| Dates | At least two supported month dates, all in the same format: YYYY.MM, YYYY-MM, MM/YYYY, or Chinese year/month dates. English month names such as Jan 2024 are not recognized by this check. |
| Clean text | No replacement characters, at most two private-use characters, and no more than 5% other symbol characters after whitespace is removed. |
| Length | Between 300 and 3,000 non-whitespace Unicode characters. This heuristic does not determine an ideal page count or resume length for every role. |
A worked example
If the selected job terms are Python, SQL, Docker, Kubernetes, and AWS, and the resume contains the first three, keyword coverage is 3 ÷ 5 = 60%. Passing all four text checks gives 100%. The simulated score is round(0.60 × 60 + 0.40 × 100) = 76/100. These are illustrative inputs, not an employer benchmark.
What this score cannot measure
- Original PDF layout, columns, tables, section detection, or how an employer's parser reads them.
- Scanned or image-only PDFs: CheckATS has no OCR. It accepts pasted text or text-based PDF imports, not DOCX uploads.
- Employer screening questions, work authorization, hiring policies, or interview decisions.
- Experience quality or verified accomplishments: these require human review. AI suggestions can be mistaken.
For unchanged inputs and the same selected terms, the local score is deterministic. AI reviews and rewrites may vary and should be checked before use. Include missing terms only when they truthfully describe your experience.
How is this different from Greenhouse or Workday?
CheckATS is an independent preparation tool and is not affiliated with those vendors. ATS features and employer configurations vary. For example, Greenhouse's Talent Matching FAQ describes related-term matching and says that feature does not automatically reject or advance candidates. CheckATS does not reproduce that system or Workday's screening.
Is it free?
Local checks require no account and do not use the AI allowance. Standard AI limits are 5 review requests and 2 rewrite requests per IP per UTC day, resetting at 00:00 UTC. A shared network shares its IP allowance. Automatic review refreshes after a rewrite also consume review requests, and a failed request can consume an allowance.
Where is my resume processed?
- Local checks and PDF extraction: run in this browser tab; the scoring code does not upload the resume for these operations.
- AI review: sends the resume and job description to the site's Cloudflare Worker, which uses Cloudflare Workers AI. The current review request uses up to 6,000 resume characters and up to 800 job-description characters.
- AI rewrite: sends the resume, job description, and missing terms to the Worker and DeepSeek. Review the returned text and highlighted changes; the prompt's instructions cannot guarantee factual accuracy.
- Email delivery: sends the recipient address and optimized resume to Resend when requested.
- Feedback: submissions may be stored, including contact details and IP address. Avoid including resume data in feedback unless you intend to submit it.
The site's Worker uses IP-based request counters. Provider logging and retention are governed by their policies; local scoring does not establish a guarantee about external AI or email retention. The site also loads third-party fonts, a PDF library, and analytics.
Sources and implementation
The formula and limits above document the CheckATS source repository, specifically the local scoring code and AI Worker. See the Greenhouse source above for that vendor's feature. Product rules can change; this page describes the current implementation.
Check the selected terms, then make accurate edits.
Try the free resume checker →