This project creates an automated LinkedIn job application bot powered by AI agents that helps users find and apply to positions based on your CV/resume on LinkedIn using the Easy Apply feature.
🚧 Note: This project is still a work in progress. Features and functionality may change as development continues. Contributions and feedback are welcome! 🚧
- Powered by usebrowse: Built on usebrowse library for browser automation and AI agent integration
- Manual LinkedIn Authentication: Securely log in to LinkedIn with manual credential entry
- Automated Job Search: Searches specifically for Software Engineer positions
- Automated Application Submission: Completes and submits Easy Apply applications
- Application Tracking: Keeps track of applied jobs to avoid duplicates
- Python 3.11+
- Playwright (used by usebrowse) for browser interactions
- OpenRouter or any other LLM API provider (like OpenAI) for AI agent capabilities
- LinkedIn account
uv is on of the best things to happen to Python package management - it's the equivalent of npm for JavaScript.
Alternatively, you can use any package manager of your choice like conda or Poetry. The dependencies are in the toml file.
First, install uv using the standalone installer:
curl -LsSf https://astral.sh/uv/install.sh | shOr on Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"uv pip install pytest-playwrightplaywright installgit clone <repository-url>
cd job-app-botThen install the project dependencies:
uv syncCreate a folder called data in the root directory of the project.
mkdir dataAdd your resume/CV pdf to the data folder under the name resume.pdf.
This project uses OpenRouter as the LLM provider, which allows you to use any model from various providers (OpenAI, Anthropic, Google, etc.) through a single API.
Alternativly you can use any other LLM provider of your choice
- Create an account at https://openrouter.ai/
- Generate an API key from your dashboard
- Create a
.envfile in the project root:
OPENROUTER_API_KEY=your_api_key_here
OpenRouter gives you flexibility to choose from a wide range of models without being locked into a single provider.
Set the model name and other environment variables in the .env file, use env.example as a template.
Run the main script to start the job application process:
uv run main.pyThe bot will:
- Open a browser and navigate to LinkedIn 🌐
- Prompt you to manually sign in to your LinkedIn account 🔑
- Search for positions relevant to your cv/resume 🔍
- Apply to jobs with Easy Apply functionality ✅
- Skip jobs that require multiple steps or don't have Easy Apply ⏭️
- Save successful job applications to a CSV file 📝
You can customize the bot's behavior by modifying:
- 📄
main.py: Change the task instructions or agent configuration - 🔧
actions.py: Modify the specific actions the bot can perform - ⚙️
config.py: Update configuration settings