RefOdds

Trust and data

Methodology: How RefOdds Computes Referee Stats

How RefOdds builds its referee statistics: data sources, entity resolution, the metrics we define, update cadence, and the limitations we are honest about.

RefOdds exists to give football bettors accurate, current referee statistics. A stats site is only as trustworthy as its method, so this page sets out exactly how our numbers are built: where the data comes from, how we resolve referee identities across inconsistent sources, what each metric means, how often everything updates, and, just as importantly, what our data cannot tell you. We would rather be precise about our limits than overstate what the numbers prove.

Data sources

We combine two complementary sources, each chosen for what it does well:

  • API-Football provides current-season fixture and event detail. This is where we get granular, event-level data: individual card events with the minute they occurred, penalties awarded, fouls committed, and the referee assigned to each fixture. The minute-level detail is what allows us to compute first-half and second-half splits for the current season.
  • football-data.co.uk provides roughly twenty seasons of historical match data, including card counts, across the major leagues. This deep history is what gives our long-run referee figures their sample size and stability.

There is an important difference between the two. The historical CSV data records cards at the match level but does not include the minute each card was shown. As a result, our first-half and second-half card splits are available for the current season only, where the event-level API data carries minutes. We never imply a half-split exists for historical seasons when it does not, and the underlying match counts behind every figure make clear how much data supports it.

Referee entity resolution

The hardest problem in building referee stats is identity. The same official appears under different name strings across sources and seasons: with or without a first name, with initials, with spelling variations, with accents stripped, or with formatting quirks. If you naively group by the raw string, you split one referee into several phantom entities and dilute every statistic.

Our approach is to resolve each raw source string to a single canonical referee identity, with a deliberately conservative policy:

  • Canonical identity. Every referee has one canonical record with a stable slug and full name. Every raw string we are confident belongs to that referee is stored as an alias against it, so the lineage is auditable.
  • Confident matches are merged. Where a raw string clearly maps to a known referee (an unambiguous name match, a known alias, or a manual override), we attach it to the canonical record.
  • Ambiguous cases are held, never silently merged. When a raw string could plausibly belong to more than one referee, or to a referee we cannot confidently identify, it goes into a manual review queue rather than being auto-merged. We would rather leave a match temporarily unattributed than wrongly fold one referee's cards into another's record. Silent merges corrupt data in ways that are hard to detect later, so we refuse to make them.

This conservative stance means a small number of matches may sit unresolved at any time, pending review. We consider that a feature, not a bug: it keeps the attributed figures clean.

The metrics we define

For every referee, and aggregated for every league, we compute a consistent set of metrics over various scopes (overall, by competition, by season, and a rolling last-20-matches view):

  • Cards per game. Average yellow and red cards shown per match. Reported as yellows per game and reds per game.
  • Fouls per game. Average fouls per match, available where the source provides foul data (current-season API matches). Null where the underlying data is absent.
  • Penalties per game. Average penalties awarded per match, from event-level API data. Null where unavailable.
  • Over-X card rates. The share of a referee's matches finishing over 2.5, 3.5, 4.5 and 5.5 total cards. These map directly onto common over/under card lines.
  • Both-teams-booked percentage. The share of matches in which both the home and away sides each received at least one card.
  • Home and away card share. The fraction of total cards shown to the home side versus the away side, exposing any directional skew.
  • First-half and second-half splits. The share of cards shown in each half, current season only, because only the event-level data carries minutes.
  • Average booking points. A single severity-weighted figure using the model yellow = 10 points, red = 25 points. This folds the relative seriousness of a sending off into one comparable number. See our booking points guide for how this scoring works in betting markets.

Every figure is reported alongside the number of matches it is computed from, and we track coverage separately for fouls and minute-level data so you can see exactly how much of a referee's sample supports each metric.

Update cadence

The data refreshes nightly. Each night we ingest the latest completed fixtures and events, re-run normalisation and entity resolution, recompute every metric, and publish updated referee and league pages along with the current appointments. This is why we keep specific figures in our written guides illustrative rather than hard-coded: the live tables move as new matches come in, and a number quoted in an article would quickly drift out of date. For current figures, always trust the live referee and league pages over any static text.

Limitations we are honest about

No statistical model captures everything, and we would rather you know our limits:

  • Historical half-splits do not exist. Because the historical CSV source has no minute data, first-half and second-half splits cover the current season only. We never fabricate them for past seasons.
  • Sample size varies. Early in a season, current-season figures rest on few matches and are noisy. Always read the match count before trusting a rate.
  • Source data can contain errors. Upstream feeds occasionally miscount cards or misattribute a referee. We resolve what we confidently can and queue the rest, but we cannot guarantee perfection in third-party data.
  • Unresolved matches exist. Our conservative entity resolution deliberately leaves ambiguous matches unattributed pending review, so a referee's count reflects confidently attributed matches, not necessarily every match they ever officiated.
  • Stats describe the past, not the future. Referee tendencies are stable but not fixed. Directives change, officials adjust, and any single match is volatile. Our numbers inform a view; they do not predict outcomes.
  • Context is not in the numbers. A referee's average reflects the fixtures they were assigned, which often skew towards bigger, higher-card matches. Read the figures with that in mind.

From raw match to published figure

It helps to see the pipeline end to end. A completed fixture arrives from a source with a referee string, the two teams, and the card record, plus, for current-season API data, the individual card events with minutes, fouls and any penalties. We first normalise this into a single common match shape, recording its provenance as either API or CSV so we always know which source a figure rests on and whether minute-level detail is available. Next, entity resolution maps the raw referee string to a canonical identity, or, if the match is ambiguous, parks it in the review queue rather than guessing. Only confidently attributed matches flow into the metrics. We then aggregate across scopes, computing each referee's overall figures, their splits by competition and by season, and a rolling last-twenty-matches view that captures current form. The league pages aggregate the same underlying matches a second way, by competition rather than by official. Every published number therefore traces back to a specific set of attributed matches, and the match count travels with it so nothing is presented without its sample size.

How to use this site responsibly

RefOdds is an information resource for football bettors. We provide referee statistics to help you form a more evidence-led view of card and penalty markets. We do not offer tips, we do not promise winnings, and no statistic here guarantees an outcome. Betting carries real financial risk and is strictly for those aged 18 and over. If gambling is causing you harm, please seek support from a recognised problem-gambling service. Used sensibly, accurate referee data is a genuine edge; used as a guarantee, it will let you down. We build the numbers honestly so you can decide for yourself.