GUIDE
Your CV gets ATS-filtered. Here's how to fix it without lying.
Most ATS-optimization advice tells you to lie. Here's the version that doesn't.
The "your CV must contain the exact keywords from the job description" advice is everywhere — and most of the time it's asking you to commit small-scale resume fraud. Here's what actually happens inside an ATS and how to optimise honestly.
What ATS systems actually do
The mythology is: the ATS reads your CV, scores it against the JD, and auto-rejects everything below a threshold. The reality is closer to: the ATS extracts the text, runs a keyword index, and surfaces the result to a human recruiter ranked by overlap. The human still reads — they just read in the order the ATS ranked.
So the question isn't "how do I beat the algorithm". It's "how do I make sure my CV ranks high enough that a human actually opens it". And the answer is the same as it's always been: use the same words the company is using, in the same context they're using them — but only where it's true for you.
The honest version of "use their keywords"
Three rules:
- Match terminology, not invent skills. If you have five years of Python and the JD says "5+ years Python (Django or FastAPI)", and you've actually used Django, say "Django" by name. Don't say it if you've only used FastAPI. Picking the company's preferred phrasing for a thing you've actually done is fair game; claiming you've used something you haven't is not.
- Match acronyms. ATS systems mostly don't know that "CI/CD" and "Continuous Integration / Continuous Deployment" mean the same thing. If the JD spells it one way, use that spelling at least once. Same goes for "K8s" vs "Kubernetes", "ML" vs "Machine Learning", "RAG" vs "Retrieval-Augmented Generation".
- Move the matched terms higher. Most ATS keyword extractors weight position. A skill listed in your Current Role bullet outranks the same skill in a five-years-ago bullet. If you genuinely used the JD's stack recently, lead with it.
The things you should NEVER do
Every "ATS hack" article eventually recommends one of these. Don't:
- White-text keyword stuffing. Hidden text in a foot-section that just lists every skill in the JD. Every modern ATS strips text formatting before indexing, so the keywords still get picked up — and the human recruiter sees them when they open the doc and instantly disqualifies you.
- Listing skills you haven't actually used. The first technical interviewer asks about one of them, you fold, the recruiter notes it, and you're out. This is the most common form of resume fraud and the easiest to detect.
- Inflating years of experience. "5 years of Rust" when you have one is going to surface in the technical screen the moment they ask a non-introductory question. It tanks your trust before you've made an argument.
The things that actually move the needle
None of these are hacks — they're just craft. Most CVs don't do them.
- Lead each role with the impact, not the duties. "Reduced p99 latency from 800ms to 90ms by rewriting the ingestion path in Go" lands harder than "Worked on the ingestion pipeline." Both are true; one says more.
- Quantify where you can. Engineers undersell their numbers because they assume the reader will see the scale from context. Recruiters don't have the context — give them the numbers explicitly. "Reduced costs", "increased reliability", "scaled the team" — all weak. "Reduced AWS bill by 38%", "lifted SLO from 99.5 to 99.95", "grew the team from 3 to 11" — all strong.
- One CV per role family, not one per role. The diminishing-returns curve on per-listing tailoring is steep. Maintain three CVs (e.g. Backend, ML platform, DevOps) tuned for the role families you'd consider, swap which one you send based on the JD, and let the cover letter handle the per-role specifics.
- Save the AI tailoring for the bullet wording, not the facts. A good AI tailor (including ours) edits how you describe what you did to match the JD's vocabulary. It should not — and ours won't — invent skills you don't have. If your tailoring tool happily writes "Experienced with Kafka" when your CV never mentioned Kafka, stop using it.
The shortcut, if you want one
Run your CV through RoleMiner's tailor on a specific JD and watch what it flags. The fabrication guard surfaces every term the AI introduced that isn't in your master CV — those are the things that other tools would have happily added without telling you. Edit or delete the flagged bullets, re-render (free), and you've got a CV that's keyword-matched to the JD without inventing skills. That workflow takes 4 minutes per role.