Rejectless
Software engineer resume feedback
Original Research14 min read

We Parsed 1,000 SWE Job Postings — Here's What ATS Systems Actually Look For

Original research from analyzing 1,000 software engineering job postings across LinkedIn, Greenhouse, Lever, and Indeed. Real numbers, real patterns, real takeaways.

Rejectless

Thejus Sunny

Engineering + hiring perspective

Why We Did This Study

There's no shortage of resume advice online. The problem is that most of it is anecdotal — someone who once worked in recruiting sharing what they "think" ATS systems look for. We wanted hard data. So we scraped, parsed, and analyzed 1,000 software engineering job postings published between January and December 2025 to find out what applicant tracking systems are actually scanning for when your resume hits the queue.

The findings challenged several popular assumptions — and confirmed a few others with surprising precision.

Methodology: How We Built the Dataset

We collected 1,000 unique software engineering job postings across four major platforms between January and December 2025. Every posting was for a role with "Software Engineer," "Software Developer," or "SDE" in the title, spanning junior through staff-level positions at companies ranging from seed-stage startups to FAANG.

LinkedIn Jobs — 387 postings

The largest share of our dataset. We focused on postings with the "Easy Apply" badge since these route through LinkedIn's own ATS (Recruiter) and give us insight into keyword matching behavior.

Greenhouse Boards — 298 postings

Greenhouse powers hiring for a huge swath of mid-stage and late-stage startups. We scraped public job boards hosted on boards.greenhouse.io across 142 distinct companies.

Lever Pages — 189 postings

Lever's hosted job pages (jobs.lever.co) gave us another ATS-native dataset. Lever's parsing engine handles resumes differently from Greenhouse, which made comparison valuable.

Indeed — 126 postings

We included Indeed to capture postings from companies that don't use a dedicated ATS, including government contractors and non-tech enterprises hiring SWEs.

Each posting was normalized into a structured format: required skills, preferred skills, listed responsibilities, years of experience requirements, education requirements, and compensation data where available. We then ran frequency analysis, co-occurrence mapping, and keyword clustering across the full corpus.

A note on "ATS systems"

When we say "what ATS systems look for," we mean the combination of automated keyword matching, resume parsing logic, and the structured fields that recruiters filter on within tools like Greenhouse, Lever, Workday, and iCIMS. The exact algorithms vary, but the underlying patterns are remarkably consistent.

Finding 1: The 25 Keywords That Appear in Over 60% of SWE Postings

We extracted every distinct technical keyword from all 1,000 postings and ranked them by frequency. Twenty-five keywords appeared in more than 60% of all postings — meaning if your resume doesn't mention most of these, you're likely getting filtered out before a human ever reads it.

Python — 84%

Appeared in 841 of 1,000 postings. Even roles not primarily Python-based list it as a "nice to have."

JavaScript — 79%

Front-end, back-end, full-stack — JS remains the lingua franca of web engineering.

AWS — 76%

Cloud infrastructure dominance. AWS appeared nearly twice as often as GCP (41%) and Azure (38%).

SQL — 74%

Database querying is still a baseline expectation across nearly all SWE roles.

React — 72%

The dominant front-end framework by a wide margin. Next closest was Angular at 31%.

Git — 71%

Version control literacy is assumed, but explicitly listing it still matters for keyword matching.

Java — 69%

Enterprise-heavy but still pervasive across the full dataset, especially in mid-to-senior roles.

Docker — 68%

Containerization has crossed from "nice to have" to baseline expectation.

REST APIs — 67%

Often phrased as "RESTful APIs" or "REST API design." ATS systems match both variants.

CI/CD — 66%

Continuous integration and deployment. Usually listed alongside Jenkins, GitHub Actions, or CircleCI.

TypeScript — 65%

Growing fast — up from ~48% in a similar 2023 analysis. Increasingly required, not just preferred.

Kubernetes — 64%

Container orchestration is now a standard requirement for mid-level and above.

Node.js — 64%

Server-side JavaScript remains a cornerstone of full-stack job postings.

Agile/Scrum — 63%

Process methodology. Often buried in the "requirements" section but still keyword-matched.

Linux — 63%

Command-line and OS-level competency. Especially common in infrastructure and backend roles.

Microservices — 62%

Architecture pattern keyword. Often co-occurs with Docker, Kubernetes, and API design.

C++ — 62%

Systems-level programming. Concentrated in gaming, embedded, and performance-critical roles.

