HomeResume Tailoring › Free ATS resume scanner (tool)

Free ATS resume scanner — paste yours, see what slips through

Paste your resume on the left, the job description on the right, and hit Scan. You’ll get an ATS match score, the top keywords the recruiter’s system is looking for that aren’t in your resume, and any formatting traps that commonly kill applications. The scan runs entirely in your browser — nothing is uploaded.

Run the scan

Runs in your browser. No upload, no signup, no history.

Why ATS keyword matching matters

The first reader of every application you send is not a human. It is an applicant tracking system that ingests your resume, extracts plain text, indexes the tokens, and stores the result as a structured record. When the recruiter opens their dashboard, they don’t scroll through PDFs. They run a keyword search across the database — “Python AND Kubernetes AND 5 years” — and look at the top thirty matches by relevance score. If your resume isn’t in those thirty, you don’t exist for that role.

This is why two equally-qualified candidates get wildly different response rates. The one whose resume mirrors the job description’s vocabulary ranks higher, gets opened, gets called. The one who wrote a beautifully crafted but loosely worded resume sits in result page seven where no recruiter clicks. The difference isn’t talent — it’s overlap. ATS systems reward overlap.

The same logic applies inside the ATS’s own match score. Most systems compute a percentage score between the job description and each application using a bag-of-words or simple embedding model. Higher score, higher placement in the recruiter’s default sort order. Even when recruiters don’t run keyword searches, the system has already pre-ranked your application based on overlap. A 40% match score is buried. An 80% match score sits at the top.

Keyword overlap is therefore not optional polish — it’s the price of entry. A scanner like the one above gives you a fast objective signal: how much does your current resume look like the JD to a machine, and what specific words are missing?

How this scanner works

The tool above runs four passes over the text you pasted.

  1. Normalize and tokenize. Both texts are lowercased, stripped of punctuation, and split into words. A long stopword list removes generic English noise (“the”, “and”, “experience”, “team”, “company”) so the keyword list reflects actual subject-matter terms, not boilerplate.
  2. Compute overlap. The scanner calculates a Jaccard-style similarity between the resume token set and the JD token set, then weights it. Real ATS systems use TF-IDF and embeddings; the scanner’s simpler measure correlates well enough for a fast pre-flight check.
  3. Find missing keywords. It ranks JD tokens by frequency and lists the top ten that don’t appear anywhere in your resume. These are the highest-value additions — words the recruiter is statistically most likely to search for.
  4. Scan for format warnings. Regex heuristics look for patterns associated with parse failures: tables (pipe characters between cells), page markers (“Page 1 of 2”), image references (.png/.jpg), explicit header/footer blocks, non-standard fonts (Comic Sans, Papyrus), emoji and decorative bullet characters, and runs of horizontal whitespace that suggest multi-column layouts.

The match score blends all four signals: 60% keyword overlap, 15% resume length adequacy (too short or too long both hurt), 15% key-section presence (Contact, Experience, Skills, Education), and 10% format cleanliness. The final number is rounded to 0–100.

The scanner is a screening tool, not a parser. It cannot tell you whether your PDF will actually parse — for that you need to run your PDF through a real text-extraction pipeline, which is what our main ATS scanner guide covers. But for keyword and structural hygiene, the scanner above is the fastest feedback loop you’ll find.

What to fix when you see each warning

“Page marker detected”

Most ATS strip page-number footers, but a surprising number include the marker mid-text, which fuses “Page 1 of 2” with the next line of your resume. Recruiters reviewing the parsed text see “Page 1 of 2 Senior Software Engineer” as a single sentence. The fix: confine the page marker to the footer only, or remove it entirely on a single-page resume.

“Pipe-separated rows look like a table”

You used | characters to make a markdown-style table, probably for skills. ATS parsers read in document order and fuse the table’s cells into one run-on line. Convert the table into a single-column bulleted list. You lose visual density but gain machine readability.

“Long runs of tab-separated content”

Same issue as pipe-tables, just expressed with tabs. The parser concatenates everything across columns. Re-flow into one column per line; use indentation only for sub-bullets, not for parallel content.

“Image references in resume text”

If your pasted text contains .png, .jpg, or [image] markers, parts of your resume are images. Skill bars, language proficiency rings, headshots, and any graphic with text inside it are invisible to the parser. Replace with plain text: “English (native), Spanish (B2)” reads cleanly; a progress bar does not.

