A Python-based LinkedIn job application bot that automates the job application process using Selenium and OpenAI's GPT-3.5.
This tool is provided for educational purposes only. Automated job applications may violate LinkedIn's terms of service. Use at your own risk.
Important: For security reasons, we strongly recommend creating a dedicated LinkedIn account for this bot. This helps:
- Protect your main professional account from potential restrictions
- Isolate bot activity from your personal networking
- Prevent accidental applications to positions you're not interested in
- Maintain a clean separation between automated and manual job applications
To create a new account:
- Use a different email address than your main LinkedIn account
- Complete the basic profile information
- Add minimal professional details to avoid triggering LinkedIn's security measures
- Use this account exclusively for the bot
Important: Before running the bot, we strongly recommend:
- Manual Applications First:
- Apply to 3-5 jobs manually on LinkedIn
- Make sure to apply to jobs that require resume upload
- This ensures your LinkedIn profile has basic information saved
- Helps the bot handle future applications more effectively
- Creates a baseline for LinkedIn's application format
The manual applications help because:
- LinkedIn saves your basic information from these applications
- It creates a history of normal application behavior
- Provides fallback responses if the bot encounters issues
- Reduces the risk of account flags for unusual activity
- Clone this repository
- Install the required dependencies:
pip install -r requirements.txt
- Configure your settings in
config.yaml
Run the bot with:
python main.pyThe bot supports several command-line arguments:
# Run with default settings (using AI for responses)
python main.py
# Run without AI/LLM (using predefined responses only)
python main.py --no-llm
# Run with strict job title search (exact matches only)
python main.py --strict-title
# Run in debug mode with verbose output
python main.py --debug
# Run with a specific configuration file
python main.py --config custom_config.yaml--no-llm: Use predefined responses instead of AI-generated ones--strict-title: Enable strict job title search (wraps job titles in quotes for exact matches)--debug: Enable verbose logging for troubleshooting--config: Specify a custom configuration file path
Example job searches with and without strict title mode:
# Normal mode (--strict-title not used)
Job Title: Software Engineer
→ Matches: "Software Engineer", "Senior Software Engineer", "Software Engineer II", etc.
# Strict mode (--strict-title used)
Job Title: Software Engineer
→ Matches: Only exact "Software Engineer" positions
The bot can operate in two modes:
-
AI Mode (Default)
- Uses OpenAI's GPT-3.5 to generate personalized responses
- Requires an OpenAI API key in config.yaml
- Provides more natural and context-aware answers
- Better at handling complex or unexpected questions
- Higher computational resource usage and carbon footprint
- Incurs API costs for each response
-
Predefined Mode (--no-llm)
- Uses a set of predefined responses for common questions
- No API key required
- Faster and more predictable
- Limited to common application questions
- Good for testing or when API access is not available
- More environmentally friendly (no additional compute resources needed)
- Zero operational costs
When choosing between AI and predefined modes, consider:
-
Environmental Impact
- AI Mode: Each response requires significant compute resources
- Predefined Mode: Minimal environmental impact, using only basic operations
-
Resource Efficiency
- AI Mode: Higher latency, API costs, and resource usage
- Predefined Mode: Instant responses, no external dependencies
-
Cost Effectiveness
- AI Mode: Costs scale with usage (OpenAI API charges)
- Predefined Mode: Free to use, no ongoing costs
Choose the mode that best aligns with your sustainability goals and practical needs.
The bot will:
- Log into your LinkedIn account
- Search for jobs based on your criteria
- Apply to matching positions using the Easy Apply feature
- Generate responses to application questions (AI-powered or predefined)
- Track all applications in a CSV file
Edit the config.yaml file to customize:
- LinkedIn credentials
- Job search criteria
- Application preferences
- OpenAI API key (optional, only needed for AI mode)
- Personal information for applications
- Resume and cover letter paths
- Automated job search and application
- Smart response generation (AI or predefined)
- Job fit evaluation
- Application tracking
- Session persistence
- Anti-detection measures
- Debug mode for troubleshooting
- The bot includes built-in delays to mimic human behavior
- It handles various types of application questions (text, numeric, multiple choice)
- Applications are tracked in a CSV file for reference
- Failed applications are logged separately for review
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the GPL-3.0 License - see the LICENSE file for details.
This project builds upon the work of several contributors:
- Original concept: Nathan Duma
- Significant improvements: Micheal Dingess
- Enhanced features: voidbydefault with EasyApplyBot
- Current development: liviaellen
If you encounter any issues, please file them on the GitHub issues page.