Open source · runs locally · zero SaaS

Stop reading job descriptions.
Start reading scores.

Job Matcher is an open-source pipeline that fetches listings from nine job boards, scores each one against your skills using an LLM, and surfaces ranked results in a local web UI. Your data never leaves your machine.

View on GitHub MIT License · Python 3.11+

The job search is broken

You are the filter.

Job boards dump hundreds of listings on you and expect you to read every one. Most are irrelevant. You know within ten seconds, but those seconds add up.

Descriptions lie by omission.

A posting says "Python" but buries the real requirement — five years of enterprise Java — in paragraph six. You only find out after applying.

Matching algorithms miss what matters most.

LinkedIn and Dice try — but they match on job title and location, not your actual skills or hard requirements. A role requiring three years of React experience has no business in a backend engineer's feed.

Three steps. Zero manual scanning.

01

Fetch

Pulls listings from Adzuna, Jooble, Jobicy, Himalayas, USAJobs, Remotive, and more. Pre-filters by title, salary, location, and contract type before anything hits the LLM.

02

Score

Sends each full job description — not the snippet — to Claude, GPT-4, or Gemini alongside your skills profile. Returns a 0–10 score, matched skills, missing skills, concerns, and a one-sentence verdict.

03

Review

Browse a ranked feed in your browser. Expand any card to see the full breakdown. Bookmark, dismiss, or mark as applied. Everything runs on localhost.

Your model. Your keys. Your criteria.

Most tools hand your search to their AI, charge their own rates, and write their own prompts. Some will even apply for you — blasting your resume to hundreds of listings without your review. Job Matcher does neither. It surfaces ranked results and leaves the decision to you. You choose where your resume goes.

Ten job sources

Aggregates from Adzuna, Jooble, JSearch, Jobicy, Himalayas, USAJobs, Remotive, RemoteOK, Arbeitnow, and The Muse.

Bring your own key

Works with Anthropic, OpenAI, or Google Gemini. Use whichever LLM you already have access to. Provider failover is automatic.

Runs locally

No SaaS, no subscription, no data exfiltration. Your resume, your API keys, and your job search stay on your machine.

Smart pre-filtering

Title patterns, salary floors, contract type, and geospatial distance filters run before the LLM, saving tokens and money.

Scored, not just listed

Each listing gets matched skills, missing skills, flagged concerns, and a plain-English verdict alongside its score.

Schedule and forget

Docker stack runs ingest daily via Ofelia. No Docker? Use cron or Task Scheduler. Either way — fresh results every morning.

Yes, other tools do this. Here's why I built it anyway.

Tools like Huntr, Teal, and Sonara exist. Some will even apply for you. I didn't want any of them.

I didn't want a bot blasting my resume to hundreds of listings without my review. I didn't want to pay hundreds of dollars a month for a service that uses its own models, its own prompts, and makes decisions on my behalf. And I couldn't find anything that gave me the control I was looking for — over the AI, the criteria, and ultimately where my resume went.

So I built it. The learning was a bonus. The tool is something I use every day.

One more thing worth saying: this project was built with Claude in under a week. Part of the learning was the job search problem itself. Another part was working out how to use AI tools effectively in a real development workflow — not as a shortcut, but as a collaborator. The code is mine. The speed wasn't.

See it in action

Job Matcher feed view showing a ranked list of job listings. Cards display company name, title, score badge in green, amber, or red tiers, matched skills, and source badges. Remote listings have a green remote badge.
Feed view — ranked listings with score tier indicators and skill chips
An expanded job listing card showing a score of 8 out of 10, green matched-skill chips for Python, Flask, SQL, REST APIs, and Docker, red missing-skill chips for Kubernetes and Terraform, a concerns section, and a plain-English verdict.
Expanded card — full LLM breakdown: matched skills, missing skills, concerns, verdict
Job Matcher settings page showing the LLM providers tab with Anthropic and OpenAI listed, each showing a green valid badge and masked API keys. The job sources tab is visible in the tab bar.
Settings — LLM provider configuration with validation badges and job source toggles

Running in under two minutes

git clone https://github.com/cbeaulieu-gt/job-matcher.git cd job-matcher cp .env.prod.example .env.prod docker compose -f docker-compose.prod.yml up -d

Edit .env.prod with your API key, open localhost:5001, and configure your profile in the Settings page. Full setup guide in the README.