“Non-standard font name detected”

The scanner spotted a decorative font name (Comic Sans, Papyrus, Impact, Brush Script). These often fail to embed correctly in the PDF, forcing the parser to fall back to OCR and introducing character errors. Stick to Inter, Helvetica, Arial, Calibri, Georgia, or Times.

“Content marked as header/footer”

Your contact information is sitting in the PDF header or footer. Many ATS parsers ignore those regions entirely, so your name, email, and phone get dropped. Always put contact details in the main body, in the top three lines.

“Emoji or decorative symbols”

Emoji and exotic Unicode characters are unstable across parsers — some are rendered as question marks, some are dropped, some are replaced with their long Unicode names. Use plain hyphens or standard round bullets. Skip the rocket ship.

“Non-standard bullet characters”

Diamonds, stars, and custom shapes occasionally render as empty boxes. The plain bullet is supported everywhere.

“Possible multi-column layout”

Several lines have unusual horizontal whitespace patterns, which often indicates a multi-column resume template. The parser will read your two columns as one fused string. Move to a single-column layout — you can keep visual hierarchy with indentation and bullet styles.

Take it further with the full Quest2Offer tailoring engine Vacancy analyzer pulls keywords, suggests bullet rewrites, and tracks every version of your tailored resume against every JD you apply to.
Open Vacancy Analyzer

How to read the score

A score below 40 means your resume currently overlaps poorly with the JD. The fix is rarely cosmetic — you need to rewrite your summary and skills section so it mirrors the JD’s vocabulary. Use the missing keywords list as your prompt: read each word, ask whether you’ve actually done that thing, and if yes, work it into a bullet in your most recent role.

A score between 40 and 65 is a typical untailored resume against a typical JD. You’re hitting the obvious overlap (programming languages, the role title) but missing the long tail of JD-specific terms. Folding three or four missing keywords into bullets usually pushes you into the 65–80 range.

Above 80, you’re well-tailored. At this point, focus on the format warnings — even a 95-score keyword match gets killed by an image-only PDF or a two-column layout that fuses sections. Eliminate parse risk and submit.

Hitting 100 isn’t the goal, and would actually be suspicious — it usually means you copy-pasted the JD into your resume. Recruiters notice. Aim for a high score that still sounds like you wrote it.

FAQ

Is the scanner really free, and is my data uploaded anywhere?

Yes, completely free. The scanner is plain JavaScript that runs in your browser — nothing is sent to our servers or stored anywhere. Close the tab and the data is gone. We don’t even log that you ran a scan.

How accurate is the match score versus a real ATS?

It correlates well enough for a pre-flight check but isn’t identical. Real ATS systems use TF-IDF or learned embeddings tuned to their own corpus. Our scanner uses simpler Jaccard-style overlap. In practice the rank ordering (which JDs your resume matches better) tends to agree; the absolute number can vary by 10–15 points up or down. Treat the score as a directional signal, not a guarantee.

The scanner says I’m missing “Kubernetes” but I’ve never used it. Should I add it anyway?

No. Never add keywords you can’t back up in an interview. The point of the missing-keyword list is to surface terms you have done but forgot to mention. If “Kubernetes” is in the JD and you’ve actually run pods in production somewhere, work it into a bullet. If you genuinely haven’t, you’re not the right candidate for that JD and faking it just buys you a rejection one round later.

Does the scanner check whether my actual PDF will parse?

No — that requires running your binary PDF through a text-extraction pipeline, which is a server-side operation. The scanner only sees the text you pasted, so it can only flag patterns visible in that text (pipe tables, page markers, image references you typed by hand). For a real PDF parse test, use the upload flow in the Vacancy Analyzer.

I scored 85 but I’m still getting rejected. Why?

Keyword matching gets you past the first screen and into the recruiter’s top results, but it doesn’t guarantee an interview. From there, the recruiter reads your bullets and decides whether your actual experience maps to what they need. A high score with weak bullets still gets rejected. Pair tailored keywords with strong, metric-backed accomplishments — and practice your behavioral and technical answers so the screening call goes somewhere.

Practice the next step Once your resume passes the scan, the recruiter call is the next gate. Run a free AI mock interview tailored to the exact JD you’re applying for.
Start a mock interview