Loading repository data…
Loading repository data…
beatwad / repository
AI-powered LinkedIn and Indeed job application bot with Playwright automation, LLM integration, data anonymization, and Telegram reporting. Applies to ALL job types (not just Easy Apply), generates custom resumes, and provides skill statistics.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
🤖 AI-powered bot that auto-applies to jobs on LinkedIn and Indeed. It parses your resume, generates tailored resumes per vacancy, answers application questions using an LLM (Gemini, OpenAI, Claude, Ollama), gathers statistics of the most important for employers skills and delivers detailed Telegram reports — fully automating your job search.
This is an active fork of the original Jobs_Applier_AI_Agent_AIHawk project, which is currently inactive. This version introduces numerous new features, bug fixes, and performance improvements.
This bot uses the LinkedIn and Indeed UIs to apply for jobs. Both sites frequently change their UI, so the bot may lose some of its functionality at any time. I have no time to check this bot every day, so if you face any malfunction or have some questions about bot - feel free to open issue or contact me in Telegram chat 🚀
Please ⭐ the repository if you find it useful. This is the only thing that motivates me to continue developing the project.
Indeed support is functional but has important limitations compared to LinkedIn:
For these reasons, LinkedIn is strongly recommended over Indeed for automated job applications. Indeed support may improve in the future, but currently it is not well-suited for automation.
But if you're planning to use Indeed for searching jobs without auto-applying - it's a great site. You can use it for searching suitable jobs and then apply for them manually.
This project enhances the original codebase with several powerful new features:
JOB_SITE setting in config/app_config.py.Ctrl+X and continue when ready, giving you full control over execution without stopping the entire process.Jobs label, and recording all message decisions to a persistent ledger for dashboard review.data/resumes/resume_text.txt is missing but a PDF resume is present in data/resumes/, the bot automatically extracts the text from the PDF and generates a properly formatted resume_text.txt using the LLM — no manual transcription needed..env file for better security.Clone repository and create virtual environment
# Clone the repository
git clone https://github.com/beatwad/LinkedIn-AI-Job-Applier-Ultimate.git
cd LinkedIn-AI-Job-Applier-Ultimate
Install dependencies
uv sync
Install additional software
# Install Chromium browser for Playwright
playwright install chromium
Clone repository
git clone https://github.com/beatwad/LinkedIn-AI-Job-Applier-Ultimate.git
cd LinkedIn-AI-Job-Applier-Ultimate
Build Docker image
docker build -t linkedin .
Run Docker container
docker run -v $(pwd)/data:/app/data \
-v $(pwd)/browser_session:/app/browser_session \
-v $(pwd)/logs:/app/logs \
linkedin
⚠️ IMPORTANT: When running from Docker:
HEADLESS_MODE = True in config/app_config.py. Docker containers don't support graphical interfaces, so the browser must run in headless mode.Secrets (.env file):
Create a .env file in the root directory by copying the example file:
cp .env_example .env
Now, fill in the required values in your .env file:
# Your LinkedIn credentials (used when JOB_SITE="linkedin" in app_config.py)
linkedin_email="your_linkedin_email@example.com"
linkedin_password="your_linkedin_password"
# Your Indeed credentials (used when JOB_SITE="indeed" in app_config.py)
indeed_email="your_indeed_email@example.com"
# Your LLM API Key (e.g., Gemini)
llm_api_key="your_llm_api_key"
# Optional proxy for LLM requests
llm_proxy="http://your_proxy_url:port"
# LLM endpoint URL (required for "openai_compatible", optional for "ollama")
llm_api_url="http://localhost:8000/v1"
# Your Telegram Bot Token for sending error messages and reports
tg_token="your_telegram_bot_token"
# Address of your chat in format "@name_of_your_chat"
tg_chat_id="@name_of_your_chat"
# ID of topic where bot will send error messages
# You can find out ID of the topic by copying the link to the topic in Telegram app and extracting the number before the last slash
# For example, if the link to the topic is https://t.me/channel_name/123/321, the ID of the topic is 123
tg_err_topic_id="[ID of error topic]"
# ID of topic where bot will send everyday report on the job applies done
tg_report_topic_id="[ID of report topic]"
Telegram options are optional. You can remove them from .env file and application will still be able to work but won't be able to set reports and error messages via Telegram.
Job Search Parameters (config/search_config.yaml):
Copy this file from `examples/config/search_confi