What an ATS actually does
An applicant tracking system ingests your resume, extracts structured fields (name, email, employer, dates, skills), and indexes the result so recruiters can search and filter. Modern stacks like Workday and SmartRecruiters use ML parsing on top of text extraction; older ones like Taleo use rule-based dictionaries. Both stages still depend on the PDF text-extraction step, which reads glyphs in document order. If your layout breaks that order, the downstream parser never gets a chance to recover.
This tool flags the layout and content signals that break that first step. It does not score against a specific job description, it does not check spelling, and it does not produce a fake AI confidence number. The score is mechanical and explainable: we subtract a fixed penalty per failed check and show you exactly what failed and why.
What we check, and why
Each check is grounded in the documented behaviour of a major ATS. We track failures that affect real candidates, not folklore. The categories are formatting (layout that survives text extraction), structure (sections and page count), content (bullets, dates, achievements), keywords (technical terms present), and contact (recoverable email, phone, links).
Contact info hidden in PDF headers or footers
Workday and several iCIMS tenants strip the PDF header region during text extraction. An email or phone there disappears entirely from the parsed candidate profile.
Multi-column or sidebar layouts
Every major ATS reads PDFs in document order. Two-column resumes interleave sidebar text into the main column mid-sentence, scrambling your work history.
Tables for layout
Workday and Taleo concatenate cells across rows. Right-aligned dates inside a single-row table usually survive; nested tables routinely merge employer names with the next row's dates.
Stylised bullet glyphs (arrows, diamonds, stars)
Taleo and older iCIMS tenants either drop these characters or split a single bullet into separate job entries. Stick to a round bullet, hyphen, or asterisk.
Custom fonts with broken embeddings
If a font is not embedded fully, glyphs come through as question marks. Use Arial, Calibri, Helvetica, Times, Georgia, Verdana, Open Sans, or Roboto.
Exotic date formats
Parsers want 'January 2020' or '01/2020'. 'Jan 20', 'Q1 2020', or '2020.01' are routinely flagged as unparsable.
Non-standard section headers
Dictionary-based parsers skip the whole section if the heading is a cute synonym. 'Where I have Worked' or 'My Story' will not register as Experience.
Images for icons, headshots, or logos
Best case the image is ignored. Worst case the ATS runs OCR over it and injects noise into the searchable index, hurting keyword ranking.
How the score works
Start at 100. Subtract 25 per failed blocker, 8 per failed warning, 2 per failed info item. Floor at 0. Blockers are issues that stop a parser cold: missing contact info, no recognisable name, three or more pages. Warnings degrade match quality: tables, images, multi-column layouts, inconsistent fonts. Info items are polish: weak verbs, filler buzzwords, missing LinkedIn URL.
We deliberately do not produce a 0-100 score with fake confidence intervals. Every point has a reason you can read in the issues list above.