CurriculoATS CurriculoATS

How to Stop Keyword-Stuffing Candidates From Gaming Your ATS

Ask any senior engineer who has applied to more than five jobs in the past year and they will admit it. Hidden white text at the bottom of the resume listing every framework they have ever heard of. Skills section duplicated three times with slight variations. Bullet points re-engineered to mirror the job description token-for-token. None of this is fringe behavior. It is the rational response to a screening layer that rewards keyword density over actual ability.

The problem is not the candidates. The candidates are doing what the ATS taught them to do. The problem is that almost every ATS still ranks resumes by token presence, and the rank is what decides who gets read.

Why keyword stuffing works on legacy ATS

Every legacy applicant tracking system on the market today uses some form of token-level matching as its ranking layer. Even when the marketing says “AI,” the implementation is usually one of three things: Boolean keyword extraction (does Python appear three or more times), TF-IDF weighted matching (rare terms count more than common ones), or semantic similarity using sentence embeddings (resumes whose vectors are close to the JD vector rank higher). All three have the same structural vulnerability: they are deterministic. A candidate who knows the rules can reliably produce the output they want, regardless of actual fit. Jobscan’s research on keyword stuffing documents how widespread the practice is, and the Harvard Business School study on hidden workers estimated 27 million qualified Americans get rejected by automated screening for reasons unrelated to ability. Both numbers describe the same broken layer.

Keyword stuffing works because the model is reading tokens, and the candidate is supplying tokens. The two sides are perfectly matched. The candidate wins.

The four ways candidates game the system

If you have not actively gone looking for these patterns in resumes, you have probably been letting them through. They are common, and they are easy to spot once you know what to look for.

  • Hidden white text. A block of keywords typed in white at the bottom of the page, invisible to a human reader but fully visible to a parser. Often runs to fifty or sixty terms. The parser rewards every one of them.
  • Repeated skills sections. The skills section appears two or three times with minor variations. Each appearance counts as a fresh signal in a TF-IDF model. Candidates have figured out that two skills sections beat one.
  • JD copy-paste in the summary. The candidate copies the first paragraph of the JD verbatim into the resume summary. Sentence-embedding models score this candidate as a near-perfect match because the summary is literally the JD. Actual experience is irrelevant to the score.
  • Bullet rewriting to match keywords. A real bullet (“Built a payments service”) gets rewritten to mirror the JD (“Architected a Python-based microservices payments platform on AWS using Kubernetes and Postgres”). Same work, more tokens, higher score.

None of these is fraud, exactly. The candidate did do the work. They just learned the rules and adapted. The ATS rewards the adaptation, the strong-but-honest candidate gets pushed down the list, and the team interviews the wrong people.

Why “smarter keyword matching” is not the fix

Vendors who notice the keyword-stuffing problem usually try to fix it with a smarter keyword model. They add stop-word filters, semantic similarity, BERT-based matching, GPT-4 summaries. The problem is that all of those models are still reading tokens. They are just reading tokens more cleverly. The structural vulnerability is the same. A candidate who knows the rules can still reliably produce the output they want.

You can verify this in any demo. Take the JD for the role, paste it into a candidate summary, and watch the score jump. Every keyword-based system, no matter how sophisticated the embeddings, scores this candidate higher. The model has no concept of whether the experience is real. It only has a concept of whether the text is similar.

The fix is not a smarter keyword model. The fix is to stop ranking by keywords altogether. The ranker has to read for outcomes, things the candidate would have to invent fictional accomplishments to fake, not for tokens.

What we learned at Amazon about adversarial inputs

Before CurriculoATS, our founder Dev spent years at Amazon working on search and recommendations. Adversarial inputs are an old problem in those systems. Sellers learn how to game product titles to rank higher. Reviewers leave fake reviews to push competitors down. The platform’s job is not to play whack-a-mole with each new gaming pattern; it is to build a ranker that does not respond to surface manipulation in the first place.

The pattern that worked at Amazon was to rank on signals the seller could not directly fabricate. Real purchase data. Real return rates. Verified review patterns. The seller can write whatever they want in the product title; the ranker does not care, because the ranker is reading something else.

Hiring works the same way. The candidate can write whatever keywords they want; the ranker should be reading something else. Specifically, CurriculoATS reads resumes for four categories of outcome the candidate cannot fabricate without committing fraud: revenue (deals closed, ARR, savings produced), teams (people managed, orgs scaled), systems (built, shipped, scaled), and problems (solved, complex, novel). The model produces a 0–100 composite score with a written reasoning paragraph that cites the specific outcomes it found. A keyword stuffer scores low because there are no outcomes to find. An honest senior engineer scores high because the outcomes are real. See the impact scoring page for the full mechanism.

