Correction, 17 October 2026. Earlier versions of this article pointed to "recruiter accuracy data" from a test we have since withdrawn, said recent Workday and Greenhouse releases penalize keyword density above about 1.5%, repeated the claim that 75% of resumes are filtered before any human review, and gave unsourced shares of job descriptions that mention particular keywords. We have no records or sources behind those, so we have removed them. The article's advice is unchanged and now rests on how keyword search and matching work.
Open any resume-writing guide and you'll find the same advice: start every bullet with a strong action verb. Spearheaded, drove, championed, leveraged. The problem with this advice is that it's aimed at human recruiters, not the ATS search that decides whether your resume comes up when a recruiter looks for candidates. ATS parsers don't care that you "spearheaded" something. They care whether the word Python, MEDDIC, ASC 606, or Workday appears in your file. This post is about the difference, and why the action-verb advice that's been recycled since 2009 is actively hurting your match rate in 2026.
The two kinds of "keywords" people confuse
When career-advice sites say "use keywords on your resume," they almost always mean one of two completely different things:
- Action verbs, words like spearheaded, drove, championed, leveraged, orchestrated, delivered. These are stylistic choices that affect how a human reads your bullet. They are not what an ATS scores you on.
- Structural keywords, words like Python, Kubernetes, MEDDIC, ASC 606, Workday, FP&A, Sukuk, SAP SuccessFactors. These are specific named entities that an ATS parser explicitly tries to match against the job description.
The two are not interchangeable. A recruiter searching for candidates types the skill, not the verb. Many searches and match checks look for the literal term. If the JD says "Python" and your resume says "developed software in modern programming languages," a search for "Python" does not find you. Some newer systems try to match related terms, but you can't count on it, so use the exact word. (This is also why the format of your skills section matters, see how to list skills the ATS can read.)
What ATS parsers actually do with your resume
If you've read our methodology page, you know a parser first extracts the text and then works out the structure: name, sections, dates. Keyword matching comes after that, and it is where action verbs and structural keywords diverge.
ATS vendors don't publish their matching logic, and many systems mainly give recruiters a search box rather than an automatic score. Where keyword matching is used, whether a recruiter's search or a match-score feature, it generally works like this:
- Parse the JD into a list of required and preferred skills/tools/credentials.
- Parse the candidate's resume into a flat token stream.
- Score the match between the two using TF-IDF, exact token matching, or (increasingly) a small embedding model.
"Spearheaded" appears in roughly zero job descriptions. Neither does "championed," "orchestrated," "leveraged," or any of the other 50 most-recycled action verbs. They are absent from the JD-side of the match entirely. So no matter how strong they make your bullet read to a human, they contribute essentially nothing to your ATS match score. Worth noting in 2026: those same verbs are common in AI-written resumes, so a page full of them can also read as machine-written to a human. More on that in does a ChatGPT resume trigger ATS flags?
"Python," on the other hand, appears in a large share of software-engineer JDs. "MEDDIC" turns up in many enterprise sales JDs. "ASC 606" is common in senior revenue-accounting JDs. These are the terms a recruiter searches for and a match check compares against.
The "ATS rejects most resumes" idea, reframed
It is widely reported that 99% of Fortune 500 employers use an ATS. That often gets paired with an unsourced claim that most resumes are rejected before any human sees them, and read as "the ATS is hostile." It isn't; we explain where that idea comes from in ATS resume myths debunked. Most of the time the ATS is a database that recruiters search and filter. Resumes that don't contain the searched terms simply don't come up. And those are usually the ones written entirely in action verbs with no structural keywords.
Picture two candidates applying for the same Senior Software Engineer role:
| Candidate A (action-verb resume) | Candidate B (keyword-aware resume) |
|---|---|
| "Spearheaded the development of a scalable platform serving millions of users" | "Built a Python / Django microservices platform on AWS (EKS, RDS PostgreSQL) serving 14M users/day with 99.95% uptime" |
To a human, Candidate A's bullet might read as slightly more polished. To a keyword search, Candidate B's bullet contains Python, Django, microservices, AWS, EKS, RDS, PostgreSQL, uptime, eight named tokens that almost certainly appear in the JD. Candidate A's bullet contains spearheaded, scalable, platform, users, of which "scalable" and "platform" might match, but the rest are stylistic.
Candidate B comes up when a recruiter searches for those tools. Candidate A doesn't.
Why action verbs still matter (just not for ATS)
To be clear: action verbs aren't useless. They affect how the human recruiter reads your bullet once your resume is in front of them. A recruiter scanning 50 resumes that all matched their search will lean toward bullets that read with energy and ownership.
The mistake is treating action verbs as the keyword strategy itself. They're the second layer of polish, applied AFTER you've nailed the structural keywords. If you only have action verbs and no structural tokens, you may never get to the second layer, because your resume doesn't come up when the recruiter searches.
What "structural keywords" look like by profession
Structural keywords are profession-specific. Generic resume advice doesn't work because the keywords for a Software Engineer are completely different from the keywords for a Financial Analyst or a Customer Success Manager. We've published a sourced keyword database with profession-tiered lists for common roles, you can browse the full set at /keywords. A few examples:
- Software Engineer: Python, Kubernetes, microservices, distributed systems, scalability, observability, CI/CD pipelines, system design. Tiered by seniority, what a junior engineer should surface is not what a Staff engineer should surface.
- Finance Professional: FP&A, three-statement model, DCF, variance analysis, ASC 606, ASC 842, IFRS 15, SOX compliance, NetSuite, Anaplan, Hyperion.
- Sales (AE / Enterprise): Pipeline coverage, MEDDIC, MEDDPICC, Challenger, ACV, multi-threading, Salesforce, Outreach.io, Gong, win rate, NRR.
- Data Scientist: pandas, scikit-learn, PyTorch, TensorFlow, A/B testing, causal inference, MLflow, feature engineering, model deployment, MLOps.
- Banking Analyst (UAE / India): Sukuk, Shariah-compliant structuring, DIFC, ADGM, SEBI, RBI, QIP, FEMA, three-statement model, LBO model.
Notice the pattern: every keyword is a specific named entity. None are generic action verbs. None are descriptive adjectives. They are tokens an ATS parser can match exactly against a JD.
The keyword-stuffing trap (don't do this)
If structural keywords are what passes the filter, the temptation is to stuff your resume with every possible keyword. This backfires. Whatever a given system does with it, the recruiter who reads your resume will notice when:
- Skills sections list 30+ technologies you couldn't reasonably have used in depth.
- Keywords appear in white text on a white background (yes, this is still tried; parsers strip colour, so the hidden text shows up in the plain-text view a recruiter can see).
- The same keyword appears 8+ times in a single resume.
- Keywords are loaded into a "Skills" block but never appear in actual experience bullets.
The fix isn't to stuff. The fix is to surface the 8–15 keywords that genuinely describe your work, both in a dedicated Skills section AND naturally woven into your experience bullets. Depth beats breadth.
How to actually rewrite a bullet for keyword density without losing voice
Take a typical action-verb-heavy bullet:
"Spearheaded data-driven initiatives that drove customer engagement and improved retention."
Five action verbs, zero structural keywords. Now rewrite with the same length but real tokens:
"Built customer-segmentation model in Python (scikit-learn) and shipped A/B tested onboarding flow via Optimizely; lifted D30 retention from 22% to 34% across 180K monthly actives."
Same action ("built" instead of "spearheaded"), but now customer-segmentation, Python, scikit-learn, A/B test, Optimizely, D30 retention, monthly actives, seven structural keywords. The action is implied by "built" and "shipped"; the keywords are the work.
This is the discipline. Keywords first, voice second. Most resume guides have it backward.
What to do next
- Read your target JD twice. Highlight every specific named entity (tool, methodology, certification, framework, technology, regulation). These are your keyword targets.
- Cross-reference our profession keyword database for your role + seniority tier. Identify any keywords from the JD that you genuinely have but haven't surfaced on your resume.
- Run your resume through our free scanner to see which keywords actually extract from your current file. Many "modern" resume templates put keyword lists in sidebars that a parser can read out of order, separately from your experience.
- Rewrite 3–5 bullets to surface the keywords that genuinely describe your work. Don't add keywords for things you didn't do, that's the start of the stuffing trap.
The action-verb advice you've been given since 2009 isn't wrong, just incomplete. Use action verbs as the polish layer. Use structural keywords as the structural layer. A keyword search only ever matches the structural layer, so make sure that one's right first.
→ Run a free ATS scan and see which keywords actually parse from your current resume.
