Deterministic rules
If two records share a verified identifier, they are the same thing. Exact, fast, and auditable.
Only works where a shared key already exists. That is precisely what football data lacks between providers.
Under the hood
Every football data provider speaks its own IDs, its own spellings, its own idea of who a player is. Deciding when two records describe the same real person or club is a discipline in its own right, known as entity resolution, with more than fifty years of research behind it. This page is a short tour: what the field offers, what Reep builds on, and what Reep adds.
The field
Seven families of technique, from 1969 to the LLM era. Each is genuinely useful; none is sufficient alone. The craft is in the assembly.
If two records share a verified identifier, they are the same thing. Exact, fast, and auditable.
Only works where a shared key already exists. That is precisely what football data lacks between providers.
The Fellegi–Sunter model (1969) weighs every field, including name, date of birth and place, by how often true matches agree on it versus how often coincidences do. It sums the evidence into a decision: match, review or reject.
Powers national statistics offices worldwide (the modern tool is Splink). But a match score is only as trustworthy as the data it was calibrated on.
Comparing everyone with everyone is trillions of pairs. Blocking narrows the field using signals such as the same birth date or a shared name token, so only plausible candidates are ever compared.
Block too aggressively and true matches are lost before anyone scores them. Recall here has to be protected, not assumed.
Use who appears alongside whom, including teammates, fixtures and seasons, rather than names and dates alone. Two ambiguous records that share resolved neighbours are probably the same person.
The classic failure: one wrong link chains whole groups together into a single merged mess. Naive graph closure is the most-documented catastrophe in the field.
Embedding models and trained classifiers learn what similarity looks like and find candidates that rules would miss across languages and scripts.
Excellent candidate finders, risky deciders: an embedding thinks Real Madrid and Real Madrid Castilla look very alike.
A language model reads the evidence for a hard pair the way an analyst would. For example, it can assess "Jorginho" and "Jorge Luiz Frello Filho" with the same birth date and give a verdict.
Generalises remarkably well, but its self-reported confidence is unreliable. Trustworthy confidence has to come from process, not from asking the model how sure it feels.
The gold standard. An expert with the evidence in front of them settles what no algorithm safely can.
Does not scale on its own. The craft is spending human attention only where it genuinely changes the outcome.
The assembly
Reep is built on the strongest ideas above, assembled the way the research says they should be, including the parts most pipelines skip.
Fellegi–Sunter's core insight, kept: every candidate pair ends as match, reject or a review queue for a human. It is never a silent coin flip in the ambiguous middle.
Reep uses correlation clustering with contradiction checks instead of naive graph closure, which the research literature identifies as a major cause of catastrophic merges, deliberately engineered out.
Truth-discovery research on copied and correlated sources is applied as doctrine: agreement only counts when the agreeing sources are genuinely independent.
LLMs adjudicate only the residual that survives every deterministic check, give binary verdicts and earn confidence through consensus, exactly the posture the research recommends.
The difference
Eight decisions that separate a register you can audit from a pipeline you have to trust.
Every matching rule Reep uses is a readable record: what it does, why it exists, and the real decided cases that justify it. The engine is fixed; the rulebook composes itself for each competition. Running a new league is configuration, not a rewrite.
Many providers resell the same upstream feed. Reep groups providers into independence buckets, so sources that share an upstream count as one opinion, however many logos repeat it. Corroboration means genuinely independent agreement.
An entity enters the register when at least two independent sources agree it exists. Single-source records wait, clearly labelled, until a second opinion arrives. The register does not guess. The only exceptions are a small set of explicitly authorised single-source domains (national teams, managers), and those are labelled as such.
Conflicting birth dates, mismatched gender or a player record paired with a referee record are deterministic contradictions. They kill a match in code before any model is consulted. No model is ever asked to overrule arithmetic.
Evidence accumulates as soft links first. Clustering happens once, deliberately, with every contradiction re-checked against every member. This discipline prevents one bad link from chain-merging hundreds of people.
When a pathology such as a cross-gender merge or reused provider ID is found, it becomes a named canary that runs on every subsequent build. A mistake made once cannot quietly return.
Merges become redirects; superseded facts keep their history with full provenance. The same practice that makes long-lived identity registries like MusicBrainz and ORCID trustworthy.
Every release samples its own precision with proper statistical bounds, and a release gate with hard red lines blocks publishing when quality slips. Accuracy is a measurement here, not a marketing adjective.
Born football
Football is a hard domain: no shared keys, gendered provider splits, transliterated names, homonyms, defunct clubs, reused IDs. Solving it properly produced machinery that generalises to any sport.
A provider carries no birth dates at all.
Resolve people structurally through the same match, side and shirt number across many matches. Identity comes from co-occurrence, with no biography needed.
Any sport with line-ups and squad numbers: rugby, cricket, basketball, hockey.
Two providers spell a club three different ways.
Ignore the names; compare the squads. Two club records sharing most of a roster are one club.
Roster overlap works in every team sport. The same idea matches companies by shared personnel.
Two players share a name and sometimes a birth date.
Same name at the same club in the same season is one person; the same name a decade apart at different clubs is treated as two until proven otherwise.
Organisational membership over time disambiguates homonyms in any domain.
A league, a cup, and a split-season play by different rules.
Competition profiles describe each shape by format, season topology, gender and era. The right rules then compose automatically for each slice.
Every sport has competition structure; the profile vocabulary changes, the mechanism does not.
Names cross scripts, languages and transliteration schemes.
Locale-aware normalisation and club-name furniture stripping live in the rulebook as data. They can be extended per country without touching the engine.
The same discipline that matches company names across "Ltd", "GmbH" and "S.A.".
Proof
Numbers from the current public release, generated by the engine rather than typed into this page.
Reading further
The register, its live API, and a walkthrough of a resolved entity are on the main tour.