A comprehensive Applicant Tracking System (ATS) resume analyzer built with Flask and Machine Learning. This application helps job seekers optimize their resumes to pass ATS screening and increase their chances of landing interviews.
- Resume Analysis: Upload PDF, TXT, DOC, or DOCX files for analysis
- ATS Scoring: Get detailed scores based on keyword matching, semantic similarity, and formatting
- Keyword Analysis: See which keywords are matched and which are missing
- Industry-Specific Analysis: Tailored analysis based on detected industry
- Improvement Recommendations: Get actionable suggestions to improve your resume
- Modern UI: Clean, responsive web interface with real-time results
- Secure Processing: All analysis happens locally on your server
- Python 3.8 or higher
- pip (Python package installer)
-
Clone or download the project files
-
Run the setup script:
python setup_ats.py
-
Configure environment (optional):
cp .env.example .env # Edit .env with your preferred settings -
Start the application:
python app_ats.py
-
Open your browser and go to:
http://localhost:5000
ATS Project/
โโโ app_ats.py # Main Flask application
โโโ ats_service.py # ATS analysis service
โโโ ats_scoring.py # Advanced scoring algorithms
โโโ requirements_ats.txt # Python dependencies
โโโ setup_ats.py # Automated setup script
โโโ README_ATS.md # This file
โโโ sample backend/ # Original sample code (reference)
โโโ templates/
โ โโโ index.html # Main web interface
โโโ static/
โ โโโ css/
โ โ โโโ style.css # Custom styles
โ โโโ js/
โ โโโ app.js # Frontend JavaScript
โโโ uploads/ # Temporary file storage
- POST
/api/analyze- Upload resume file and job description
- Returns comprehensive ATS analysis
- POST
/api/quick-score- JSON input with resume text and job description
- Returns basic ATS score
- POST
/api/keywords- Detailed keyword matching analysis
- POST
/api/suggestions- Get personalized improvement recommendations
- Weighted combination of multiple factors
- Scale: 0-100%
- Categories: Excellent (80+), Good (60-79), Fair (40-59), Poor (<40)
- Keyword Matching: Relevance to job description keywords
- Semantic Similarity: Content similarity using NLP
- Skills Match: Technical and soft skills alignment
- Experience Match: Experience level and relevance
- Education Match: Educational background alignment
- Readability Score: Flesch reading ease score
- Formatting Analysis: ATS-friendly formatting check
- Industry Detection: Automatic industry classification
- Contact Information: Extraction of contact details
- Use standard section headers (Experience, Education, Skills)
- Include relevant keywords from job descriptions
- Use simple, clean formatting
- Save in PDF and plain text formats
- Quantify achievements with numbers
- Use action verbs (managed, developed, implemented)
- Avoid graphics, images, or charts
- Don't use tables or complex formatting
- Avoid unusual fonts or colors
- Don't use headers/footers
- Avoid acronyms without explanation
- Don't keyword stuff
- File Processing: Extracts text from uploaded resume files
- Text Preprocessing: Cleans and normalizes text data
- Keyword Extraction: Identifies relevant keywords and skills
- Similarity Analysis: Uses TF-IDF and cosine similarity
- Industry Detection: Classifies based on job description content
- Scoring Algorithm: Weighted combination of multiple factors
- Recommendation Engine: Generates personalized improvement tips
- Flask: Web framework
- scikit-learn: Machine learning algorithms
- NLTK: Natural language processing
- PDFMiner: PDF text extraction
- NumPy/Pandas: Data processing
- Bootstrap 5: Responsive UI framework
- Font Awesome: Icons
- Vanilla JavaScript: Interactive functionality
- CSS3: Custom styling and animations
- TF-IDF Vectorization: Text feature extraction
- Cosine Similarity: Semantic similarity measurement
- Keyword Matching: Rule-based keyword analysis
- Text Preprocessing: Stemming, stopword removal
- Industry Classification: Keyword-based industry detection
- All processing happens locally on your server
- No data is sent to external services (unless configured)
- Uploaded files are temporarily stored and can be automatically cleaned
- No personal information is logged or stored permanently
- Average analysis time: 2-5 seconds
- Supports files up to 16MB
- Concurrent request handling
- Optimized for production deployment
python app_ats.pypip install gunicorn
gunicorn -w 4 -b 0.0.0.0:8000 app_ats:appFROM python:3.9-slim
WORKDIR /app
COPY requirements_ats.txt .
RUN pip install -r requirements_ats.txt
COPY . .
EXPOSE 5000
CMD ["python", "app_ats.py"]- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is open source and available under the MIT License.
If you encounter any issues:
- Check the console logs for error messages
- Ensure all dependencies are installed correctly
- Verify file formats are supported (PDF, TXT, DOC, DOCX)
- Check file size limits (16MB max)
- Support for more file formats
- Integration with job boards APIs
- Resume template suggestions
- Batch processing capabilities
- Advanced NLP models (BERT, GPT)
- Multi-language support
- Resume builder integration
- A/B testing for resume versions
Built with โค๏ธ using Flask, Machine Learning, and modern web technologies.