Skip to content

LinuxUser255/LinkedIn_Apply

Repository files navigation

LinkedIn Job Application Bot

linkedin-logo-02

Built with

PythonLogo SeleniumLoge

Selenium docs

A Python bot that will apply to the, "Easy Apply", jobs based on your preferences.

LinkedIn Bot Demo The LinkedIn bot in action - showing the Easy Apply process with IDE debugging view


Table of Contents


Features

Using only Chrome and Chromedriver (no Firefox):

  • Ability to filter jobs by:
    • Easy Apply, location (Worldwide, Europe, Poland, etc.), keyword (python, react, node), experience, position, job type, and date posted.
  • Apply based on your salary preference (works best for U.S. job offers).
  • Automatically apply to single-page jobs requiring just CV and contact.
  • Automatically apply to multi-page offers using saved LinkedIn info (experience, legal rights, resume, etc.).
  • Output results to data/ text files for later review.
  • Print links for jobs the bot couldn't apply to due to extra requirements (for manual follow-up).
  • Randomized time breaks between actions to avoid thresholds.
  • Automatically runs in the background (headless mode optional).
  • Chrome-only, runs based on your preferences in config.py or .env.
  • Optional: follow or not follow company after successful application.

Tests

There is a tests folder to verify your setup and integration:

  • python3 tests/setup_tests.py
    • Outputs whether Python, pip, selenium, and dotenv are installed.
  • python3 tests/selenium_test.py
    • Verifies Selenium can retrieve data from a website.
  • python3 tests/LinkedinTest.py
    • Tries to log into your LinkedIn account using the CHROME_PROFILE_PATH from .env.
    • If it errors, ensure the path exists and that you have created and logged in to your LinkedIn account once.

Requirements

  • ChromeDriver
  • Create a .env from .env.example and adjust values, or edit config.py directly.
  • Outputs are written to data/.

Setup Instructions

Credentials and Profile

There are two ways to provide credentials and applicant info.

The recommended approach is to keep secrets outside the repo in a profile directory.

1) Create and edit .env in this project

cp .env.example .env

# Then open .env and set at minimum:
# Path where Chrome will store/reuse your session (choose any directory you own)
CHROME_PROFILE_PATH="$HOME/.config/LinkedIn_Apply_Profile"

# Optional if your user-data-dir has multiple sub-profiles (e.g., "Default", "Profile 1")
CHROME_PROFILE_DIR="Default"

# Headless off for visibility (optional)
HEADLESS=false

# You may put credentials here, but prefer the profile credentials file below
LINKEDIN_EMAIL=""
LINKEDIN_PASSWORD=""

2) Preferred: Create secrets in your profile directory

  • Make the directory if it does not exist and point .env to it via CHROME_PROFILE_PATH.
  • Copy the provided template and fill it in locally (do not commit secrets):
mkdir -p "$HOME/.config/LinkedIn_Apply_Profile"
cp config_forms/credentials.json "$HOME/.config/LinkedIn_Apply_Profile/credentials.json"

  • Make sure you succesfully created your config -> "$HOME/.config/LinikedIN_Apply_Profile/credentials.json
  • This is how, and from where your credentials and job search settings are sourced.
  • Edit "$HOME/.config/LinkedIn_Apply_Profile/credentials.json" and fill the fields you need (all are optional, examples shown as empty strings or booleans):
  • Optionally, you could code them into config.py. Warning, doing so may make it easier to unintentionally share your creds

credentials.json

{
  "LINKEDIN_EMAIL": "",
  "LINKEDIN_PASSWORD": "",
  "PHONE": "",
  "RESUME_PATH": "",
  "CITY": "",
  "STATE": "",
  "ZIP": "",
  "COUNTRY": "",
  "ADDRESS": "",
  "PORTFOLIO_URL": "",
  "GITHUB_URL": "",
  "WEBSITE_URL": "",
  "WORK_AUTH": true,
  "SPONSORSHIP": false,
  "RELOCATE": false,
  "EXPECTED_SALARY": "",
  "START_DATE": "",
  "YEARS_EXPERIENCE": "",
  "HEADLESS": false,
  "CHROME_PROFILE_DIR": "Default"
}

Notes:

  • The app loads variables in this order, with later sources overriding earlier ones:
  1. Project .env
  2. "$CHROME_PROFILE_PATH"/credentials.env or .env (if present)
  3. "$CHROME_PROFILE_PATH"/credentials.json
  • If CHROME_PROFILE_PATH points to a specific sub-profile (e.g., ends with "Default" or "Profile 1"),
  • it is auto-detected; otherwise the default sub-profile "Default" is used, or set CHROME_PROFILE_DIR explicitly.
  • Ensure RESUME_PATH points to an existing file if you want automatic resume upload.
  • Do not commit secrets. Keep them only in your profile directory.

Installation and Use

Clone the repository & install requirements

git clone https://github.com/LinuxUser255/LinkedIn_Apply.git
cd LinkedIn_Apply
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

Run tests (optional)

python3 tests/setup_tests.py
python3 tests/selenium_test.py
python3 tests/LinkedinTest.py

RUN THE BOT

python3 main.py

Notes

  • Download the ChromeDriver matching your Chrome version and place it in the root the of the project.
  • Headless behavior can be toggled via config.headless or HEADLESS in .env.

Contributing

Contributions are welcome! Please follow these guidelines:

Development Workflow

1. Fork the repository

git clone https://github.com/YOUR_USERNAME/LinkedIn_Apply.git
cd LinkedIn_Apply

2. Create a new branch from dev for your feature:

git checkout dev
git pull origin dev
git checkout -b feature/your-feature-name

4. Make your changes and test thoroughly & Commit with clear, descriptive messages:

git add .
git commit -m "Add feature: description"

5. Push to your fork:

git push origin feature/your-feature-name

6. Open a Pull Request against the dev branch (not main)

Guidelines

  • All PRs should target the dev branch
  • The main branch is for stable releases only
  • Follow existing code style and conventions
  • Test your changes before submitting
  • Update documentation if needed
  • Do not commit credentials, secrets, or personal information

Questions or Issues?

Feel free to open an issue for bugs, feature requests, or questions.


About

Python bot to automate job applications using the 'Easy apply' feature.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published