Methodology8 min read

Decoding audited status: how a fixture becomes a row in the record

Every Goalsforge fixture passes through four states: scheduled, published, in-play, audited. Here is what each state means, and what audited actually covers.

Every Goalsforge fixture moves through four states: scheduled, published, in-play, audited. The first three are inputs. The audited row is the test: a published analysis, the actual result, and the gap between them, written down and timestamped.

The four states

Each fixture passes through a strict sequence. The transitions are fixed, even when the timing is not.

State What it means When it begins
Scheduled Fixture on the league or cup calendar; no analysis yet When the competition publishes the fixture
Published One probability-backed analysis produced and timestamped Before kickoff, typically 60 to 120 minutes
In-play The match is underway; the model is silent Kickoff through full-time
Audited The analysis is graded against the full-time result After the full-time result is officially confirmed

The model does not write during in-play. It does not adjust when a side goes a goal up, when a player is sent off, or when the home crowd shifts the rhythm. Once an analysis is published, the inputs that produced it are captured. The audited row at the end of the match is the test of what the model believed before the match began.

The transition from published to in-play is the simplest to define. The transition from in-play to audited is the one that needs care, because football results are not always clean at the whistle.

What the audited row actually contains

An audited row is a small, public, inspectable object. It holds five things:

  • the fixture (home, away, kickoff time, competition, matchday)
  • the published analysis (home win, draw, away win probabilities, and where applicable the most-likely correct-score band)
  • the timestamp the analysis was published
  • the full-time result
  • the grade, meaning did the highest-probability outcome match the actual result

Every published Goalsforge fixture, from a Premier League Saturday 3pm kickoff to a Conference League qualifier on a Thursday night, closes into one of these rows. The Premier League contributes 380 audited rows per season. La Liga and Serie A contribute 380 each. The Bundesliga and Ligue 1 contribute 306 each. The FA Cup, across its 124 clubs, contributes a separate audited row for every single-elimination tie, with replays treated as their own fixtures.

What counts as an audited result

The audited row is built from the full-time score. The score is the score after 90 minutes plus stoppage. There is no extra time and no penalty shootout in the audited record for league matches. For cup ties, the rules are different and the record follows them.

League matches. The full-time score is the result. A 1-1 draw is a draw. A 2-1 home win is a home win. Extra time is not played.

Two-legged cup ties. The pair of legs closes as a pair of rows. Each leg is its own published analysis, its own audited row. The aggregate and the away-goals tiebreaker (or their post-2021 replacement) are part of the cup narrative but not part of either audited row. The row is about analysis accuracy, not cup progression.

FA Cup replays. Each replay is a separate fixture. The original tie closes on the original full-time score if it ends in a side progressing. If it ends level, the original tie remains open until the replay finishes, then closes on the replay’s full-time score. The replay is then a separate published analysis and a separate audited row.

Postponed fixtures. A postponed match returns to the scheduled state. Its previously published analysis is invalidated. The fixture re-enters the queue at its new date, and a fresh analysis is published and audited normally. The record shows the postponement, not the abandoned analysis.

Abandoned matches. A match abandoned after kickoff but before full-time is treated as not audited. The row is held open. If the competition declares a result at the abandonment minute, that declared result closes the row. If the competition orders the fixture to be replayed, the row is voided and the replay re-enters the scheduled state. There is no third path.

What is excluded by design

An audited row holds the on-pitch result. It does not hold post-match events.

Disciplinary action taken after the whistle, fines, points deductions, and league rulings on crowd incidents do not change the audited row. A 0-0 draw stands as a 0-0 draw even if one club is later punished for the conditions that produced it.

Officiating errors are part of the result. A clear and obvious VAR mistake is the result. A late goal awarded after a marginal offside call that the broadcast replays later overturn is the result. The audited row is not a moral document. It is the public record of what happened on the pitch at full-time, set against what the model believed before kickoff.

How an audited row earns the audit

The audited row is the source of truth for calibration. Every other measure (raw accuracy, draw rate, accuracy at the top probability bucket) is computed by counting audited rows in different ways.

A 65% home-win analysis that closes as a home win tells you the model was right for this match. It does not tell you the model was calibrated. Calibration comes from counting every audited row in the same probability bucket and comparing the predicted frequency to the realised frequency. If the model said 65% on a hundred matches and 63 of them ended in home wins, that bucket is well-calibrated. If only 51 of them did, that bucket is too generous. If 78 did, the bucket is too conservative.

The audited row is the row that goes into the calibration count. The published record is the calibration count. The audit is the comparison of those two. An audited row that cannot be re-found by a reader is not a row that earns its place.

What we tried that didn’t work

We first tried to update the analysis during in-play. The match was live, the score was changing, surely the model should re-read. It should not. The instant the model starts updating after kickoff, the timestamp on the analysis stops being meaningful, and the audited row at the end stops being a test of the pre-kickoff belief. A model that knows the score at the 70th minute has access to information it did not have at publish time.

We then tried to land at the moment of the final whistle. That was faster, but it produced wrong rows on matches where the full-time result was later adjusted by the competition: an error in the on-pitch call, a stoppage-time ruling the league later corrected, a referee report that amended the official scoreline. The audited row should be stable. A row that changes after it is published is not an audited row.

What we arrived at is audit-on-verify. The row is held open until the competition’s official full-time result is published, which is typically within five to fifteen minutes of the whistle for league matches and within an hour for cup ties that go through VAR review. After that, the row is published and held. It does not move again.

Known limitations

Audit-on-verify means there is a short window between the final whistle and the audited row appearing in the published record. That window is usually invisible. It becomes visible when a result is contested, when the competition opens a review, or when an on-pitch call error surfaces. In each of those cases the row stays open until the competition’s decision lands. A reader checking the record during that window will see the fixture still in the in-play state. That is the correct read.

Two-legged cup ties produce a richer record than the audited rows alone reveal. The aggregate outcome is on the cup bracket, not on either audited row. A reader who wants the cup narrative has to read the pair together. The audited rows are about analysis accuracy. The bracket is about progression. Mixing them produces a muddier record, not a clearer one.

Postponements, abandoned matches, and replayed ties produce gaps in the calendar that the audited record has to absorb. The record is most readable when those events are rare, and most useful when they are explicit in the row rather than hidden in a footnote.

What this means for an analysis

An analysis on the Goalsforge site is a single probability about a single fixture, published before kickoff. The audited row at the end of that fixture is the smallest, most inspectable unit of the model’s track record.

For a reader following coverage across leagues, the audited row is what makes the cross-league comparison meaningful. A 65% home-win call in the Premier League and a 65% home-win call in Ligue 1 produce two audited rows in the same week. Whether each row matches or misses the actual result tells you about that probability band in that league. The accumulated rows across leagues tell you about the model.

For a reader following the publish-then-audit process, audited is the second half of the cycle. The first half is the pre-kickoff discipline. Without it, audited would mean nothing. With it, audited means the model is willing to publish its mismatches alongside its matches, in the same row, under the same timestamp.

An analysis is a lens for separating signal from noise. The audited row is the lens made concrete. It is the smallest piece of the record, the most readable, and the one the rest of the record is built from.

See the signal in every match.

Explore Goalsforge analyses across thirty football competitions, with a public record you can inspect after the final whistle.