Most job descriptions never reach a human recruiter. They get scored, ranked, and filtered by an applicant tracking system (ATS) before anyone reads a word you wrote. A bad score doesn't just mean fewer applications — it means the candidates who would have been your best hires never see the listing.

This guide explains exactly how ATS platforms score job descriptions, which criteria matter most, and how to fix a JD that's losing candidates at the algorithm level.

What Is ATS and Why It Matters for Your JD

An applicant tracking system is software that manages the hiring pipeline — from posting a job to receiving applications. The big players among mid-size companies (100-400 employees) are Greenhouse, Lever, Workday, iCIMS, and BambooHR.

When a candidate applies, the ATS doesn't just store their resume. It parses it, extracts structured data (name, email, employment history, skills), and assigns a match score against the job description. Recruiters then use this score to filter — often setting a threshold where anything below 60% gets archived without review.

Key stat

A 2025 LinkedIn survey found that 75% of recruiters say ATS keyword matching is the primary filter for initial resume screening — and over half of hiring managers admit they never adjust the system's default scoring thresholds after setup.

How ATS Scoring Models Work

Every ATS scores JDs differently, but they share a common architecture: weighted criteria across four to six dimensions. The exact weights vary by platform, but this is the typical breakdown across the most common systems:

Scoring Dimension Weight What the ATS Looks For
Keyword Match 30–40% Exact and semantic matches of required skills, tools, certifications, and role-specific terms in the JD text.
Section Structure 15–20% Presence of standard sections: Job Summary, Responsibilities, Requirements, Qualifications, About the Company.
Format Integrity 10–15% Plain text parsing success rate — how much of the JD can be read correctly. Tables, headers in unexpected places, and non-ASCII characters reduce this score.
Title Relevance 10–15% Job title match to industry-standard titles. Unusual or internally-created titles score poorly against candidates who used standard titles in their resume.
Completeness 5–10% Length check (too short = low effort, too long = keyword stuffing suspicion), presence of salary range, location, employment type.
Readability 5–10% Flesch-Kincaid grade level (aim for 8–12), sentence length variance, bullet point ratio. JDs written at grade 16+ tend to score lower.

The candidate's resume gets scored against the same dimensions. The ATS then calculates a match percentage. If you're writing JDs that score low on these criteria, the pool of qualified candidates who match well starts shrinking before the job ever gets seen by a human.

Keyword Density: The Right Range

Keyword scoring is the highest-weight dimension, and it's also the most misunderstood. Recruiters often assume "more is better" — but the research and ATS parsing behavior say the opposite.

The optimal keyword density for ATS scoring is 2–5% for primary terms. Here's why:

To calculate your keyword density: take the number of times a term appears, divide by total word count, multiply by 100. A 500-word JD with "Python" appearing 12 times is at 2.4% — right in the sweet spot.

2–5%
Optimal keyword density range
500–800
Ideal JD word count for ATS parsing
6+
Standard sections ATS expects

Our free JD generator automatically balances keyword density across required skills, preferred qualifications, and nice-to-have terms — so your description hits the 2–5% range for every primary keyword without manual counting.

Format Scoring: What Passes and What Fails

ATS systems parse text using Optical Character Recognition (OCR) on uploaded documents, and HTML parsing on web-based postings. Both have known failure modes that quietly tank your score.

What works

What fails

Before (ATS-friendly?) After (ATS-optimized)
Fails format scoring

Requirements:

✓ 3+ years Python
✓ AWS certified
✓ React.js experience

Checkmarks and emoji fail OCR parsing. Multi-column formatting breaks meaning.

Passes format scoring

Requirements

- Minimum 3 years of professional Python development experience

- AWS certification (Solutions Architect Associate or higher preferred)

- 2+ years of React.js development experience in production environments

7 Mistakes That Kill Your ATS Score

1. Writing for humans and ignoring the parser

Your JD may read beautifully but score at 45% because the ATS couldn't parse the formatting. Creative, visually rich job descriptions are great for human readers — but most applications come through the ATS, and the parser doesn't see what your eyes see.

2. Using your internal job title verbatim

Internal titles like "Growth Unicorn" or "Revenue Architect" don't match candidate resume keywords. ATS systems map against standardized job title taxonomies (ONET, LinkedIn job titles). Use the standard title in the JD, add the internal nickname in parentheses if needed.

3. Burying required skills in a wall of text

ATS scoring weights keyword position. If "Kubernetes" appears only in paragraph 8 of a 12-paragraph Responsibilities section, it registers as less relevant than if it appears in the Requirements section as a named bullet point. A well-structured template ensures required skills appear in the highest-weighted sections.

4. Posting a JD that's too short

JDs under 300 words signal low effort to the ATS. The system interprets brevity as incompleteness and may lower your completeness score. Aim for 500–800 words minimum, even for entry-level roles.

5. Including every possible requirement to avoid filtering

Listing 15 "required" skills when only 5 are truly required widens your applicant pool but destroys your match rate. ATS match scores are calculated against candidate resumes — if candidates have 8 of 15 skills, they score 53%, and many recruiters auto-reject anything below 60%.

6. Using jargon that candidates won't search for

Your team says "Full-Stack Generalist" but candidates search "Full Stack Developer." That gap means candidates with the right background filter themselves out before applying. Use the language your ideal candidates actually search — check LinkedIn job listings for your role to find the common terms.

7. Forgetting the About the Company section

Many ATS systems assign points for the presence of an "About the Company" section. This is also where culture-related keywords ("fast-paced", "mission-driven", "collaborative") can live without cluttering the Requirements section. Removing it loses easy points.

How to Fix a Low-Scoring Job Description

If you've already posted a job and aren't getting the right candidates, here's a step-by-step fix process:

ATS JD Repair Checklist

  1. Count your primary keywords (top 5 required skills). Calculate their individual density. Target 2–5% for each.
  2. Move all required skills into a dedicated "Requirements" or "Required Qualifications" section with bullet points.
  3. Replace any checkmarks, emojis, or special characters in the body with plain text.
  4. Convert any table-based requirement lists to plain bullet points.
  5. Add a salary range (even a wide one like "$90,000–$120,000") — adds a concrete data point the ATS parses easily.
  6. Add an "About the Company" section if one doesn't exist. 100–150 words on company size, industry, and culture.
  7. Run the JD through a free ATS scan tool (see below) before re-posting.
  8. If the role is still underperforming after 2 weeks, A/B test a revised version with different keyword ordering.

Inclusive job descriptions tend to score well on ATS too — not because of the topic, but because inclusive language tends to use simpler sentence structures, standard section headings, and shorter paragraphs, all of which aid parsing and improve readability scores.

Free Tools to Test Your JD Before Posting

Before you re-post a job description, run it through one of these to catch scoring issues:

These tools are useful, but the most effective fix is writing a well-structured JD from the start. JD Generator produces ATS-optimized descriptions automatically — structured sections, keyword density in the 2–5% range, standard section headers, and no special characters. Start with a strong foundation rather than trying to fix a broken one.

Generate an ATS-optimized JD in 60 seconds

Built-in keyword balancing, standard section structure, and format compliance — without manual optimization work.

Create your job description →
JD

Written by the JD Generator Team

We're a team of former recruiters and hiring managers who've spent years on both sides of the ATS. We built JD Generator to fix the job description problems we saw every day — including the ones candidates never see coming.