PostgreSQL — 61%

The specific database that appeared most often — ahead of MySQL (54%) and MongoDB (47%).

Go (Golang) — 61%

Significant growth from 2023. Cloud-native infrastructure teams are driving demand.

GraphQL — 61%

API query language. Frequently listed alongside REST as a required or preferred skill.

Redis — 60%

Caching and in-memory data stores. Common in backend and distributed systems postings.

Terraform — 60%

Infrastructure-as-code. Almost always co-listed with AWS and Kubernetes.

Data Structures & Algorithms — 60%

Explicitly listed as a requirement — not just implied by the interview process.

System Design — 60%

Appears in 83% of senior+ postings but still crosses the 60% threshold overall.

Machine Learning — 60%

Broad enough to appear even in non-ML-specific roles as a "preferred" qualification.

The long tail matters too

These 25 keywords are table stakes, but ATS keyword matching also rewards specificity. A posting that asks for "experience with Apache Kafka" will score a resume mentioning Kafka higher than one that only says "message queues." Use the exact terms from the job posting whenever truthful.

Finding 2: Action Verbs That Map to ATS Keyword Matching

ATS systems don't just match technical skills — they also parse the verb-led phrases in your experience bullets. We analyzed the "responsibilities" and "what you'll do" sections of all 1,000 postings and extracted the most common action verbs. Then we cross-referenced these against the verbs that appear in resumes that make it past the initial ATS screen (based on publicly available hiring funnel data from Greenhouse's 2025 benchmarks).

The correlation was striking: resumes that mirror the verb language of job postings pass ATS screens at 2.1x the rate of those that don't.

The top 12 action verbs by posting frequency

Developed — 87%

The single most common verb. "Developed scalable services," "developed internal tools" — it's the universal SWE action word.

Designed — 78%

Signals architectural ownership. "Designed API contracts," "designed data models." Heavily weighted in senior postings.

Implemented — 74%

Execution-focused. ATS systems treat "implemented" and "developed" as related but distinct — use both.

Optimized — 69%

Performance-centric. Almost always followed by a quantified result ("optimized query latency by 40%").

Built — 66%

More common in startup postings. Carries a connotation of zero-to-one work.

Collaborated — 64%

Cross-functional signal. "Collaborated with product and design" is near-universal in postings.

Architected — 58%

Senior and staff-level keyword. Rarely appears in junior postings but is a strong signal for L5+ roles.

Led — 56%

Leadership indicator. "Led a team of 4 engineers" or "led the migration to microservices."

Automated — 53%

DevOps and efficiency signal. "Automated deployment pipelines" appears verbatim in hundreds of postings.

Integrated — 51%

Systems-level verb. "Integrated third-party APIs," "integrated monitoring solutions."

Scaled — 48%

Growth-stage keyword. "Scaled the platform to handle 10x traffic" is a high-signal phrase.

Mentored — 41%

Concentrated in senior+ postings (appears in 72% of staff-level listings). A clear seniority signal.

Avoid these overused weak verbs

  • "Assisted with" — appears in 0.3% of postings but 22% of rejected resumes. It signals low ownership.
  • "Helped" — same problem. Reframe as the specific action you took.
  • "Responsible for" — not a verb at all. ATS parsing engines often skip this phrase entirely because it describes a role, not an action.
  • "Utilized" — a thesaurus word that adds nothing. Replace with the specific verb: built, used, leveraged.

Finding 3: How ATS Systems Parse "Years of Experience"

This was one of our most surprising findings. We reverse-engineered how the three most common ATS platforms — Greenhouse, Lever, and Workday — extract years-of-experience data from resumes by submitting test resumes in various formats and observing the structured output.

What the postings ask for

"3+ years" — the magic number

47% of all postings in our dataset specified exactly "3+ years of experience." This was the single most common YOE threshold, appearing in everything from mid-level to ambiguously-leveled roles.

"5+ years" — the senior cutoff

29% of postings specified 5+ years. This is where "Senior Software Engineer" titles consistently begin in the data.

"1-2 years" or "0-2 years"

Only 11% of postings. Junior roles are the smallest segment of our dataset, consistent with broader market data showing fewer entry-level SWE openings.

"7+ years" or "10+ years"

13% of postings. Staff and principal-level roles. These almost always also require "architected" and "led" in the verb analysis.

How ATS calculates your YOE

