Version 3.0.0
Bulk download all candidate resumes from your Indeed Employer dashboard in one click. No extension, no manual export — just run and go.
- Run the script (or the
.exe) - Log in to your Indeed Employer account in the Chrome window that opens
- Choose your options (download mode, which jobs, status filter)
- Let it run — resumes are downloaded as PDFs, organized by job folder
That's it. On the next run, your session is remembered and already-downloaded CVs are skipped.
- 100% local — All data stays on your machine. Nothing is sent to any external server.
- No credentials stored — The script never sees or saves your password. You log in yourself in Chrome.
- Session cookies only — Saved locally in
logs/indeed_cookies.jsonto avoid re-login. They expire after ~24h. - Open source — You can read every line of code. No telemetry, no analytics, no tracking.
A pre-built executable is available in the dist/ folder — just download and run, no Python needed.
- Download
IndeedCVDownloader.exefrom thedist/folder - Double-click to run
- Log in to your Indeed Employer account in the Chrome window that opens
- Choose your options in the menu and start downloading!
No Python, no extension, no configuration needed.
git clone https://github.com/YasserLoukniti/indeed-cv-downloader.git
cd indeed-cv-downloaderpip install -r requirements.txtpython indeed_downloader.pycp .env.example .env.config- Automatic: Chrome opens, you log in once, cookies are captured and reused
- Session persistence: Saved cookies are validated on each run — no re-login until they expire
- Expiry detection: If cookies are invalid, the script asks you to log in again
- Backend (API) — Fast parallel downloads via Indeed's GraphQL API
- Frontend (Selenium) — Slower but more stable, simulates real browser clicks
- Single job — Navigate to a specific job, press Enter
- All jobs — Automatically fetches and processes every job from your dashboard
- Resume on interruption — Checkpoint system lets you stop and restart without losing progress
- Duplicate detection — Already downloaded CVs are skipped (by name and ID)
- New candidates only — On re-run, only downloads CVs added since last time
- Folder matching — Matches existing download folders to jobs by name and date
- Status filter — Filter jobs by Open, Paused, or Closed
- Old job filter — Jobs older than 2 years are skipped (Indeed archives data)
- Multi-pass fetch — Bypasses Indeed's 3000 candidate limit using multiple sort strategies
- Report generation — Creates
rapport_telechargement.txtwith stats per job
╔════════════════════════════════════════════════════════════╗
║ Indeed CV Downloader - Version Unifiee ║
╚════════════════════════════════════════════════════════════╝
MODE DE TELECHARGEMENT:
1. Backend (API) - Plus rapide, telechargements paralleles
2. Frontend (Selenium) - Plus stable, clics simules
MODE DE SELECTION DES JOBS:
1. Job unique - Vous naviguez vers le job souhaite
2. Tous les jobs - Parcourt automatiquement tous les jobs
STATUT DES ANNONCES A TRAITER:
1. Ouvertes uniquement
2. Suspendues uniquement
3. Fermees uniquement
4. Ouvertes + Suspendues
5. Toutes
145 jobs recuperes
Liste des jobs:
------------------------------------------------------------
1. [O] Business Developer
Date: 22-09-2025 | Candidats: 237
2. [P] Data Scientist
Date: 01-07-2025 | Candidats: 550
3. [F] Marketing Manager
Date: 15-06-2025 | Candidats: 120
------------------------------------------------------------
JOBS DEJA PRESENTS DANS LE DOSSIER DOWNLOADS:
============================================================
[NEW] Data Scientist
450 traites / 550 recuperes (+100 restants)
[OK] Marketing Manager (120/120)
Options:
[S] SkipAll - Ignorer TOUS les jobs existants
[N] NewOnly - Telecharger seulement les jobs avec nouveaux candidats
[K] KeepAll - Telecharger quand meme tous les jobs
Edit .env.config to customize parameters:
# Download speeds
DOWNLOAD_DELAY=0.5 # Delay after clicking download button
NEXT_CANDIDATE_DELAY=1.0 # Delay between candidates
# Download settings
MAX_CVS=3000 # Max CVs to download per job
PARALLEL_DOWNLOADS=10 # Parallel downloads (backend mode)
# Directories
DOWNLOAD_FOLDER=downloads # Where CVs are saved
LOG_FOLDER=logs # Logs and checkpointsindeed-cv-downloader/
├── indeed_downloader.py # Main script (single file, everything included)
├── dist/
│ └── IndeedCVDownloader.exe # Standalone executable
├── requirements.txt # Python dependencies
├── .env.config # Configuration (optional)
├── downloads/ # Downloaded CVs, organized by job
│ ├── Business Developer (22-09-2025)/
│ │ ├── Jean_Dupont_20251126_154317.pdf
│ │ ├── Marie_Martin_20251126_154320.pdf
│ │ ├── no_cv.txt # Candidates without CV
│ │ ├── stats.json # Job download statistics
│ │ └── checkpoint.json # Resume state for this job
│ └── rapport_telechargement.txt # Global download report
└── logs/
├── indeed_cookies.json # Auto-saved session cookies
└── checkpoint_unified.json # Global resume state
| Problem | Solution |
|---|---|
| Cookies expired | Just re-run — the script will detect it and ask you to log in again |
| Chrome won't open | Close all existing Chrome windows first |
| Jobs missing from list | Check if the page loaded correctly, increase PAGE_LOAD_DELAY |
| Downloads failing | Increase DOWNLOAD_DELAY in .env.config |
| Script interrupted | Re-run it — checkpoint picks up where you left off |
- For personal use only
- Respect Indeed's Terms of Service
- Only download CVs you have legitimate access to
- Handle candidate data responsibly per GDPR/privacy laws
MIT License - See LICENSE file for details
Pull requests welcome. For major changes, open an issue first.
Breaking Changes:
- Integrated authentication: No more browser extension or cookie conversion needed
- Removed
convert_cookies.pyandConvertCookies.exe(no longer needed) - Single script does everything
New Features:
- Auto-detect login status: Checks if saved cookies are still valid on startup
- Interactive login flow: Opens Chrome and waits for you to log in, then captures cookies automatically
- Cookie persistence: Saves cookies to
logs/indeed_cookies.jsonfor reuse across sessions
Improvements:
- Replaced all bare
except: passwith specific exception types - Added
PARALLEL_DOWNLOADSto configuration - Improved error handling throughout
- Cleaner code organization
- Download report generation (
rapport_telechargement.txt) - Job completion tracking with
stats.json - Archived candidates handling
- Auto-filter jobs older than 2 years
- Track candidates without CV (
no_cv.txt)
- Auto-close modals, normalized name matching, duplicate detection fixes
- Multi-pass fetch to bypass 3000 candidate limit
- Per-job checkpoint system
- Unified single script, interactive menu, HTML table parsing
- Initial release