Skip to content
← All case studies

Data engineering · Explainable ranking

A matching engine over 400,603 job postings

A national job board reduced to one shared skill vocabulary, so a résumé can be scored against 400,000+ postings with a reason code behind every point.

400,603

postings indexed

1.44M

extracted skill records

0

third-party dependencies

The problem

Matching a person to work is usually done with keyword search, which fails in both directions: it misses postings that describe the same skill in different words, and it confidently returns matches the candidate cannot actually back. The interesting problem is not retrieval — it is producing a ranking that can defend itself.

What we built

A stdlib-only Python pipeline: scrape and index the board, extract structured skills from unstructured posting text, normalise everything into a single versioned taxonomy, then score candidates against it. Every derived artifact carries a lineage stamp recording the taxonomy version that produced it, so any result can be traced back to the rules that generated it. The scoring engine is deterministic — no model in the ranking path — because a score you cannot audit is not usable for a decision this consequential.

The result

A frozen corpus of 400,603 US postings with 1,443,263 extracted skill records, queryable as a cross-filtering skill-fit explorer. Every match carries reason codes, and the system is built so it cannot assert a skill the evidence does not support.

What this does not claim

The feature was originally called an "opportunity universe." The corpus is a frozen snapshot with unknown posting age, and only 9,634 of 400,603 records had link-health checks — which means it cannot honestly claim to describe currently-open roles. It was renamed to "skill-fit set," and the architecture document records why. Naming the limit is cheaper than defending an overclaim later.

Python 3.11SQLitestdlib onlyversioned taxonomydeterministic scoring

Have a problem shaped like this?