What ATS Systems Actually See on Your Resume
There's a lot of folklore about ATS. Most of it overcomplicates things. The actual mechanics are simpler — and once you see them, the optimization rules become obvious.
Almost every job application you submit goes through an Applicant Tracking System before a human sees it. Workday, Greenhouse, Lever, Taleo, iCIMS, SmartRecruiters, BambooHR — there are dozens of them and they don't all behave identically. But the core pipeline is the same, and once you understand it, the optimization rules stop feeling magical.
Step 1: your PDF becomes plain text
An ATS doesn't open your resume the way you do. It runs a parser — usually a third-party one like HireAbility or Sovren — that strips your PDF into structured text. That parser tries to identify sections (Education, Experience, Skills), pull out fields (job title, company, dates), and extract a token list of skills.
Most parsing failures happen here, before any ranking even occurs. Your beautifully-formatted Canva resume becomes a mangled string where 'Senior Engineer' bleeds into your previous bullet point because the parser couldn't figure out where one ended and the other began.
Notice there are no line breaks inside the parsed string. The parser is rebuilding structure from spacing, font sizes, and position. Anything that confuses those signals — tables, columns, text boxes, images — produces garbage at this stage.
Step 2: keyword extraction
After parsing, the ATS extracts a list of skills, tools, and titles from your text. This is shallower than people assume. It's mostly literal string matching with light stemming — not semantic understanding.
- 'PostgreSQL' and 'Postgres' may or may not match depending on the engine
- 'Project Management' and 'managed projects' often don't match
- 'JS' and 'JavaScript' usually do not match — list the full term
- Acronyms in the JD ('SQL,' 'API,' 'CI/CD') need to appear literally on your resume
Rule of thumb: when a JD repeats a phrase three or more times, use that exact phrase on your resume — wherever it's actually true for you.
Step 3: scoring against the JD
Recruiters configure each role with required keywords, preferred keywords, and weight rules. Your extracted token set gets compared to that configuration, and you get a score. The cutoff for a recruiter to even see your resume varies — at high-volume roles, only the top ~25% of scorers get human review.
This is why two equally qualified candidates can have wildly different callback rates. The one whose resume mirrored the JD's vocabulary scored higher and got the human read. The other got auto-filtered.
Formatting failures that break parsing
- Two-column layouts — parsers often read columns left-to-right across the page, mashing them together
- Tables for skill grids — flatten unpredictably
- Text boxes — sometimes ignored entirely
- Images carrying critical info (logos, headshots, icon-based skill grids)
- Custom or non-standard fonts — may not embed; falls back to default and breaks layout
- PDFs exported from design tools (Figma, Canva) without text layer
- Headers and footers — sometimes dropped during parsing
Why your beautiful Canva template fails
Canva templates frequently rank top of Google for 'modern resume.' They look great. They're often disasters in ATS parsing. The fundamental issue: design tools optimize for visual layout, not for semantic structure. The ATS doesn't care what your resume looks like. It cares whether it can extract structured fields from it.
If you must use a Canva-style template, test it. Open the PDF in any text editor. If sections are jumbled or skills appear in random order, the ATS sees the same garbage. Use Google Docs or a plain Word doc instead.
How to test what the ATS actually sees
- Open your resume PDF
- Select all text (Cmd-A / Ctrl-A) and copy
- Paste into a plain text editor (Notepad, TextEdit set to plain mode)
- If it looks structured and readable, you're good. If sections collide or skills bleed into bullets, the ATS sees the same thing.
FlowJob's ATS checker does this automatically and rates you against the actual job posting — not just generic best practices. You get a fit score, missing keywords pulled from the JD, and concrete edits in 30 seconds.
Practical optimization checklist
- Single column, no tables, no text boxes
- Standard fonts — Arial, Calibri, Times New Roman, Garamond
- Section headers in plain text: Education, Experience, Skills, Projects
- Dates in 'Month YYYY' format consistently
- Skills section grouped (Languages: …, Frameworks: …, Tools: …)
- Job titles that match what the JD asks for, where accurate
- Spell out acronyms once and use them naturally throughout
- Tailor per role — see our guide on tailoring your resume to each job
FAQ
Is there a single ATS most companies use?
No. Workday and Greenhouse dominate enterprise hiring; Lever and Ashby are common at startups; Taleo at older institutions. The optimization rules pass all of them when they're solid.
Should I submit a Word doc instead of PDF?
Most modern ATS systems handle both. PDF is generally safer because formatting is locked. The exception: a few older Taleo deployments still parse Word better. Read the application instructions.
Do ATS systems actually use AI?
Some are starting to. Most production systems still rely on classical parsing + keyword matching. Even the AI-augmented ones still score against keyword overlap heavily.
Keep reading
Why Sending the Same Resume Everywhere Doesn't Work
Two hundred applications. Four callbacks. Sound familiar? Mass-applying feels like progress because each Easy Apply gives a tiny dopamine hit. The math is brutal.
EngineeringResume for Software Engineering Internships (With Examples)
The intern resume is its own genre. What works for a senior eng looks suspicious on a sophomore's page. Here's what actually converts.
StrategyHow to Tailor Your Resume for Each Job
Tailoring isn't rewriting your whole resume. It's the surgical edits that make the most relevant 30% of your experience jump off the page.
