A self-hosted, AI-powered job search assistant. It fetches postings from multiple sources, scores each one against your personal profile, and serves a local web UI where you review matches and track your applications.
Self-hosted and private — your profile and job data stay on your machine. Only your profile text and job descriptions are sent to the AI provider you choose.
Download and double-click.
| Platform | Download | Then… |
|---|---|---|
| Windows | JobWise-Setup.exe | Double-click the downloaded file |
| Mac | JobWise-Mac.dmg | Open the DMG, then double-click Install JobWise |
A setup wizard walks you through your API keys, profile file, and optional AI import when the installer finishes. If your AI provider is configured, the wizard offers to import your profile immediately so it's ready when you open the app.
Mac note: macOS blocks apps from unidentified developers by default. If you see a warning, there are two ways to allow it:
- Right-click method (quickest): Right-click (or Control-click) the
.commandfile inside the DMG → Open → Open to allow it once.- System Settings method: If the right-click method doesn't show an "Open" option, open System Settings → Privacy & Security, scroll to the bottom, and click "Open Anyway" next to the blocked app. You may need to enter your Mac password.
After setup, to open JobWise each day:
- Windows — double-click
start.batin yourJobWisefolder (default:C:\Users\YourName\JobWise) - Mac — double-click
start.shin yourJobWisefolder (default:~/JobWise)
This opens a terminal window running the app. To stop JobWise, switch to that terminal and press Ctrl+C (or close the terminal window). Closing the browser tab alone does not stop it.
First run heads-up: The first time you click "Find New Jobs", JobWise fetches and scores a large batch of jobs. This can take 30–60 minutes depending on how many jobs are found and uses a significant number of AI tokens. If you hit a usage limit mid-way through, the run will stop automatically — just click "Find New Jobs" again later and it will pick up where it left off, only scoring the jobs it hasn't seen yet.
Already comfortable with Python and Git? See For Technical Users below for the manual setup.
- Multi-source fetching — Greenhouse, Lever, JSearch, and JobSpy (LinkedIn/Indeed)
- AI scoring — each job scored from both a hiring-manager and candidate perspective
- Hard-requirement filtering — titles, companies, remote type, salary, country, clearance, and industry filters applied before any AI tokens are spent
- Any AI provider — claude.ai (free with your subscription, no API key), Gemini, OpenAI, Anthropic, or local Ollama; no lock-in
- Multiple profiles — manage separate job searches side by side (e.g. different roles, markets, or seniority levels), each with independent scoring and history
- Application tracking — move jobs through a full pipeline (applied → phone screen → interviews → offer/rejected) and save bookmarks; saved and active-stage jobs are never auto-removed
- Incremental runs — only new jobs are fetched and scored on repeat runs
- Resume as profile — drop in your resume as
.txt,.md,.pdf, or.docxto get started instantly - Preferred companies — pin a per-profile list of companies that are always searched on every run, editable directly in the profile page
- Settings UI — configure AI provider, pipeline limits, job sources, scoring weights, and scheduler from the browser; changes sync to
config.yamland take effect immediately without restarting - Web UI — browse matches, edit your profile, view pipeline history, and choose from 9 color themes (Pine, Black, Forest, Midnight, Ocean, Sunset, Lavender, Linen, Fjord); mobile-friendly — accessible from any device on the same Wi-Fi network
- Scheduler — runs automatically via Windows Task Scheduler or cron
Job list — ranked matches for your profile, with AI scores from both the hiring manager's and your own perspective, salary, location, and quick-action buttons.
Job detail — full AI assessment, job description, salary range, and application stage tracker in one view.
Job database — every raw job fetched across all sources and profiles, with filtering by source, remote type, and score status.
Profile editor — structured profile with target titles, locations, work style, salary, and experience summary; editable directly in the browser.
If JobWise has saved you hours of mindlessly scrolling job boards (or at least made the hunt slightly less soul-crushing), consider buying me a coffee. It helps keep the project alive and the caffeine levels stable.
No pressure at all — the software is and always will be free. But if you land a great job with it, you know where to find me. 😄
-
Python 3.11+ — download here
-
A free RapidAPI account — for the JSearch job source
-
An AI provider — pick the one that fits you:
Option Cost What you need claude.ai Free (included in claude.ai subscription) A claude.ai Pro or Max subscription + Claude Code installed — see setup below Google Gemini Free tier available A free API key from aistudio.google.com OpenAI Paid A paid API key from platform.openai.com Anthropic Paid A paid API key from console.anthropic.com Ollama Free (runs on your computer) ollama.com — no account, no key, no internet
The easiest way to get started is the one-click installer — see the Quick Start section above. Download one file, double-click it, and the installer handles everything: Python (if not already installed), all packages, your API keys, and your profile. It takes about 5 minutes.
After setup, daily use:
- Windows — double-click
start.batin yourJobWisefolder - Mac — double-click
start.shin yourJobWisefolder
This opens a terminal window running the app. To stop JobWise, switch to that terminal and press Ctrl+C (or just close the terminal window). Closing the browser tab alone does not stop it.
Then click Find New Jobs on your profile to fetch and score the latest postings. The first search can take 30–60 minutes depending on how many jobs are found; repeat searches are much faster since only new postings are scored.
For help using the web UI, see the User Guide →
Manual setup steps (reference)
If you prefer to set up manually or something goes wrong with the wizard, here are the individual steps.
Download Python 3.11 or later from python.org. During installation, check "Add Python to PATH".
Download and unzip this project to any folder on your computer.
Open a terminal in the project folder:
python -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activate
pip install -r requirements.txtJSearch (job data — free):
- Create a free account at rapidapi.com
- Search for JSearch → Subscribe → select BASIC (Free) — 200 requests/month
- Copy your
X-RapidAPI-Keyfrom the dashboard - Note the day-of-month you signed up (e.g. signed up on the 5th → you'll use
5in config)
AI provider — pick one:
| Provider | Cost | Notes |
|---|---|---|
| claude.ai | Free with claude.ai Pro/Max subscription | No API key — see setup below |
| Google Gemini | Free tier available | Get a key at aistudio.google.com |
| OpenAI | Paid | Get a key at platform.openai.com |
| Anthropic | Paid | Get a key at console.anthropic.com |
| Ollama | Free, runs locally | No key needed — ollama.com |
Claude Code CLI users: skip the AI key below — no API key is needed. Only add
JSEARCH_API_KEY.
Create a file named .env in the project root. Add the keys that apply to your setup:
JSEARCH_API_KEY=your_rapidapi_key_here
# Add only the one that matches your chosen AI provider:
GEMINI_API_KEY=your_gemini_key_here
OPENAI_API_KEY=your_openai_key_here
ANTHROPIC_API_KEY=your_anthropic_key_here
# Windows
copy config\config.sample.yaml config\config.yaml
# macOS / Linux
cp config/config.sample.yaml config/config.yamlCopy config.sample.yaml to config.yaml — no manual edits required at this point. All settings (AI provider, model, pipeline limits, job sources, JSearch quota reset day, scoring weights, scheduler, and more) can be configured from the Settings tab in the web UI after the app starts. Changes sync to config.yaml instantly without restarting the server.
Place your resume in the profiles/ folder (.txt, .md, .pdf, or .docx). The filename without the extension becomes your profile name (e.g. profiles/alice.pdf → profile name alice).
⚠️ Privacy: Remove personal identifiers (name, phone, address, email) before saving. The AI only needs your skills and preferences.
python run_web.pyOpen http://localhost:6868. If no profile has been imported yet, use the Load Profile File form on the Profiles page to point JobWise at your file. The AI will extract your profile details (takes ~30–60 seconds), then click Find New Jobs.
Windows (run as Administrator):
scheduler\install-task.bat
macOS / Linux:
bash scheduler/install-cron.shThat's it! For help managing saved jobs, tracking your applications, and getting the most out of the web UI, see the User Guide →
If you have a claude.ai Pro or Max subscription, you can use it directly — no extra API key or billing needed. JobWise uses Claude Code (included with your subscription) to score jobs.
JobWise does not log you in. You need to install Claude Code and sign in once — then JobWise will use it automatically.
Go to claude.ai/code and follow the download instructions for your platform (Windows or Mac).
After installing, open a terminal (Command Prompt on Windows, Terminal on Mac) and run:
claude login
A browser window will open — sign in with your claude.ai account. You only need to do this once.
In the same terminal, run:
claude -p "Say hello"
If you see a response, you're all set.
When the setup wizard asks which AI provider to use, choose claude.ai. The wizard will prompt you to complete the steps above and then configure JobWise automatically.
If you've already finished setup and want to switch to claude.ai later, open the Settings tab in the JobWise web UI and change AI Provider to claude_cli.
If you're comfortable with Python and want the full picture — pipeline flags, advanced config, scheduler options, adding job sources, and more — see the Advanced Guide →
| Source | Type | Quota |
|---|---|---|
| Greenhouse | Company ATS board | Free, unlimited |
| Lever | Company ATS board | Free, unlimited |
| JSearch | RapidAPI | 200 req/month (free tier) |
| JobSpy | Web scraper | No API key needed |
JSearch credits are spent only on companies without a free Greenhouse/Lever board. General keyword searches use JobSpy. See Legal Notice for JobSpy terms.
jobwise/
├── installer/
│ ├── windows/jobwise.nsi # NSIS script — builds JobWise-Setup.exe (via GitHub Actions)
│ └── mac/install.command # Script bundled inside JobWise-Mac.dmg
├── .github/workflows/release.yml # Builds installers and attaches them to GitHub Releases
├── setup.bat / setup.sh # Setup wizard launcher (used after manual/git install)
├── start.bat / start.sh # Daily launcher — opens the web app
├── setup_wizard.py # Setup wizard script (called by installers and setup.bat/sh)
├── config/
│ ├── config.yaml # All settings (editable via Settings tab in the UI)
│ └── preferred_companies.txt # Legacy: per-profile list is now in the profile page
├── profiles/
│ └── yourname.txt # Your career profile (plain text)
├── data/ # Created automatically on first run
│ └── jobs.db # SQLite database
├── src/
│ ├── pipeline.py # Main pipeline entry point
│ └── sources/ # Job sources (Greenhouse, Lever, JSearch, JobSpy)
├── web/ # Flask web app
├── scheduler/ # Scheduling scripts
├── docs/ # Extended documentation
│ ├── user-guide.md # Web UI and application tracking guide
│ └── advanced.md # Technical reference
├── run_web.py # Web app entry point
├── requirements.txt
└── .env # API keys (never commit)
This project is licensed under the Apache License 2.0.
The JobSpy integration scrapes LinkedIn, Indeed, and similar job boards by simulating browser requests. The Terms of Service of these platforms generally prohibit automated access.
- This project does not endorse or encourage violating any platform's Terms of Service.
- JobSpy is opt-out by default — disable it at any time with
sources.jobspy: falseinconfig/config.yaml. - You are solely responsible for how you use this software.
Contributions are welcome. To get started:
- Fork the repository and create a branch from
master - Make your changes — keep them focused and minimal
- Test locally against a real profile and database
- Open a pull request with a clear description of what changed and why
Please open an issue before starting significant changes.
Apache License 2.0 — free to use, modify, and distribute. Attribution required: retain the copyright notice and license file in all copies and derivative works.




