An intelligent automation tool that streamlines your internship application process by generating tailored CVs and cover letters for each job posting, and optionally automating the application submission process.
- AI-Powered Document Generation: Creates tailored CVs and cover letters for each job using advanced AI models (OpenAI GPT or Anthropic Claude)
- Multi-Platform Job Scraping: Automatically finds relevant internships from Indeed, LinkedIn, and other job boards
- Application Question Answering: Generates personalized responses to common application questions like "Why do you want to work at [Company]?"
- ATS Optimization: Ensures your documents are optimized for Applicant Tracking Systems
- Safe Automation: Built-in safety features prevent accidental submissions without review
- Smart Job Matching: Uses AI to analyze job descriptions and match them with your profile
- Application Tracking: Keeps detailed logs of all applications and their status
- Document Templates: Customizable templates for different types of positions
- Multi-Format Output: Generate documents in PDF format with professional styling
- Screenshot Documentation: Automatically captures screenshots of application processes
- Python 3.8 or higher
- Chrome browser (for web automation)
- OpenAI API key OR Anthropic API key
-
Clone or download the project
cd C:\Users\Admin\Documents\ai-internship-applicator
-
Run the setup script
.\setup.ps1
-
Configure the application
python -m src.main setup
-
Create virtual environment
python -m venv venv venv\Scripts\activate # Windows # or source venv/bin/activate # macOS/Linux
-
Install dependencies
pip install -r requirements.txt
-
Copy configuration templates
copy config\config.yaml.template config\config.yaml copy data\personal\profile.yaml.template data\personal\profile.yaml
-
Edit configuration files
- Add your API keys to
config/config.yaml
- Fill in your personal information in
data/personal/profile.yaml
- Add your API keys to
Get an API key from either:
Fill out your information in data/personal/profile.yaml
:
personal_info:
name: "Your Name"
email: "[email protected]"
phone: "+1 (555) 123-4567"
location: "City, State"
linkedin: "https://linkedin.com/in/yourprofile"
github: "https://github.com/yourusername"
education:
- degree: "Bachelor of Science in Computer Science"
institution: "University Name"
graduation_year: "2024"
gpa: "3.8"
skills:
technical: ["Python", "JavaScript", "React", "SQL"]
soft: ["Problem Solving", "Team Collaboration"]
Configure automation behavior in config/config.yaml
:
automation:
auto_submit: false # KEEP FALSE for safety
headless_browser: true
save_screenshots: true
scraping:
platforms: ['indeed', 'linkedin']
max_jobs_per_search: 50
python -m src.main setup
Walks you through the initial configuration process.
# Generate CV
python -m src.main generate-cv -j "job_description.txt" -o generated_cvs/
# Generate Cover Letter
python -m src.main generate-cover-letter -j "job_description.txt" -o generated_cover_letters/
# Search for software internships
python -m src.main scrape-jobs -k "software intern" -k "computer science" -l "Remote" -o data/jobs.json
# Dry run (recommended first)
python -m src.main auto-apply -j data/jobs.json --dry-run
# Live application (use with caution)
python -m src.main auto-apply -j data/jobs.json
-
Initial Setup
python -m src.main setup
-
Find Jobs
python -m src.main scrape-jobs -k "software engineering intern" -l "New York" -o jobs.json
-
Review and Filter Jobs
- Manually review
jobs.json
- Remove jobs you don't want to apply to
- Manually review
-
Generate Applications (Dry Run)
python -m src.main auto-apply -j jobs.json --dry-run
-
Review Generated Documents
- Check
generated_cvs/
andgenerated_cover_letters/
- Verify documents are properly tailored
- Check
-
Submit Applications
- Option A: Submit manually using generated documents
- Option B: Use automation (with extreme caution)
- Default Dry Run: All automation runs in dry-run mode by default
- Manual Review Required:
auto_submit
is disabled by default - Screenshot Logging: All application pages are captured for review
- Application Tracking: Detailed logs of all activities
- Rate Limiting: Prevents overwhelming job sites
- Always start with dry runs
- Manually review generated documents
- Test with a small number of jobs first
- Keep
auto_submit: false
until you're confident - Regularly check application results and logs
ai-internship-applicator/
βββ src/ # Main application code
β βββ main.py # CLI interface
β βββ cv_generator.py # CV generation logic
β βββ cover_letter_generator.py # Cover letter generation
β βββ job_scraper.py # Job scraping functionality
β βββ application_automator.py # Application automation
β βββ ai_service.py # AI/LLM integrations
β βββ config_manager.py # Configuration management
βββ config/ # Configuration files
β βββ config.yaml.template # Configuration template
β βββ config.yaml # Your configuration (created)
βββ data/ # Data storage
β βββ personal/ # Your personal information
β βββ profile.yaml.template
βββ templates/ # Document templates
βββ generated_cvs/ # Generated CV files
βββ generated_cover_letters/ # Generated cover letters
βββ logs/ # Application logs and results
βββ requirements.txt # Python dependencies
βββ setup.ps1 # Windows setup script
βββ README.md # This file
Extend job_scraper.py
to support additional job sites:
def _scrape_new_platform(self, keywords, location, max_jobs):
# Implementation for new platform
pass
Create custom templates in the templates/
directory and modify the generator classes.
Add handlers for specific company questions in application_automator.py
.
"No module named 'src'"
# Make sure you're in the project directory
cd C:\Users\Admin\Documents\ai-internship-applicator
# Run with python -m
python -m src.main --help
"ChromeDriver not found"
# Install ChromeDriver
# Download from: https://chromedriver.chromium.org/
# Add to PATH or place in project directory
"API key not found"
- Check that
config/config.yaml
exists and contains your API key - Verify the API key is valid and has sufficient credits
"Permission denied" on file operations
- Ensure the application has write permissions to the project directory
- Check that files aren't open in other applications
Enable debug logging:
# In config/config.yaml
logging:
level: 'DEBUG'
Check logs/application_results/
for detailed reports including:
- Success/failure status for each application
- Generated document paths
- Error messages and troubleshooting info
- Screenshots of application pages
The application tracks:
- Number of jobs processed
- Success rate of document generation
- Application submission success rate
- Time taken per application
- Respect robots.txt: The scraper respects website scraping policies
- Rate Limiting: Built-in delays prevent overwhelming servers
- Personal Use: Intended for individual job seekers, not bulk operations
- Local Storage: All personal data stays on your machine
- API Privacy: Review OpenAI/Anthropic privacy policies for AI services
- No Data Sharing: The application doesn't transmit personal data to third parties
- Quality Over Quantity: Focus on relevant positions, not mass applications
- Honest Applications: Ensure all generated content accurately represents your qualifications
- Manual Review: Always review documents before submission
- Fork the repository
- Create a feature branch
- Follow the existing code style
- Add tests for new functionality
- Submit a pull request
- Follow PEP 8 for Python code
- Use type hints where appropriate
- Add docstrings to all functions and classes
- Keep functions focused and modular
This project is for educational and personal use. Users are responsible for complying with the terms of service of job platforms and AI providers.
- Check this README for common issues
- Review logs in
logs/
directory - Check configuration files for errors
- Verify API keys and permissions
When reporting issues, please include:
- Your operating system
- Python version
- Full error message
- Steps to reproduce
- Configuration (remove sensitive information)
Happy Job Hunting! π―
Remember: This tool is designed to enhance your job search process, not replace your personal touch. Always review and personalize the generated content to ensure it authentically represents you and your qualifications.