DEV Community

Michael Lip
Michael Lip

Posted on • Originally published at zovo.one

ATS-Friendly Resumes: What Applicant Tracking Systems Actually Parse

75% of resumes are rejected by applicant tracking systems before a human sees them. This statistic is thrown around so often it's become meaningless. The real question is: what causes ATS rejection, and what can you do about it?

How ATS parsing works

An ATS receives your resume file (PDF, DOCX, or plain text), runs it through a parser that extracts structured data (name, contact info, work history, education, skills), and stores that data in a searchable database.

Recruiters then search the database with keywords and filters: "JavaScript AND React AND 5+ years experience in San Francisco." Your resume either matches or it doesn't.

The "rejection" isn't a binary pass/fail in most systems. It's a relevance ranking. Your resume might be in the database but ranked #847 out of 900 applicants, which functionally means it's never seen.

What breaks parsing

Tables and columns. Two-column layouts look great but confuse parsers. The parser reads left-to-right, top-to-bottom. A two-column layout means it reads the first line of column 1, then the first line of column 2, producing gibberish. Use a single-column layout.

Headers and footers. Some ATS parsers ignore header and footer content. If your name and contact info are in a header, they might not be extracted.

Graphics and images. Logos, icons, profile photos, and skill-level bars (the circular ones showing "JavaScript: 90%") are invisible to parsers. A parser can't read a star rating or a progress bar.

Non-standard section headings. "Where I've Been" instead of "Work Experience." "What I Know" instead of "Skills." Parsers look for standard headings to categorize content. Creative headings cause miscategorization.

Complex formatting. Text boxes, embedded tables, custom fonts that don't embed properly, colored backgrounds. The simpler the formatting, the better the parsing.

What survives parsing

Plain text with standard headings, consistent date formats, and clear section breaks. Specifically:

  • Section headings: "Work Experience," "Education," "Skills," "Certifications"
  • Date format: "Jan 2020 - Present" or "01/2020 - Present"
  • Job entries: Company name, job title, dates, bullet points
  • Skills: A plain list or comma-separated text
  • File format: .docx parses most reliably. PDF is second. Fancy design PDFs (Canva, etc.) parse worst.

Keyword optimization

ATS search is keyword-based. If the job description says "React" and your resume says "ReactJS," some systems won't match. If they say "project management" and you say "PM," you might not match.

The approach: mirror the exact terminology from the job description. If they say "Python," use "Python," not "python" or "Python3." If they say "CI/CD," use "CI/CD," not "continuous integration and continuous deployment" (though including both is the safest approach).

This isn't keyword stuffing. It's using the same vocabulary as the job posting, which also makes your resume more relevant to the human who eventually reads it.

I built a resume generator at zovo.one/free-tools/resume-generator that produces clean, ATS-compatible resumes in standard formats. It uses single-column layouts, standard section headings, and parsable date formats. Fill in your information, choose a clean template, and export as PDF or DOCX.

I'm Michael Lip. I build free developer tools at zovo.one. 500+ tools, all private, all free.

Top comments (0)