I Analyzed 200 Rejection Emails and Built an AI That Fixes Resumes

javascript dev.to

Last year I was laid off. Like a lot of people, I sent out hundreds of applications. Unlike most people, I saved every rejection email and tried to figure out what was actually happening.

The result was a rabbit hole that ended with me building a resume analyzer. Here's what I found.

The Real Problem Isn't Your Resume

After reading 200+ rejections (yes, I kept a spreadsheet), I noticed a pattern. The companies that actually interviewed me didn't have better resumes — they had resumes that matched their specific job description better.

Most resume advice is generic: "use action verbs," "keep it to one page," "quantify your impact." That advice is fine, but it misses the point. The goal isn't a good resume. The goal is a resume that passes the specific filter of a specific job at a specific company.

How the Analyzer Works

The approach is simple: compare a resume against a job description and measure the overlap across four dimensions:

function scoreResume(resumeText, jobDescription) {
  const keywords = extractKeywords(jobDescription)
  const matched = keywords.filter(k =>
    resumeText.toLowerCase().includes(k.toLowerCase())
  )
  return {
    matchRate: (matched.length / keywords.length) * 100,
    missingKeywords: keywords.filter(k =>
      !resumeText.toLowerCase().includes(k.toLowerCase())
    ),
    keywordDensity: keywords.length / resumeText.split('').length,
  }
}
Enter fullscreen mode Exit fullscreen mode

The keyword extraction strips common words and pulls out the meaningful terms: technologies, certifications, industry-specific phrases. If the JD mentions "Kubernetes" three times and your resume doesn't mention it once, that's a problem — regardless of whether you think you can learn it on the job.

What Surprised Me

Two things:

  1. Soft skills are invisible to filters. "Great communicator" and "team player" mean nothing to an ATS parser. The system is looking for concrete terms.
  2. The same resume can score 20% against one JD and 80% against another. The difference isn't you — it's how well your wording overlaps with what they're asking for.

Run Your Own Resume Check

The tool I built is at resumeaiopt.com. Paste your resume and a job description, and it'll show you where the gaps are. No account needed, no data stored — just analysis.

Source: dev.to

arrow_back Back to Tutorials