Home / Projects / CV Matcher

CV Matcher

Post a job, upload a stack of CVs. CV Matcher scores every candidate against the role with Claude and tells you in plain English which skills matched, which are missing, and why.

Category  AI · RecruitmentStack  Python · FlaskLLM  Anthropic ClaudeStatus  Live
CV Matcher screenshot

The problem

A single job ad can pull in hundreds of CVs, and a recruiter still has to read each one to find the handful worth a phone call. Keyword filters miss good candidates who describe the same skill differently, and a bare score doesn’t tell you what’s actually missing. We wanted a tool that did the first-pass reading and ranking, so the recruiter only spent time on the shortlist.

What we built

Recruiters post a job description and upload CVs in bulk. CV Matcher scores every candidate against the role and ranks them, and each result comes with the skills that matched, the skills that are missing, and a one-line reason for the score. On top of screening, it can suggest interview questions for a shortlisted candidate and help source new candidates from LinkedIn and GitHub. Teams can share jobs and results across seats.

The AI angle

Scoring is one narrowly-scoped Claude Haiku call per CV and job pair. The model must return a fixed JSON shape — score, matched skills, missing skills, and a short reason — and the app strips stray formatting, clamps the score to 0–100, and caps the skill lists before anything is stored. If the model call fails or returns something unparseable, scoring falls back to a deterministic TF-IDF and keyword-overlap score, so a candidate never ends up with a half-parsed result.

Filtering, sorting, and exporting matches

Once a match runs, a filter bar lets you set a minimum match percentage, select must-have skills from a multi-select populated from that result set, and sort by match score, candidate name, or source file — entirely client-side, no reload. Premium accounts can export the ranked list as CSV (UTF-8 BOM so Excel reads the encoding correctly, skills semicolon-joined so commas never split a column) or XLSX (bold header row, frozen top row, match percentage stored as a real number so it sorts and filters properly in Excel, not as text).

How it’s used

  • Recruitment agencies screening high-volume applications across several open roles.
  • In-house recruiters and hiring managers who want a ranked shortlist with the gaps spelled out before the first call.
  • Small teams sharing jobs and results across seats instead of passing CVs around by email.

What it taught us

A score on its own isn’t enough to act on. Showing the matched and missing skills next to every score lets a recruiter judge whether a gap actually matters for the role — which is the difference between a tool that ranks and a tool that helps you decide. And because the AI call has a deterministic fallback, screening keeps working even when the model doesn’t.

Want to build something like this?

We scope projects in 48 hours and ship a first demo in 1–2 weeks. Tell us what you need.

Start a project → See how we work