ATS-Optimized Resume Analyzer Using Claude AI and RAG

Introduction

The job market is tougher than ever, and making a resume stand out is challenging. Many companies use Applicant Tracking Systems (ATS) to filter resumes based on keywords and formatting. Sadly, many resumes get rejected by ATS, even for qualified candidates, because of poor formatting or missing key details.

This blog post will show how to create an ATS-optimized resume analyzer using Generative AI and RAG. The tool helps job seekers improve their resumes so they can pass ATS filters and reach recruiters.

Problem Statement

ATS systems rely heavily on keyword matching and structured formatting. Resumes missing specific keywords or phrases often get rejected, even if the candidate is qualified. Job seekers also lack personalized feedback, making it harder to improve their resumes.

For example, a resume might list "Python" as a skill but leave out related fields like "data science" or "machine learning," which could be key for the job. This leads to a low ATS match score, preventing the resume from passing through the filters.

How Generative AI Solves This Problem

Generative AI, like Anthropic's Claude model, can analyze both job descriptions and resumes, match them, and give personalized feedback to improve resumes.

Core tasks:

  • Match and Score: Matches resumes with job descriptions and calculates an ATS score
  • Find Missing Keywords: Identifies skills or keywords missing from the resume
  • Provide Suggestions: Offers specific, contextual ways to improve the resume for better ATS visibility

With Retrieval-Augmented Generation, it combines retrieving documents (like resumes and job descriptions) with AI-generated feedback, ensuring insights and suggestions are relevant and helpful.

Technologies Used

  • Generative AI (Claude Haiku): Analyzes job descriptions and resumes, generating honest feedback including match scores, missing keywords, and overall resume assessment
  • SentenceTransformers (all-MiniLM-L6-v2): Converts job descriptions and resumes into numerical embeddings for semantic similarity analysis
  • FAISS: Indexes and retrieves relevant sections of job descriptions or resumes based on embeddings for efficient analysis
  • pypdf: Extracts text from resumes in PDF format for processing
  • Streamlit: Builds an interactive web interface where users upload resumes and input job descriptions to receive feedback

Code Snippets and Implementation

1. Importing Required Libraries

This block imports all the necessary Python libraries needed for the project, including libraries for document processing (pypdf), AI integration (Anthropic Claude), and vector embeddings (SentenceTransformers). Streamlit is also imported to build the user interface for the web app.

2. Configuring Claude API

This code sets up the Anthropic Claude API for text analysis by fetching the API key from Streamlit Secrets. The claude-haiku-4-5 model is used — it is the fastest and most cost-efficient Claude model, ideal for resume analysis.

3. Embeddings for RAG

Here, the SentenceTransformer model is initialized to convert the job description and resume into vector embeddings. These embeddings allow for semantic comparison and are used for document retrieval in the RAG process. FAISS indexes these vectors for fast similarity search

4. Extracting Text from PDF

This function reads the uploaded PDF resume, extracts the text from each page using pypdf, and returns the resume text. If there is an issue reading the PDF, it returns an error message instead.

5. Analyzing the Resume and Job Description Using Claude

This function builds a FAISS vector store from the job description and resume, retrieves the most relevant context, and sends it to Claude with a structured prompt. Claude returns a match score, honest overall feedback, and missing keywords — all in JSON format.

6. Streamlit UI

This section builds the Streamlit interface where users upload a resume in PDF format and input a job description. When the user clicks Analyze Resume, the app processes both inputs and displays the ATS score, honest feedback, and missing keywords with suggestions.

Streamlit UI Logic Summary:

  • UI Components: Title, file upload for resume, text input for job description, and an analyze button
  • User Interaction: On clicking Analyze Resume, the app shows ATS score, feedback, and missing keywords
  • Error Handling: Displays warnings if inputs are missing or something goes wrong

Limitations

  • Capped ATS Score: The match score is kept realistic — scores above 80 are only given when the resume genuinely competes for the role
  • Input Quality Matters: Poorly formatted resumes or incomplete job descriptions can affect accuracy
  • Non-Standard Resumes: Creative or heavily designed resume layouts may not extract cleanly from PDF
  • Over-focus on Keywords: The tool prioritizes keyword matches, but context alignment may not always be perfect

Future Enhancements

  • Keyword Context: Use models like BERT to check if keywords are used meaningfully, not just present
  • Job-Specific Tuning: Adjust scoring for different industries like tech, finance, or healthcare
  • Chatbot Feedback: Build a conversational interface for instant, role-specific resume improvement tips
  • Resume Rewriter: Automatically rewrite weak bullet points based on the missing keywords and job requirements

Conclusion

The ATS-Optimized Resume Analyzer uses Claude AI and RAG to help job seekers create resumes tailored for Applicant Tracking Systems. By replacing LangChain with direct FAISS and SentenceTransformers integration, the tool is leaner and more reliable. Claude Haiku provides honest, structured feedback — including an ATS score, balanced critique, and specific keyword suggestions — making it a practical tool for anyone actively job searching.

Thank you for reading! 😄

Written by Pramod Saripalli

Check out my ATS Resume Optimizer | GitHub Repository

Comments