How to Build an AI Resume Screening System
Screen resumes automatically using AI to find the best candidates faster.
Jay Banlasan
The AI Systems Guy
Reviewing 200 resumes for one role takes hours. Most of those resumes do not even meet basic requirements. I built an AI resume screening system that reads every application, scores it against the job requirements, and surfaces the top candidates in minutes.
This ai resume screening hiring automation saves hiring managers from drowning in applications.
What You Need Before Starting
- Python 3.8+
- An AI API key (Claude recommended for nuanced text analysis)
- Resume files in PDF or text format
- A scoring rubric for the role
Step 1: Define the Scoring Rubric
RUBRIC = {
"role": "Senior Python Developer",
"required_skills": ["python", "sql", "api development", "git"],
"preferred_skills": ["aws", "docker", "ci/cd", "terraform"],
"min_experience_years": 5,
"education": "bachelor's degree in computer science or equivalent",
"deal_breakers": ["no python experience", "entry level only"]
}
Step 2: Extract Text from Resumes
import fitz # PyMuPDF
from pathlib import Path
def extract_resume_text(file_path):
path = Path(file_path)
if path.suffix.lower() == ".pdf":
doc = fitz.open(str(path))
text = ""
for page in doc:
text += page.get_text()
return text
elif path.suffix.lower() in [".txt", ".md"]:
return path.read_text()
return ""
Step 3: Score Each Resume with AI
import anthropic
import json
client = anthropic.Anthropic()
def score_resume(resume_text, rubric):
prompt = f"""Score this resume against the job requirements. Return JSON only.
Job: {rubric['role']}
Required Skills: {', '.join(rubric['required_skills'])}
Preferred Skills: {', '.join(rubric['preferred_skills'])}
Minimum Experience: {rubric['min_experience_years']} years
Deal Breakers: {', '.join(rubric['deal_breakers'])}
Resume:
{resume_text[:3000]}
Return this JSON structure:
{{
"candidate_name": "name from resume",
"score": 0-100,
"required_skills_met": ["list of matched required skills"],
"preferred_skills_met": ["list of matched preferred skills"],
"estimated_experience_years": number,
"deal_breaker_flags": ["any deal breakers found"],
"summary": "2-3 sentence assessment",
"recommendation": "advance|review|reject"
}}"""
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
return json.loads(message.content[0].text)
Step 4: Process All Resumes in Batch
def screen_all_resumes(resume_dir, rubric):
results = []
for filepath in Path(resume_dir).glob("*"):
text = extract_resume_text(filepath)
if not text.strip():
continue
score = score_resume(text, rubric)
score["file"] = filepath.name
results.append(score)
results.sort(key=lambda x: x["score"], reverse=True)
return results
Step 5: Generate the Shortlist Report
def generate_shortlist(results, top_n=10):
shortlist = [r for r in results if r["recommendation"] == "advance"][:top_n]
report = f"# Candidate Shortlist\n\n"
report += f"Screened: {len(results)} resumes\n"
report += f"Advancing: {len(shortlist)} candidates\n\n"
for i, candidate in enumerate(shortlist, 1):
report += f"## {i}. {candidate['candidate_name']} (Score: {candidate['score']})\n"
report += f"{candidate['summary']}\n\n"
return report
What to Build Next
Add a feedback loop where hiring managers mark AI recommendations as correct or incorrect. Use that data to refine your scoring prompts over time. The system gets better with every hire.
Related Reading
- How to Use AI for Resume Screening - ai resume screening guide
- The $300K Question Every Business Owner Should Ask - ai vs hiring team cost
- Lead Scoring with AI - lead scoring ai automation
Want this system built for your business?
Get a free assessment. We will map every system your business needs and show you the ROI.
Get Your Free Assessment