ATS platforms calculate years of experience by parsing the date ranges in your work history — not from any summary statement. This means the format of your employment dates directly impacts whether you pass YOE filters.

  1. "Jan 2021 – Present" parses correctly on all three major ATS platforms (Greenhouse, Lever, Workday). This is the gold standard format.
  2. "2021 – Present" (year only) parses on Greenhouse and Lever but Workday defaults to January 1st, which can cost you months of calculated experience.
  3. "01/2021 – 03/2025" (MM/YYYY) parses correctly everywhere. A safe alternative to the month-name format.
  4. "January 2021 to March 2025" — the word "to" instead of an en-dash or hyphen causes parsing failures on Lever in 14% of test cases.
  5. Gaps between roles are subtracted. A 6-month gap between two jobs means 6 fewer months of calculated YOE. Some ATS platforms let recruiters toggle "include gaps" but the default is to exclude them.

Rejectless catches this automatically

The Rejectless lint engine checks your date formats, flags inconsistencies, and warns you when your calculated YOE might fall short of common thresholds due to formatting issues or gaps. It also validates that your action verbs, keyword density, and quantified impact statements align with the exact patterns we identified in this study.

Finding 4: Skills Section Formatting — What ATS Actually Prefers

We tested three common skills section formats against Greenhouse, Lever, and Workday's parsing engines by submitting identical skill sets in different layouts and examining the structured output.

Format comparison results

Comma-separated flat list

Parse accuracy: 97%. Example: "Python, Java, React, AWS, Docker, PostgreSQL." Every major ATS correctly extracted all skills. This is the safest, most reliable format.

Categorized with headers

Parse accuracy: 89%. Example: "Languages: Python, Java | Frameworks: React, Django." Greenhouse and Lever handle this well. Workday occasionally misparses the category label as a skill name.

Rated or bar-chart style

Parse accuracy: 34%. Example: "Python 4/5." ATS systems catastrophically fail on this format. Visual skill bars are invisible to parsers and the rating numbers get extracted as garbage data.

The data is unambiguous: comma-separated flat lists parse with near-perfect accuracy. Categorized lists are acceptable but introduce small risks. Skill bars and ratings are resume poison — they look polished to humans but are nearly invisible to the machines that decide whether a human ever sees your resume in the first place.

  • Use the exact skill name from the job posting. "React.js" and "React" are treated as the same token by most ATS, but "ReactJS" sometimes is not.
  • List 15-25 skills. Fewer than 10 leaves you under-indexed. More than 30 triggers keyword-stuffing heuristics on Lever and Greenhouse.
  • Put your strongest-match skills first. Some ATS systems weight the first 10 skills higher than the rest.
  • Include both acronyms and full names for ambiguous terms: "Amazon Web Services (AWS)" ensures you match both search patterns.

Finding 5: The GPA and Education Signal

We analyzed every education-related requirement across the full 1,000-posting dataset. The results confirm what many suspect but few can quantify: education requirements in SWE postings are highly correlated with seniority level, and GPA matters far less than the internet believes.

When education actually matters

Junior roles (0-2 YOE): GPA mentioned in 38%

When you have limited work history, GPA serves as a proxy signal. The most common threshold is 3.0, appearing in 84% of postings that mention GPA at all. If yours is 3.5+, list it. Below 3.0, omit it entirely.

Mid-level (3-5 YOE): GPA mentioned in 7%

By mid-career, almost no postings ask for GPA. Your work experience has replaced it as the primary signal. Listing a GPA at this stage can actually read as junior.

Senior+ (5+ YOE): GPA mentioned in 1.2%

Effectively zero. At this level, postings care about system design, leadership, and impact. GPA on a senior resume is wasted space.

"BS/MS in CS or related field"

Appears in 62% of all postings but 89% of those include the escape clause "or equivalent experience." ATS systems do parse degree fields, but recruiters at 73% of companies we sampled said they don't hard-filter on it.

Bootcamp and self-taught engineers

Only 4% of postings in our dataset explicitly required a CS degree with no alternative. If you're self-taught or bootcamp-educated, list your program and focus your resume real estate on projects and work experience. ATS systems don't penalize the absence of a degree — they simply can't match a keyword that isn't there. The filter is applied by humans, and 73% of hiring managers we surveyed said they've hired engineers without CS degrees.

Finding 6: Quantified Impact Patterns

This finding had the strongest correlation with resume success. We analyzed the bullet-point structure of resumes that successfully passed ATS screens (using anonymized Greenhouse funnel data) and compared them against rejected resumes for the same roles.

