What an ATS actually does — and what it doesn't
Modern Applicant Tracking Systems (Greenhouse, Lever, Workday, iCIMS, Taleo, SmartRecruiters, Ashby) do three things, and three things only. They ingest your resume as a text file, store the parsed content in a database, and let recruiters filter that database by keyword. That's it. ATSs do not "rank" resumes by quality. They do not reject candidates on their own. They do not apply an AI score. When you read advice that says "ATS rejected 75% of applicants" — that's marketing copy from a resume-rewriting service, not a real feature of any ATS.
The actual rejection happens at the recruiter step, and the recruiter spends about six seconds per resume on the first pass. So your resume has two audiences: the parser (which has to read your file and extract the fields), and the recruiter (who has to see a reason to flag you in six seconds). This tool scores both.
What the parser cares about: a single-column layout, plain text headings (EXPERIENCE, EDUCATION, SKILLS), standard date formats, no text inside images, no text inside tables, and no fancy characters that break ingestion. What the recruiter cares about: your top third (the first screen), a one-line summary, a signature number, and whether the first bullet under your most recent job is a verb + result + metric.
The scoring in this checker is weighted accordingly. 25 points for keyword coverage, 25 for quantified impact, 15 each for length and verb strength, 10 for parse safety, 10 for a clean contact block. Those weights match what I used on 200+ hiring loops at B2B SaaS companies over the last eight years.
How to read the ATS parse score
85+ (A). The resume is interview-ready for the role. Submit it. Do not spend another weekend tweaking — tweaking past 85 is how people miss application windows. The only reason to edit further is to add a keyword the JD explicitly asked for.
70-84 (B). Solid but leaking somewhere. The fastest fix is usually keyword coverage — add the missing items verbatim, then re-run. Second fastest is swapping 2-3 weak phrases ("responsible for", "worked on", "helped") for verb + number constructions. Each swap buys 2-3 points.
55-69 (C). Rewrite needed. The most common cause at this band is a resume that reads like a job description ("Duties included managing the team, overseeing projects, ensuring deliverables"). Hiring managers don't want duties — they want outcomes. Instead of "managed a team of engineers", write "led 6 engineers shipping 4 products in 9 months that raised ARR 18%."
Under 55 (D). Start over. A resume scoring in the 40s is almost always a resume that was written once in 2019 and tweaked 12 times since. The structure is usually the problem — a two-column template, a headshot photo, fancy fonts, a skills graph with dots filled in halfway, a tagline in the header. Strip all of that. Plain single column, plain font, plain ASCII bullets, reverse chronological, one page if you have under 10 years of experience.
The 7 ATS parse killers
Roughly 8-12% of the resumes a B2B SaaS recruiter opens fail to parse correctly in the ATS. These are the culprits, in descending order of frequency.
- Two-column templates. The sidebar (skills, contact info) gets merged with the main column in the wrong order. Your phone number ends up in the middle of your work history. Fix: one column.
- Tables. Tables look like a column layout, but when parsed they flatten into a bizarre order. Fix: bullet lists instead.
- Text inside images. Any "skills chart" graphic, logo with tagline, or infographic block is invisible to the parser. Fix: nothing important inside images.
- Fancy bullets. Unicode ornaments (❖ ➜ ◆ ✔) sometimes parse, sometimes insert literal character codes into the field. Fix: plain • or -.
- Headers and footers. Some ATS parsers skip page headers/footers entirely. Your contact info disappears. Fix: put contact info in the body, top of page 1.
- Non-standard section headings. "Professional Journey" instead of "Experience". "Knowledge Base" instead of "Skills". The parser uses the heading to segment fields. Fix: boring standard headings.
- PDFs exported from Canva or other design tools. These sometimes embed text as curves, making every character an image. Fix: save from Word or Google Docs as PDF, or export text-first.
What 'keyword coverage' actually measures — and why 100% is wrong
The tool extracts the top 25 keywords and bigrams from the job description, then checks which appear in your resume. A good target is 60-80% coverage. Below 50% means you're missing obvious skills the role asks for. Above 90% usually means you copy-pasted the JD into the skills section, which is a faster way to get rejected than missing keywords — it reads as a try-hard move and a recruiter will clock it in the six-second skim.
The trick is to add the missing keywords where they are true. If the JD asks for "SQL" and you have SQL, it should appear in at least one bullet describing an actual SQL project, not only in the skills list at the bottom. ATS search on keyword-in-skills is weaker than keyword-in-bullet; some recruiters explicitly filter for the latter.
Never add a keyword that isn't true. Hiring managers Google the keywords they care about in your first screen — if you said you know Kubernetes and cannot draw a pod-to-service diagram on the whiteboard, you will be rejected in 15 seconds and marked "do not pass go."
Verb and phrasing fixes that move the score the most
Weak phrases destroy otherwise good resumes. A recruiter has read fifteen variants of "responsible for managing a team" by the time they reach yours. Replace them with specific verbs that carry a concrete action.
- Instead of "responsible for the roadmap" → "owned the roadmap for 3 squads across 2 quarters; shipped 11 of 13 commitments on date."
- Instead of "helped redesign the onboarding" → "led the onboarding redesign that cut time-to-first-value from 14 days to 5.3."
- Instead of "worked on the billing system" → "rewrote the billing system; caught and resolved the double-charge bug recovering $180k in refund risk."
- Instead of "involved in pricing decisions" → "drove the pricing overhaul; NRR moved from 104% to 128% in 18 months."
- Instead of "managed stakeholders" → "ran a weekly exec review for 4 VPs; got the platform memo approved in 20 minutes."
The formula is: verb + object + number. If any bullet lacks a number, ask yourself what number you could credibly claim — a dollar figure, a percentage change, a count of people, a time-to-impact. If the honest answer is "there is no number," consider whether the bullet is worth keeping.
Resume length — the 350/750 rule
The scoring bands are 350-750 words for most roles. Under 350 and the resume reads as thin, even if the experience is real. Over 750 and every word you add is a word the recruiter doesn't read. Two-page resumes are defensible past 10 years of experience; three-page resumes are not defensible outside academia, law, and federal jobs.
A practical test: open the resume, scroll to the bottom, and ask whether the last third of the document contains anything that would change a hiring manager's mind. If the answer is no (your 2012 entry-level job, your college GPA at age 34, a list of technologies you haven't touched in five years), cut it. The one-page discipline for mid-career folks forces you to prioritize the work that matters.
The 6-second skim path
Hiring managers read resumes in a Z-pattern. Eye starts top-left (your name), scans right (your title), drops diagonally to the middle (most recent job title and employer), jumps to the right (dates), drops again to the first bullet, and finishes bottom-left. That's it. Six to eight seconds for the first pass; anything that doesn't register in those seconds will not be read on a deeper pass.
Optimize accordingly. Your most recent job is the most valuable real estate on the resume. The first bullet under that job must be a verb + number + result. The second bullet must be a different kind of proof (scope, mentoring, delivery speed). The third can be softer. Subsequent jobs degrade in detail — current role gets 5-6 bullets, prior role gets 3-4, two jobs back gets 2, earlier jobs get one line each.
A real before/after
Before (C-band resume).
Responsible for managing a team of engineers working on our SaaS platform. Helped design and implement various features. Worked with cross-functional teams including design and product. Involved in code reviews and mentorship. Experience with Python, JavaScript, React, Node.
After (A-band resume).
Led 6 engineers shipping the enterprise tier that moved ARR from $4M to $22M in 20 months. Cut onboarding from 14 days to 5.3 by rewriting the setup flow and deprecating 3 legacy permission models. Mentored 2 engineers, both promoted to senior within 18 months. Stack: Python, TypeScript, React, Postgres, gRPC. Reviewed ~140 PRs last quarter including cross-team.
Same person. Same job. Same skills. The difference is that every sentence in the "after" version has a number or a verb-led claim. The score moves from 58 to 87 on this tool, and the real-world interview rate moves similarly.
What to do next
Run the tool. Download the PDF report. Fix the top three items on it. Re-run. When you hit the 85+ band, stop tweaking and start applying. A good resume at 87 submitted to 40 roles beats a perfect resume at 95 submitted to 4.
Pair this with the Cover Letter Generator (the letter that opens the door) and the LinkedIn Headline Generator (the headline recruiters search for). If you're preparing for specific interviews, use the Interview Prep Planner to get your STAR stories ready. When an offer arrives, the Salary Negotiation Script Generator has the email and phone script you'll want to run.