An intelligent LinkedIn automation bot that streamlines your job search with AI-powered form filling, stealth technology, and smart resume management.
Problem β’ Solution β’ Demo β’ Features β’ Tech Stack β’ Installation β’ Usage β’ Roadmap
- β‘ Speed: Applies to 50+ jobs in under 30 minutes
- π― Accuracy: 95%+ form completion rate
- π€ Stealth: Human-like behavior avoids detection
- π Tracking: Complete application history in Excel
"Job seekers spend 3-4 hours daily filling repetitive application forms."
The modern job search process is broken:
- π Repetitive Form Filling - Same information across hundreds of applications
- β° Time Consuming - Manual data entry for each Easy Apply form
- π€ Bot Detection - LinkedIn flags automated applications
- π Resume Management - Tailoring resumes for each position is tedious
- π No Tracking - Hard to keep track of applications and responses
Build an intelligent automation system that handles the entire job application process while maintaining human-like behavior to avoid detection. A single configuration file powers hundreds of applications with smart form filling and AI-driven resume optimization.
Advanced browser automation with anti-detection technology that mimics human behavior.
- β Persistent Chrome profile for authenticity
- β Human-like typing, scrolling, and mouse movements
- β Random delays and reading patterns
- β Disables automation detection flags
AI-powered form field detection and intelligent auto-fill system.
- β Context-aware field matching
- β Multi-step form navigation (Contact β Resume β Review β Submit)
- β Dropdown and radio button handling
- β Tracks unfilled fields for continuous improvement
Google Gemini-powered resume tailoring for each job application.
- β Analyzes job descriptions
- β Tailors resume content automatically
- β Supports multiple resume versions
- β PDF parsing and generation
Comprehensive Excel-based tracking system for all applications.
- β Real-time application logging
- β Job details and timestamps
- β Status tracking (Success/Failed/Skipped)
- β Unfilled fields tracker for optimization
| Feature | Description |
|---|---|
| Easy Apply Detection | Automatically finds and clicks Easy Apply buttons |
| Multi-Step Forms | Handles complex multi-page application forms |
| Smart Field Filling | Matches form fields to your profile intelligently |
| Resume Upload | Automatically uploads appropriate resume |
| Error Recovery | Handles failed applications gracefully |
| Feature | Description |
|---|---|
| Human Behavior Simulation | Random typing speeds, mouse movements, scrolling |
| Reading Patterns | Simulates reading job descriptions |
| Variable Delays | Random wait times between actions |
| Browser Fingerprinting | Uses real Chrome profile with persistent cookies |
| Navigator Spoofing | Hides automation markers from detection |
| Feature | Description |
|---|---|
| Job Tracker | Excel file with all application details |
| Unfilled Fields Log | Tracks questions that need manual answers |
| Detailed Logging | Complete console logs with timestamps |
| Success Metrics | Track application success/failure rates |
- Python 3.10+ - Core development language
- Playwright - Browser automation framework
- Chromium - Persistent browser context for stealth
| Module | Technology | Purpose |
|---|---|---|
| Resume AI | Google Gemini API | AI-powered resume tailoring |
| Form Intelligence | Pattern Matching | Smart field detection and filling |
| Behavior Simulation | Custom Algorithms | Human-like interaction patterns |
- Pandas - Data manipulation and analysis
- OpenPyXL - Excel file generation with formatting
- PyPDF2 - Resume parsing and extraction
- Python-dotenv - Secure environment variable management
- Environment Variables - Secure credential storage
- Git Ignore - Protected sensitive data
- User Config - Customizable profile and answers
JOB-EZ/
βββ main.py # Main entry point
βββ setup_login.py # LinkedIn authentication setup
βββ requirements.txt # Python dependencies
βββ .env # Environment variables (not tracked)
βββ .gitignore # Git exclusions
βββ data/
β βββ chrome_profile/ # Persistent browser profile
β βββ logs/ # Application logs
β βββ resumes/ # Resume files
β βββ job_tracker.xlsx # Application history
β βββ unfilled_fields_tracker.xlsx # Optimization data
βββ src/
βββ bot.py # Core automation logic
βββ config.py # Configuration settings
βββ llm_engine.py # AI resume tailoring
βββ logger.py # Logging utilities
βββ resume_manager.py # Resume handling
βββ utils.py # Humanization utilities
βββ user_config.py # User profile (not tracked)
βββ user_config_example.py # Template for user config
- β Python 3.10 or higher
- β Google Chrome browser
- β LinkedIn account
- β Google Gemini API key (optional, for resume AI)
git clone https://github.com/Mithurn/JOB-EZ.git
cd JOB-EZ# Install Python packages
pip3 install -r requirements.txt
# Install Playwright browsers
playwright installCreate .env file in root directory:
GEMINI_API_KEY="your_gemini_api_key_here"
LINKEDIN_USERNAME="your_linkedin_email"
LINKEDIN_PASSWORD="your_linkedin_password"Create src/user_config.py from template:
cp src/user_config_example.py src/user_config.pyEdit src/user_config.py with your details:
PROFILE = {
"first_name": "John",
"last_name": "Doe",
"email": "john@example.com",
"phone": "+1234567890",
"city": "San Francisco",
# ... add more fields
}
ANSWERS = {
"authorized to work": "Yes",
"require sponsorship": "No",
# ... add more Q&A pairs
}python3 setup_login.pyThis opens a browser window where you log into LinkedIn. Session cookies are saved for future use.
python3 main.py- π Job Discovery - Loads your LinkedIn job search results
- π― Smart Application - Clicks Easy Apply and navigates forms
- βοΈ Auto-Fill - Fills all form fields from your profile
- π Resume Upload - Uploads appropriate resume version
- β Submit - Completes application (or dry-run mode)
- π Track - Logs to Excel tracker
Edit src/config.py:
DRY_RUN = True # Test mode (doesn't submit)
MAX_APPLICATIONS = 50 # Limit applications per run
CHROME_USER_DATA = "..." # Browser profile pathMultiple Resume Support:
Place resumes in data/resumes/:
resume_fullstack.pdfresume_frontend.pdfresume_backend.pdf
Custom Form Answers:
Add to user_config.py:
ANSWERS = {
"years of experience": "3",
"bachelor degree": "Yes",
"willing to relocate": "No",
}π Launch Chrome with anti-detection settings
β Persistent profile (real cookies & history)
β Disable automation flags
β Inject JavaScript navigator spoofing
π Navigate to LinkedIn job search URL
β Scrape Easy Apply job listings
β Extract job details (title, company, URL)
β Filter already-applied jobs
π― For each job:
β Click Easy Apply button
β Wait for modal to load
β Enter multi-step form loop:
βοΈ Fill text inputs (name, email, phone)
β
Select radio buttons (Yes/No questions)
π Handle dropdowns (experience, education)
π Upload resume
β‘οΈ Click Next/Review/Submit
β Track result to Excel
π Log unfilled fields to tracker
β Analyze which questions weren't auto-filled
β Suggest additions to user_config.py
β Continuous improvement loop
- Input Field:
"First Name" - Bot Action: Fills
"John"fromPROFILE["first_name"]
- Input Field:
"Years of Python Experience" - Bot Logic: Matches keyword "python" β Fills from
PROFILE["python"]
- Input Question:
"Are you authorized to work in the US?" - Bot Logic: Matches "authorized to work" β Selects
"Yes"fromANSWERS
- Job Title:
"Full Stack Developer" - Bot Action: Uploads
resume_fullstack.pdf
- β Modal Detection Fix - Waits for Easy Apply modal before interaction
- β Scoped Button Search - Searches within modal instead of entire page
- β Enhanced Click Logic - Direct Playwright clicks with proper error handling
- β Better Wait Times - Improved delays between form steps
- β Debug Output - Shows available buttons when stuck
- β Error Recovery - Graceful handling of missing fields
- π Fixed infinite resume upload loop
- π Fixed "Next" button not being detected
- π Fixed modal loading timeout issues
- π Fixed button search finding wrong elements
Issue: VS Code shows import warnings
Solution: Environment mismatch - packages installed in different Python version
Fix:
# Use the Python where packages are installed
which python3
pip3 list | grep playwrightIssue: Jobs being skipped with "No modal" message
Solution: Job requires external application (not Easy Apply)
Note: Bot automatically skips these
Issue: Some form fields not auto-filled
Solution: Check data/unfilled_fields_tracker.xlsx
Fix: Add missing fields to src/user_config.py
Issue: LinkedIn showing CAPTCHA or "unusual activity"
Solution: Reduce application speed, increase delays
Fix: Adjust human_sleep() timing in src/utils.py
- π Multi-platform support (Indeed, Glassdoor)
- π§ ML-based field prediction
- π§ Email integration for application tracking
- π Real-time notifications
- π€ Advanced AI resume generation
- π Application analytics dashboard
- π― Job match scoring
- π¬ Auto-reply to recruiter messages
- βοΈ Cloud deployment option
- π₯ Multi-user support
- π± Mobile app companion
- π Web dashboard interface
Full-Stack Developer & AI Automation Specialist
- π Portfolio: mithurnjeromme.vercel.app
- πΌ LinkedIn: linkedin.com/in/mithurn-jeromme-s-k
- π§ Email: mithurnjeromme172@gmail.com
- π Phone: +91 8056687515
Educational & Research Purposes Only
This tool is designed for:
- β Learning browser automation
- β Understanding AI-powered workflows
- β Personal productivity enhancement
Important Notes:
β οΈ Use responsibly and ethicallyβ οΈ Respect LinkedIn's Terms of Serviceβ οΈ Be mindful of automation rate limitsβ οΈ Automated activity may violate platform policies
The developer is not responsible for misuse or policy violations.
MIT License - See LICENSE file for details
