FootyFacts Board

Data sources and methodology

Where the player data comes from, how it is filtered and scored, and the categories that were deliberately removed because the source data could not support them.

The source

Player records are derived from Wikidata, the structured-data project behind Wikipedia, which releases its data under CC0. The dataset is fetched by a build script, filtered, re-shaped and committed to the repository, so a deploy never depends on an external service being up and every visitor gets an identical, reproducible dataset.

What is taken from it

For each player: name and aliases, national team, playing positions, club history with each club's country and — for the named competitions — its league, birth year, and the marquee honours. That is a deliberately narrow list. Each field is one Wikidata property with near-universal coverage among professional footballers.

Club country is the quiet workhorse. It is recorded for roughly 99% of clubs and it never changes, which makes it far more dependable than league membership (clubs move between divisions) and it is what the geography categories are built on.

What was removed, and why

Several categories were built, shipped and then deleted after an accuracy review, because Wikidata does not hold the underlying facts reliably enough:

The categories that replaced them are all derived from club history and club country, which the source does hold well. The trade is a smaller category set for a game that rejects far fewer correct answers.

A note on lower bounds

Some categories — "played for 5+ clubs", "played in 3+ countries" — are counted from the club list, which means they are lower bounds. A missing spell can only ever under-count a career; it can never invent one. So these categories may occasionally fail to match a player who genuinely qualifies, but they will not match a player who does not. Erring in that direction is the deliberate choice: a false rejection is annoying, a false acceptance is wrong.

The fame figure

Scoring needs some measure of how well known a player is. That figure is derived at build time from the substance of a player's public record — the breadth of their documented career and honours — and normalised to a 1–100 scale. It is a proxy, and it is imperfect at the edges, particularly for players who were famous long before the internet. It is used only to rank obviousness within a single cell, never displayed, and never presented as a measurement of anything real. Full scoring derivation.

Board generation

Boards are generated from their date rather than stored, which is why any past board can be rebuilt exactly. Category membership is precomputed once per dataset load into sorted index arrays, so a cell's answer list is an array intersection rather than a scan of thirty thousand records — the difference between a board generating instantly and the page hanging.

Every generated board is proved solvable before it is served. The full check is described on the rules page.

Corrections

If the game rejects an answer you know is right, that is a data bug worth reporting. Corrections are applied upstream where possible — fixing Wikidata fixes it for everybody, not just for this site — and picked up by the next data build. Report a correction.