Scrape LinkedIn jobs, score them against your resume with the AI provider of your choice (Anthropic, DeepSeek, Gemini, OpenAI, Llama, or any OpenAI-compatible endpoint), and get a personalised skill gap study plan. Works for any profession, any location.
| Mode | What you get |
|---|---|
| 🔍 Scraper Only | Jobs → CSV with title, company, location, salary, URL |
| 🎯 Scraper + AI Score | Above + fit score, response probability, matched/missing skills, verdict |
| 🧠 Full Analysis | Above + skill gap clusters ranked by score boost + 4-week study plan |
- Choose your AI provider & model from dropdowns — Anthropic, DeepSeek, Gemini, OpenAI, Llama, or a custom OpenAI-compatible endpoint
- 🔬 Test Run — a ~30s preflight: logs in, scores one real job, then cleans up. Run it before committing to a full scrape
- Speed control — Fast / Balanced / Safe pacing (all keep human-like jitter to avoid rate limits)
- Parallel AI scoring — jobs are scored concurrently (worker count auto-tuned per provider), so scoring is near-instant
- Jobs sorted by fit score inside 3 salary tabs: Annual / Hourly / Not Listed
- Stop mid-run and save partial results; Run starts a clean new session
- Works on macOS, Linux, and Windows (no WSL needed)
- Windows:
setup.batcreates a one-click Desktop shortcut that launches the dashboard (and self-installs any missing packages)
git clone https://github.com/jarvez31/LinkedinPython
cd LinkedinPython
# Create a .env file with your credentials:
cp .env.example .env
# Edit .env — add your LinkedIn + LLM credentials
docker compose up --buildOpen http://localhost:5000. Works identically on Windows, macOS, and Linux.
macOS / Linux
git clone https://github.com/jarvez31/LinkedinPython
cd LinkedinPython
bash setup.shWindows
git clone https://github.com/jarvez31/LinkedinPython
cd LinkedinPython
setup.batEdit the .env file and fill in your details:
LINKEDIN_EMAIL=your-email@example.com
LINKEDIN_PASSWORD=your-password
# Provider: anthropic | deepseek | gemini | openai | llama | custom
LLM_PROVIDER=anthropic
LLM_MODEL=claude-sonnet-4-6
LLM_API_KEY=sk-ant-api03-...
# Custom endpoints only (deepseek/gemini/llama are routed automatically):
# LLM_BASE_URL=https://api.openrouter.ai/v1
You can also pick the provider, model, and API key directly in the dashboard — no
.envedit required. Non-Anthropic providers use theopenaipackage (already inrequirements.txt).
source venv/bin/activate # macOS / Linux
venv\Scripts\activate # Windows
python app.pyOpen http://localhost:5000 in your browser.
Before a full run, verify everything works:
python smoke_test.py- Select a mode in the dashboard
- Enter your LinkedIn credentials (pre-filled from
.env) - Set keywords, location, pages per keyword, time filter, and Speed (Fast / Balanced / Safe)
- Enter your profession or field — the AI uses this to tailor scoring and the study plan
- Upload your resume (PDF or DOCX) — required for scoring modes
- Pick your AI provider & model and enter the API key (pre-filled from
.env) — required for scoring modes - (Recommended) Hit 🔬 Test Run first — logs in, scores one job, confirms everything works in ~30s
- Click Run Pipeline — watch the live log (including live token counts per scored job)
- Hit ⚠ Stop to halt and save partial results, ↺ Reset to start fresh
- Download output files or browse the salary tabs
Saved to outputs/ folder.
| File | Contents |
|---|---|
job_results_YYYY-MM-DD.csv |
Jobs in 3 sections by salary type, sorted by fit score |
skill_clusters.txt |
Skill gaps ranked by how much learning each one boosts your score |
study_plan.txt |
4-week day-by-day learning roadmap tailored to your gaps |
- Python 3.9+
- A LinkedIn account
- An API key for one AI provider (scoring modes only): Anthropic, DeepSeek, Gemini, OpenAI, Llama, or any OpenAI-compatible endpoint. DeepSeek is the cheapest; Anthropic ~$5 covers 250–300 scored jobs.
Secrets are stored in
.env(gitignored). Preferences (keywords, location, profession) are saved toconfig.jsonfor convenience.
| Mode | Cost |
|---|---|
| Scraper Only | Free |
| Scraper + AI Score (100 jobs) | ~$1.00-2.00 |
| Full Analysis (100 jobs) | ~$1.50-2.50 |
├── app.py ← Flask server + full pipeline (scrape, score, clusters, plan)
├── dashboard.html ← Browser UI
├── launch_dashboard.bat ← Windows one-click launcher (Desktop shortcut target; self-heals deps)
├── smoke_test.py ← Pre-flight dependency check
├── clean_jobs.py ← Remove null-description jobs from data files
├── setup.sh / setup.bat ← One-command setup (Windows setup.bat also creates the Desktop shortcut)
├── requirements.txt
├── .env.example ← Template for your credentials
│
├── data/ ← Job databases (gitignored)
├── outputs/ ← Generated files (gitignored)
└── attachments/ ← Resume uploads (gitignored)
Want the full picture? See ARCHITECTURE.md for how a run flows end-to-end, the modes, the supported AI providers, and the HTTP endpoints.
- Uses Playwright (headless Chromium) with rate limiting — works on residential IPs, not cloud servers
- Speed tiers keep human-like randomness; if the browser session dies, the scrape auto-aborts and saves partial results (no more multi-hour hangs)
- Scoring runs in parallel with a per-provider auto-tuned worker count; the live log shows token counts per job
- Jobs deduplicated by ID on every run — re-runs only add new jobs
- Salary auto-classified: annual / hourly / missing
- Run
python smoke_test.py(or the in-app Test Run) before your first full pipeline to catch setup issues early