Auto Job Applier is a LinkedIn job-search and application assistant with a powerful Python automation bot, a scalable FastAPI backend, and a modern React admin dashboard built for production SaaS environments.
The backend controls the bot, stores configuration, manages resumes, streams live logs, and exposes dashboard APIs. The frontend is a Vite/React dashboard for editing search rules, uploading resumes, viewing applied jobs, and monitoring the bot in real-time.
The project has been refactored into a scalable production SaaS structure with clear separation of concerns.
.
├── runAiBot.py # Main LinkedIn automation bot
├── server/ # FastAPI backend (layered architecture)
│ ├── api/routes/ # API route definitions
│ ├── auth/ # Authentication logic
│ ├── bot/ # Bot controller and process management
│ ├── config/ # Configuration management
│ ├── database/ # MongoDB client and migrations
│ ├── middleware/ # CORS and request middleware
│ ├── models/ # Data models and schemas
│ ├── repositories/ # Database access layer
│ ├── resumes/ # Resume file registry
│ ├── services/ # Business logic layer
│ └── utils/ # Shared utilities
├── frontend/ # React + Vite dashboard
│ ├── src/api/ # API client
│ ├── src/components/ # React components (auth, dashboard, jobs, etc.)
│ ├── src/context/ # React Context (Auth)
│ └── src/styles/ # CSS and styling
├── config/ # Legacy bot settings
├── modules/ # Bot core logic (scraping, AI, resume tools)
└── docs/ # Architecture and planning documentation
- Python: 3.10+
- Node.js: 18+
- Browser: Google Chrome installed (with ChromeDriver-compatible Selenium setup)
- Database: MongoDB Atlas or local MongoDB instance (Recommended for SaaS operation, falls back to local files if not set)
Copy the example environment file:
Copy-Item .env.example .envEdit .env and set the required variables:
ADMIN_USER=admin
ADMIN_PASS=change-this-password
LINKEDIN_USER=your-linkedin-email
LINKEDIN_PASS=your-linkedin-password
USE_AI=true
AI_PROVIDER=openai
LLM_API_KEY=your-api-key
LLM_MODEL=gpt-4o-miniOptional MongoDB (Highly Recommended):
MONGODB_URI=mongodb+srv://USER:PASS@CLUSTER.mongodb.net/?retryWrites=true&w=majority
MONGODB_DB=auto_job_applierFrom the project root, create a virtual environment and install backend/bot dependencies:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements-bot.txt -r requirements-ui.txt(Note: If PowerShell blocks virtualenv activation, run Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass first).
cd frontend
npm install
cd ..Backend: Start the FastAPI server from the project root:
.\.venv\Scripts\Activate.ps1
uvicorn server.main:app --reload --host 127.0.0.1 --port 8000Backend URL: http://127.0.0.1:8000
Frontend: Open another terminal:
cd frontend
npm run devFrontend URL: http://127.0.0.1:5173 (Proxies /api requests to backend)
1. Build the Frontend:
cd frontend
npm run build
cd ..2. Start the Backend Server:
.\.venv\Scripts\Activate.ps1
uvicorn server.main:app --host 0.0.0.0 --port 8000When frontend/dist exists, server/main.py serves the built frontend directly from the FastAPI app.
Production URL: http://127.0.0.1:8000
When you launch the web dashboard for the first time, you will be guided through a secure 5-step Onboarding Wizard to configure your automation environment:
- Connect LinkedIn: Securely specify your LinkedIn login email and password (used by Selenium to log in and apply).
- Upload Resume: Upload your primary resume (PDF or DOCX). You can manage multiple resumes later in the dashboard.
- Search Rules: Define keywords (e.g. "Frontend Developer") and locations (e.g. "Remote") to target your search.
- Configure AI: Configure OpenAI, Gemini, or Anthropic with your API key to enable smart questionnaire handling.
- Start Automation: Complete the wizard to enter the main dashboard workspace.
Once onboarding is completed, you can manage everything via the main dashboard:
- Overview: Monitor the bot's current status (Idle / Running / Errored), start or stop the bot with one click, view global statistics, and see smart setup warnings.
- Search Rules: Configure search terms, locations, experience level, and apply mode using modern chip selectors and status toggles.
- Resumes: Drag-and-drop new resumes, delete old ones, and select the default resume for active applications.
- Companies & Hiring Posts: View discovered companies and real-time scanned job posts.
- Application Logs & History: Track Selenium runs in real-time, filter application results by status, and clear history with double-confirmation popups.
Alternatively, run the bot directly from the CLI:
.\.venv\Scripts\Activate.ps1
python runAiBot.py- Login uses old password: The first admin password is persisted in
server/auth_state.json. Change it from the dashboard settings page, or delete the file during local development to reseed from.env. - MongoDB not connected: If
MONGODB_URIis empty or unreachable, the app automatically falls back to local file storage. Check status athttp://127.0.0.1:8000/api/mongo/health. - Chrome/Selenium errors: Ensure Chrome is up to date. If profile issues occur, set
safe_mode = Trueinsideconfig/settings.py. - Resume missing: Ensure you upload and set a default resume from the dashboard
Resumestab. The app will sync the path to the bot configuration.