Methodology
How the score is calculated
No universal ATS score exists. Nobody outside Workday, Taleo or Greenhouse knows their thresholds, so this one measures something narrower and checkable: how much of your file a parser recovers. Every weight is below, with its source.
The shape of it
What the number is
How much of your file a parser recovers, and nothing else. Not a prediction, and not a percentage any vendor publishes. It tops out at 98. Every scored finding is listed below with its cost; the arithmetic that combines them is the one thing this page holds back.
01
The ceiling is 98
Not 100. No vendor publishes its parser rules, so a perfect score would be a claim about software nobody outside those companies can read.
02
Some findings zero it
A file nothing can be read out of scores nothing, and there is no special case that makes it so: no text layer, no text, or empty extracted text for any reason.
03
Blockers sit outside it
A file the portal will not accept never reaches a parser, so it is shown above the score rather than inside it. The score still computes: the advice survives a re-export.
04
The same file scores the same
No sampling, no model, no luck. The number is arithmetic over the findings below, so a file you have not changed cannot come back with a different score tomorrow.
Every weight
All 21 scored findings, heaviest first
The checker shows a severity label rather than a number, because a price list invites gaming the score instead of fixing the document. They are published here anyway: the code is open, so they are public either way.
| Finding | Cost | Shown as | Rests on |
|---|---|---|---|
| Letter-spaced text (worst tier) Runs of four or more single-letter tokens. A parser cannot rejoin the characters, so the text contributes no searchable terms. | 45 | Major | Greenhouse Support, Unsuccessful resume parse |
| Column layout and reading order Raised by the extractor when it finds this in the document. | 28 | Major | Layout-Aware Parsing Meets Efficient LLMs, arXiv 2510.09722 (2025) |
| No work history section No heading names a work history, so there is nothing to build a career timeline from and everything under the renamed heading is unmapped. | 26 | Major | Our judgement, extending a documented Greenhouse failure mode |
| Unfilled template text Greenhouse skips data it reads as placeholder. In practice it usually means a template nobody finished. | 20 | Major | Greenhouse Support, Unsuccessful resume parse |
| Text box Raised by the extractor when it finds this in the document. | 18 | Major | Greenhouse Support, Unsuccessful resume parse |
| Missing email No address found. Recruiters filter on exact criteria, and a profile with no contact route cannot be actioned even when it matches. | 18 | Major | Hidden Workers: Untapped Talent, Harvard Business School and Accenture (2021) |
| Page header Raised by the extractor when it finds this in the document. | 16 | Major | Greenhouse Support, Unsuccessful resume parse |
| Missing sections No headings a parser recognizes. Greenhouse lists inconsistent section formatting as a parse failure, and renaming a standard heading is enough to drop the section it contains. | 15 | Moderate | Greenhouse Support, Unsuccessful resume parse |
| Missing name No line reads as a name, so the record has nobody attached to it. Greenhouse names contact details in a header, footer or text box as a specific cause of this. | 14 | Moderate | Greenhouse Support, Unsuccessful resume parse |
| Entries with no dates A position with no date range cannot be placed on a timeline. Charged per document, not per entry: the document-level date field still passes, which is the hole this closes. | 14 | Moderate | Our judgement, not a published weight |
| Table Raised by the extractor when it finds this in the document. | 13 | Moderate | Greenhouse Support, Unsuccessful resume parse |
| Missing dates No start and end dates found. Parsers read dates reliably when they are there, so this reads as missing from the document rather than lost in transit. | 12 | Moderate | Layout-Aware Parsing Meets Efficient LLMs, arXiv 2510.09722 (2025) |
| Entries with no employer A row with a title and dates but no company. The company field is the one most recruiter searches filter on. | 10 | Moderate | Our judgement, not a published weight |
| Over 2.5MB Greenhouse stops parsing above this size whatever the upload limit allows, so the file uploads and the record arrives empty. | 10 | Moderate | Greenhouse Support, supported formats and parse limits |
| Page footer Raised by the extractor when it finds this in the document. | 9 | Minor | Greenhouse Support, Unsuccessful resume parse |
| Headings a parser will not map A heading that names no section a parser knows. Everything underneath goes unmapped. | 8 | Minor | Our judgement, extending a documented Greenhouse failure mode |
| Missing phone No phone number found in the text. | 7 | Minor | Greenhouse Support, Unsuccessful resume parse |
| Mixed date formats Two date shapes in one document. Duration is computed by pairing endpoints, so the mixture is the fault rather than either format. | 6 | Minor | Our judgement, not a published weight |
| Ongoing role not marked Present "Current", "Now", or a dash with nothing after it. An end a parser does not recognize is an end it does not record. | 5 | Minor | Our judgement, not a published weight |
| Missing links No portfolio or profile URL. | 3 | Minor | Layout-Aware Parsing Meets Efficient LLMs, arXiv 2510.09722 (2025) |
| Picture Raised by the extractor when it finds this in the document. | 0 | Minor | Layout-Aware Parsing Meets Efficient LLMs, arXiv 2510.09722 (2025) |
Letter-spaced text is tiered by how much of the document it covers (45 / 25 / 12), because a spaced-out heading and a spaced-out resume are not the same problem.
Reading the result
Bands, labels, and what is not scored
| Band | Score at or above | Verdict shown |
|---|---|---|
| clean | 88 | Should come through intact. |
| minor | 70 | Will parse, with some detail lost. |
| risky | 40 | Expect fields to go missing. |
| broken | 0 | Most of this will not survive. |
| Severity label | Cost at or above |
|---|---|
| Blocking | 100 |
| Major | 16 |
| Moderate | 10 |
| Minor | 0 |
| Format | Not scored |
|---|---|
| Layout formats (PDF, .docx, .odt) | Nothing. Every check applies. |
| Markup (.rtf) | Reading order, column layout, text layer |
| Plain text (.txt, .md) | Reading order, column layout, text layer, tables |
A check a format cannot fail is listed as not scored, never as passed. Plain text has no reading order to scramble, and crediting it would inflate the number for free.
Held separate
What never enters the score
Keyword coverage
Reported only when you paste a job posting, and never folded in: a resume is not worse for missing keywords from a job you have not applied to. The top 24 terms are ranked by how often the posting asks, filtered against 217 stopwords. Stuffing is flagged past 5 uses and 2× what the posting asks. Abbreviations show as near misses: an ATS matches literal text, so counting K8s as Kubernetes would promise a match it will not make.
Writing quality
Bullet length, weak verbs and missing metrics are reported for the human reader and kept out of the parse figure. Mixing “a machine can read this” with “this is well written” is what makes a single blended score meaningless.
Employment gaps
Surfaced to you, never scored and never framed as a defect. Gaps are normal, and a tool that marks people down for them is doing harm rather than analysis.
Photos
Detected and reported at zero cost. A photo is expected on a resume across much of Europe and Asia, so charging points would mark a document down for following local convention. The risk is information that exists only inside the image, and the finding says so.
Argue with these
Judgement calls, not citations
Every weight declares where it came from, which is a weaker promise than “every weight is cited” and the one the code actually keeps. These are ours. They are set out here so you can disagree with something specific.
- The boundary between Major and Moderate (16 and 10).
- 10 for an oversize file. Greenhouse stops parsing at 2.5MB but accepts uploads far larger, so the file attaches and a recruiter re-keys it by hand. Nobody is rejected. This was 30, which overstated it.
- 28 for column layout and reading order, merged. They used to bill separately, 42 points for one defect.
- 45 / 25 / 12 for the letter-spacing tiers, and the boundaries between them.
- 20 for unfilled template text, priced as a lost employer name.
- Every structural weight (26 / 14 / 10 / 8 / 6 / 5). Nobody publishes what an undated job or a renamed section costs.
- The band boundaries (88 / 70 / 40). Set by what each band should mean, not measured. The only corpus is our own test fixtures, which were built to exercise detectors rather than to represent real resumes, so reading boundaries off their distribution would be measurement theater.
One thing is deliberately absent. On DOCX and ODT we read text box, header and footer contents into the main text, so a trapped email is found and “missing email” never fires alongside “text box”. PDF has no text-box detector yet. That is a real gap, and it is here rather than hidden.
Sources
What the cited weights rest on
Greenhouse Support, Unsuccessful resume parse
Greenhouse lists graphics, tables, headers and footers, contact details in a text box, multi-column layouts and inconsistent section formatting as causes of a failed or partial parse.
Hidden Workers: Untapped Talent, Harvard Business School and Accenture (2021)
88% of employers say qualified candidates are screened out because they do not match the exact criteria in the job description; over 90% use a recruiting system to make the first cut.
Layout-Aware Parsing Meets Efficient LLMs, arXiv 2510.09722 (2025)
Dates and named entities are extracted at F1 0.95 to 0.97 when present, so a missing date is a gap in the document rather than a parsing risk.
Greenhouse Support, supported formats and parse limits
Greenhouse cannot parse a resume larger than 2.5MB, and a resume uploaded as an image rather than a document will not parse at all.
Layout-Aware Parsing Meets Efficient LLMs, arXiv 2510.09722 (2025)
Around 20% of real resumes use a non-linear multi-column layout; removing layout-aware reordering costs 10+ accuracy points, and long descriptions fall to F1 0.55 without it.