A small robot on your computer that helps you apply to jobs on LinkedIn — automatically.
You tell it what job you want. It opens Chrome, logs into LinkedIn, finds Easy Apply jobs, fills in your details, uploads your CV, and clicks submit. It also keeps a list of jobs it already applied to so it does not apply twice.
Cost: Free. No monthly fee. You only need your computer, Chrome, internet, and a LinkedIn account.
- Reads your settings (
config.json+.env) - Opens Chrome and logs into LinkedIn
- Searches for jobs (e.g. "frontend developer" in "United Kingdom")
- For each Easy Apply job:
- Opens the job
- Fills your name, email, phone, city, etc.
- Uploads your CV (PDF) and photo (PNG/JPG) if the form asks
- Answers simple questions (some from your CV automatically)
- Clicks Submit — or skips if the form is too hard
- Saves every successful application to
applications.json
It waits between clicks so it does not go too fast (that helps avoid LinkedIn blocking you).
- Python 3.10+
- Google Chrome
- LinkedIn account (email + password)
- Your CV (PDF) and optional photo (PNG/JPG)
Open PowerShell in the project folder:
cd linkedin-easy-apply
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txtcopy .env.example .envEdit .env:
LINKEDIN_EMAIL=your-email@example.com
LINKEDIN_PASSWORD=your-password
Never share
.envor put your password inconfig.json.
copy config.example.json config.jsonEdit config.json. The important parts:
| Setting | What it means | Example |
|---|---|---|
search.keywords |
Job title to search | "frontend developer" |
search.location |
Where to search | "United Kingdom" |
search.work_type |
2 = Remote |
"2" |
max_applications |
How many jobs per run | 5 |
resume_path |
Full path to your CV PDF | "C:/path/to/cv.pdf" |
photo_path |
Full path to your photo | "C:/path/to/photo.png" |
saved_answers |
Your name, email, phone, city, etc. | see example file |
Always activate the virtualenv first:
.\venv\Scripts\Activate.ps1python main.py --dry-runChrome opens, logs in, searches jobs — but does not apply. Use this first.
python main.py --validate-onlypython main.py --confirmAsks "Proceed?" before sending applications.
python main.pyApplies without asking.
| Flag | What it does |
|---|---|
--dry-run |
Test login + search only |
--confirm |
Ask before applying |
--max-applications 3 |
Only apply to 3 jobs this run |
--pause-on-challenge |
Wait for you to solve CAPTCHA / 2FA |
--fresh-login |
Ignore saved session, log in again |
--debug |
Show detailed logs |
Example:
python main.py --confirm --pause-on-challenge --max-applications 5- LinkedIn email
- LinkedIn password
- search — what jobs to look for
- saved_answers — name, email, phone, city, cover letter, start date
- resume_path — your CV file
- photo_path — your photo (for forms that ask for a picture)
- custom_answers — extra Q&A for tricky form questions
Example custom_answers:
"custom_answers": {
"years of experience with react": "4",
"are you authorized to work in the uk": "Yes"
}If the bot cannot answer a question, it logs something like:
Unanswered form question (add to custom_answers): "..."
Copy that question into custom_answers with your answer.
If you set resume_path, the bot reads your PDF and tries to answer questions like:
- "How many years of experience with Angular?"
- "Are you authorized to work in the UK?"
Priority: custom_answers → CV profile → saved_answers
After each run, check applications.json (or applications.csv if you configured that):
{
"job_title": "Frontend Developer",
"company_name": "Some Company",
"job_url": "https://...",
"date_applied": "2026-07-03 12:00:00",
"status": "applied"
}- Free to use — no API keys, no subscription for this tool
- LinkedIn may not like bots — use reasonable delays (30+ seconds between applications)
- Not every job works — complex forms with many steps or weird questions get skipped
- CAPTCHA / 2FA — run with
--pause-on-challengeand complete it in the browser - Session saved — after first login, cookies are stored in
.linkedin_session/so you log in less often
| Problem | Fix |
|---|---|
| Login fails | Check .env email/password. Try --fresh-login |
| CAPTCHA appears | Run with --pause-on-challenge |
| No jobs found | Change keywords or location in config.json |
| Form not filled | Update saved_answers with your real details |
| Weird question skipped | Add it to custom_answers in config.json |
ModuleNotFoundError: selenium |
Activate venv and run pip install -r requirements.txt |
main.py ← start here (run this)
config.json ← your job search + personal details
.env ← your LinkedIn login (secret)
linkedin_automation.py ← browser robot (login, apply, fill forms)
resume_profile.py ← reads your CV to answer questions
tracker.py ← saves applied jobs list
applications.json ← output: jobs you applied to
pip install -r requirements-dev.txt
pytestFree bot that applies to LinkedIn Easy Apply jobs for you, using your CV and saved answers, and keeps track of what it already did.