The data we see on stuffing rates by role and seniority

Across CurriculoATS-screened resumes in 2025 and early 2026, keyword-stuffing rates vary sharply by role and seniority. Senior engineers and senior product managers stuff most often, because they have applied to the most jobs and learned the patterns. Entry-level candidates stuff least, partly because career coaches haven’t trained them yet and partly because their resumes are short enough that stuffing is visible. The pattern is counterintuitive for founders who assume stronger candidates write cleaner resumes. The stuffing rate for senior backend engineering candidates we sampled was around 38%, with the most common pattern being a duplicated skills section combined with JD-mirrored bullets. For senior PMs, the rate was about 31%, with the dominant pattern being a copy-pasted JD-style summary at the top. Sales roles stuff differently: the resumes look cleaner but quota numbers are inflated, which an outcome-based ranker reads as a low-confidence revenue signal because the inflation pattern (round numbers, no time period, no comparison to peers) is detectable. The lesson is operationally specific: legacy keyword screening systematically promotes the most-applied candidates rather than the most-qualified ones, and the rate of mismatch is highest in exactly the seniority bands where founders most need accurate signal. Outcome-based ranking inverts the curve, because the harder a candidate has worked to game keywords, the less the keyword-tier behavior matters to the score.

What a founder does this week

If you suspect keyword stuffing has been polluting your shortlist, three quick checks will tell you.

  1. Open the top-five resumes in your current ATS and select all the text. If hidden white text shows up when you highlight the page, the candidate is stuffing and the ATS is rewarding it. This is the cleanest signal.
  2. Read the resume’s experience section against the skills section. If the skills list claims fifteen technologies but the experience section only mentions four of them, the rest are stuffing.
  3. Check whether the resume summary mirrors the JD too closely. A summary that uses the JD’s exact phrasing is either copy-paste or coincidence; the former is far more common.

Once you have run the audit, the structural fix is to switch the screening layer to outcome-based ranking. Continuing to clean up keyword stuffing manually does not scale, and it is a poor use of a founder’s attention.

Founder questions

Is keyword stuffing actually that common?

Yes, more than most founders realize. Anyone who has applied to ten or more jobs has either tried it or been advised to. Career coaches teach it. Resume builders bake it in by default. The stuffing rate on senior engineering candidates is high because those candidates have applied to enough roles to know the game.

Will an outcome-based ATS still let me find candidates with specific skills?

Yes, but the model evaluates whether the candidate did the work, not whether they typed the word. A backend engineer who built a real-time data pipeline using Kafka shows up in the ranking for “streaming experience” whether the bullet says Kafka, real-time pipeline, or event streaming. The keyword model would miss the synonym; the outcome model reads the work itself.

Does outcome-based ranking penalize career-changers or non-traditional candidates?

It tends to help them, actually. Keyword filters reject them because their resumes do not use the right vocabulary. Outcome models read the actual accomplishments and rank them on substance. The HBS hidden-workers research suggests this is exactly the population legacy ATS systematically excludes.

What about compliance? Does AI screening violate hiring law?

Used correctly, no. NYC Local Law 144 requires bias audits and candidate notice for automated employment decision tools. The EU AI Act lists hiring AI as high-risk under Annex III, with obligations enforceable from August 2026. Both regimes favor systems with documented, explainable reasoning, which is what a model that produces written paragraphs supports and a black-box keyword filter does not.

What about candidates who stuff keywords but actually did the work?

They still rank well on outcome-based screening, because the work is in the resume. The stuffing is noise rather than fraud. The model reads the bullets that describe the actual outcomes (“shipped a real-time fraud pipeline that saved $1.2M annually”) and ranks the candidate on those, ignoring the keyword dump at the bottom. The honest senior engineer who happens to have stuffed a few keywords from career-coach advice is not penalized, which is the correct outcome. Stuffing only hurts candidates who don’t have the underlying outcomes to back it up.

Can I see this in action before I commit?

Yes. The free Starter tier of CurriculoATS handles one active job with unlimited team members. Run a real role through it and compare the top ten ranked candidates against your current ATS’s top ten. The overlap (or lack of it) is the most useful demo you can do.

What to do next

If keyword stuffing is making it through to your shortlist, the fix is structural and the structural fix is on the screening layer. Read our AI resume screening page for the mechanics of outcome-based ranking, then check compare for how CurriculoATS stacks up against Greenhouse, Lever, Workable, and Ashby on the screening layer specifically. The Starter tier is free and is enough to run the comparison on a real role.

Back to ATS Blog