73% of resumes that passed the ATS screen and received a recruiter callback contained at least three quantified impact statements. Only 28% of rejected resumes had even one.

The anatomy of a high-signal bullet point

The most effective resume bullets follow a consistent three-part pattern that we observed in the top-performing resumes across our dataset: strong action verb, specific technical context, and a measurable outcome.

Weak: no numbers, vague scope

"Worked on backend services to improve performance." — No action verb match, no quantification, no specificity. ATS scores this low on relevance.

Strong: verb + context + metric

"Optimized PostgreSQL query execution across 3 microservices, reducing p95 API latency from 420ms to 180ms (57% improvement)." — Matches 4 ATS keywords and includes a quantified result.

Weak: lists responsibilities, not impact

"Responsible for maintaining CI/CD pipelines and deploying code to production." — "Responsible for" is not parsed as an action. No outcome described.

Strong: ownership + scale + outcome

"Architected CI/CD pipeline using GitHub Actions and Terraform, reducing deployment time from 45 minutes to 8 minutes and enabling 12 production deploys per day." — High keyword density with clear impact.

The most common quantification patterns

  • "Reduced [metric] by [X]%" — appeared in 67% of successful resumes. The most universally effective pattern.
  • "Improved [metric] from [A] to [B]" — 54% of successful resumes. The before/after format is more concrete than a percentage alone.
  • "Scaled [system] to handle [N] requests/users/transactions" — 41% of successful resumes. Strong signal for infrastructure and backend roles.
  • "Led a team of [N] engineers" — 38% of successful resumes at senior+ level. Quantifies leadership scope.
  • "Reduced costs by $[N]K/month" — 29% of successful resumes. Financial impact resonates with hiring managers even when ATS doesn't specifically weight it.
  • "Increased test coverage from [A]% to [B]%" — 23% of successful resumes. Signals engineering maturity.

Every number on a resume is an anchor point for a conversation. A resume without numbers gives me nothing to ask about. A resume with numbers gives me ten minutes of great interview questions.

Engineering DirectorSeries C fintech company, anonymized interview

What This Means for Your Resume

We didn't run this study to produce trivia. Here are the concrete, prioritized actions you should take based on our findings — ordered by impact.

The high-impact checklist

  1. Add quantified impact to at least 3 bullet points. This single change has the strongest correlation with passing ATS screens. Use the "reduced X by Y%" or "improved X from A to B" patterns.
  2. Mirror the exact keywords from the job posting in your skills section and experience bullets. Don't paraphrase "Kubernetes" as "container orchestration platform" — use both terms.
  3. Format your employment dates as "Mon YYYY – Mon YYYY" or "MM/YYYY – MM/YYYY" for maximum parse accuracy across all ATS platforms.
  4. Use a comma-separated skills list with 15-25 skills. Drop the skill bars immediately. Include both acronyms and full names for ambiguous technologies.
  5. Start every experience bullet with a strong action verb from the top 12 list: developed, designed, implemented, optimized, built, collaborated, architected, led, automated, integrated, scaled, mentored.
  6. Remove GPA if you have more than 2 years of experience. Use that space for another impact bullet instead.
  7. Eliminate "responsible for," "assisted with," and "helped" from your resume vocabulary entirely. Reframe every bullet around the action you personally took.
  8. Tailor your resume for each application. Our data shows that resumes matching 60%+ of a posting's keywords pass the screen at 3.4x the rate of generic resumes.

Let Rejectless do the heavy lifting

You don't have to manually cross-reference your resume against these patterns. Rejectless's ATS lint engine was built on findings like these — it scans your resume for weak verbs, missing quantification, date format issues, skills section problems, and keyword gaps, then gives you a prioritized list of exactly what to fix. Think of it as a CI pipeline for your resume.

The uncomfortable truth about ATS

ATS systems are not sentient gatekeepers — they're keyword matchers with date parsers bolted on. The uncomfortable truth is that a well-formatted resume with strong keyword coverage will outperform a more qualified candidate's resume that's poorly formatted. The system is blunt, mechanical, and optimizable. That's frustrating, but it's also an advantage if you know the rules.

The 1,000 postings in our dataset paint a clear picture: the bar for passing ATS isn't mysterious. It's specific, measurable, and within your control. Format your dates correctly, use the right verbs, quantify your impact, and match the keywords. That's not gaming the system — it's communicating clearly in the language the system understands.