A Python script that matches resumes against job descriptions and provides improvement suggestions using AI with support for multiple LLM providers.
Note: This is a simplified, standalone version inspired by the Resume-Matcher project. The main Resume-Matcher is a full-stack web application with advanced features, while this version provides the core functionality in a single Python script for easier setup and use.
I built this application because I wanted a simple way to take my resume, compare it to a job description, and interact with both in a conversational way. Having an LLM look at both documents and ask targeted questions to help improve the quality of my resume is incredibly powerful.
Resume matching and optimization isn't something we do every day, so having an AI-powered tool that can:
- Analyze gaps between your resume and job requirements
- Ask intelligent questions to uncover missing experiences and achievements
- Provide specific improvement suggestions based on the job description
- Guide you through an interactive improvement process
...is incredibly valuable when you need to tailor your resume for a specific role.
This tool bridges the gap between generic resume advice and the specific requirements of each job, making the resume optimization process more targeted and effective.
- Extract text from PDF and DOCX resume files
- Extract job descriptions from text, URLs, or PDF files
- Analyze keyword matching between resume and job description
- Provide AI-powered resume improvement suggestions
- Interactive improvement sessions with targeted questions
- Generate formatted resume templates with 5 different styles
- Multi-provider LLM support: Ollama, OpenAI, Gemini, and LM Studio
- Advanced logging system with multiple verbosity levels (quiet, normal, verbose, debug)
- Professional progress tracking with spinners and detailed status updates
- Flexible input/output with JSON save/load capabilities
- Template generation from previous analysis results
- Comprehensive error handling with troubleshooting guidance
- Install Python dependencies:
pip install -r requirements.txt- Set up your preferred LLM provider (see Provider Setup below)
Free, private, runs locally on your machine
# Install Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# Start server
ollama serve
# Pull a model
ollama pull llama3.1Free, private, runs locally on your machine
- Download from https://lmstudio.ai/
- Start local server in LM Studio app
- Download a model (e.g.,
google/gemma-3-27b)
Paid service, requires API key
- Get API key from https://platform.openai.com/
- Set environment variable:
export OPENAI_API_KEY="your-key"
Free tier available, requires API key
- Get API key from https://makersuite.google.com/app/apikey
- Set environment variable:
export GEMINI_API_KEY="your-key"
# Using Ollama (default, recommended)
python simple_resume_matcher.py resume.pdf "job description text"
python simple_resume_matcher.py resume.pdf https://example.com/job-posting
python simple_resume_matcher.py resume.pdf job_description.pdf
# Using OpenAI
python simple_resume_matcher.py resume.pdf job_description.pdf --provider openai
# Using Gemini
python simple_resume_matcher.py resume.pdf job_description.pdf --provider gemini
# Using LM Studio
python simple_resume_matcher.py resume.pdf job_description.pdf --provider lmstudiopython simple_resume_matcher.py resume.pdf job_description.pdf --interactivepython simple_resume_matcher.py resume.pdf job_description.pdf --template-output improved_resume.txt# Verbose output for detailed progress
python simple_resume_matcher.py resume.pdf job_description.pdf --verbose
# Quiet mode (errors only)
python simple_resume_matcher.py resume.pdf job_description.pdf --quiet
# Debug mode (maximum verbosity)
python simple_resume_matcher.py resume.pdf job_description.pdf --debug# Save analysis results to JSON
python simple_resume_matcher.py resume.pdf job_description.pdf --output analysis.json
# Load previous results and generate template
python simple_resume_matcher.py --input analysis.json --generate-template accomplishments --template-output final_resume.txt# List available resume templates
python simple_resume_matcher.py --list-templates
# List available LLM providers with setup instructions
python simple_resume_matcher.py --list-providers--provider {ollama,openai,gemini,lmstudio}: Choose LLM provider (default: ollama)--model: Specify model name (auto-detected if not specified)--api-key: API key for cloud providers (OpenAI, Gemini)--provider-url: Custom URL for provider server
--verbose, -v: Show detailed progress information--quiet, -q: Show only errors and critical messages--debug: Show debug information (very verbose)
--output: Save analysis results to JSON file--input: Load previous analysis results from JSON file--preview: Show formatted resume preview--interactive: Run interactive improvement session
--template: Choose resume template (classic_ats, skills_forward, accomplishments, dual_column, minimalist)--template-output: Save formatted resume to file--generate-template: Generate specific template from input file (requires --input)--list-templates: Show available resume templates--list-providers: Show available LLM providers and setup instructions
The tool includes 5 professionally designed resume templates, each optimized for different career stages and industries:
- Best For: All technology professionals, high-volume applications
- Features: Single-column design, standard fonts, clear headings, no graphics
- Use Case: Universal template that works with most Applicant Tracking Systems
- Best For: Recent graduates, career changers, diverse backgrounds
- Features: Skills section at top, reverse-chronological history, transferable skills focus
- Use Case: When your skills are more relevant than your work history
- Best For: Mid-to-senior-level professionals with clear progression
- Features: Quantified achievements, strong action verbs, career story focus
- Use Case: When you have impressive metrics and career growth to highlight
- Best For: Candidates with many projects, skills, and certifications
- Features: Two-column format, visual balance, high information density
- Use Case: When you need to fit a lot of information in a compact format
- Best For: Software engineers, developers, data scientists
- Features: LaTeX/plain-text, technical elegance, function over form
- Use Case: Technical roles where clean, simple formatting is preferred
# Simple analysis with Ollama (default)
python simple_resume_matcher.py resume.pdf job.pdf
# Interactive improvement session
python simple_resume_matcher.py resume.pdf job.pdf --interactive# Using OpenAI with API key
python simple_resume_matcher.py resume.pdf job.pdf --provider openai --api-key sk-...
# Using Gemini with environment variable
export GEMINI_API_KEY="your-key"
python simple_resume_matcher.py resume.pdf job.pdf --provider gemini
# Using LM Studio with custom URL
python simple_resume_matcher.py resume.pdf job.pdf --provider lmstudio --provider-url http://localhost:1234
# Using Ollama with custom URL
python simple_resume_matcher.py resume.pdf job.pdf --provider ollama --provider-url http://192.168.1.100:11434# Save analysis results for later use
python simple_resume_matcher.py resume.pdf job.pdf --output analysis.json --verbose
# Generate different templates from saved analysis
python simple_resume_matcher.py --input analysis.json --generate-template accomplishments --template-output accomplishments_resume.txt
python simple_resume_matcher.py --input analysis.json --generate-template minimalist --template-output minimalist_resume.txt
# Complete workflow: analyze, save, and generate multiple templates
python simple_resume_matcher.py resume.pdf job.pdf --interactive --output analysis.json --template-output improved_resume.txt# Debug mode for troubleshooting issues
python simple_resume_matcher.py resume.pdf job.pdf --debug
# Quiet mode for automated scripts
python simple_resume_matcher.py resume.pdf job.pdf --quiet --output results.json
# Verbose mode to see detailed progress
python simple_resume_matcher.py resume.pdf job.pdf --verbose --interactive# Generate skills-forward template for career changers
python simple_resume_matcher.py resume.pdf job.pdf --template skills_forward --template-output skills_resume.txt
# Generate accomplishments template for senior professionals
python simple_resume_matcher.py resume.pdf job.pdf --template accomplishments --template-output accomplishments_resume.txt
# Generate minimalist template for developers
python simple_resume_matcher.py resume.pdf job.pdf --template minimalist --template-output dev_resume.txt| Provider | Privacy | Cost | Setup Difficulty | Performance | Recommended For |
|---|---|---|---|---|---|
| Ollama | β Local | β Free | π’ Easy | π‘ Good | Privacy-conscious users |
| LM Studio | β Local | β Free | π‘ Medium | π’ Excellent | Power users |
| OpenAI | β Cloud | π° Paid | π’ Easy | π’ Excellent | Professional use |
| Gemini | β Cloud | π‘ Free tier | π’ Easy | π‘ Good | Budget-conscious users |
- Python 3.7+
- One of the supported LLM providers (see Provider Setup)
- Internet connection (for URL job descriptions and cloud providers)
markitdown[all]: PDF/DOCX text extractionrequests: HTTP requestsbeautifulsoup4: Web scraping
- "Connection refused": Make sure
ollama serveis running - "Model not found": Run
ollama pull llama3.1to download a model - "Permission denied": Run
sudo ollama serveon Linux
- "API key not provided": Set
export OPENAI_API_KEY="your-key" - "Rate limit exceeded": Wait a moment and try again
- "Model not found": Check if the model name is correct
- "API key not provided": Set
export GEMINI_API_KEY="your-key" - "Quota exceeded": Check your Google Cloud quota
- "Connection refused": Make sure LM Studio local server is running
- "Model not loaded": Load a model in LM Studio app
- Flexibility: Choose the provider that best fits your needs
- Privacy: Local providers keep your data on your machine
- Cost Control: Free local options vs paid cloud services
- Reliability: Fallback options if one provider is unavailable
- Performance: Different providers have different strengths
- Accessibility: More users can use the tool regardless of their setup
This Simple Resume Matcher is inspired by the main Resume-Matcher project but designed for different use cases:
| Feature | Simple Resume Matcher | Main Resume-Matcher |
|---|---|---|
| Architecture | Single Python script | Full-stack web app (FastAPI + Next.js) |
| Setup | Simple pip install | Docker/containerized setup |
| UI | Command-line interface | Modern web interface |
| Database | None (in-memory processing) | SQLite with structured models |
| Deployment | Run locally | Web application |
| Features | Core matching & improvement | Advanced ATS analysis, templates, collaboration |
| Use Case | Quick analysis, learning, CLI users | Production use, teams, web interface |
Choose Simple Resume Matcher if you want:
- Quick setup and immediate use
- Command-line workflow
- Local processing only
- Learning the core algorithms
- Simple deployment
Choose Main Resume-Matcher if you want:
- Full web application experience
- Advanced ATS compatibility analysis
- Team collaboration features
- Production-ready deployment
- Comprehensive resume templates