Open source · open data

Put it on the record

Anyone can add an incident or fix one. The whole dataset lives in a public GitHub repository, so every change is reviewed, attributed and permanently in the history.

House rules

  1. Source everything. Every incident needs at least one link to reputable reporting or an official statement.
  2. Judge the call, not the person. Describe what happened and cite who ruled it wrong. No speculation about motives.
  3. Prefer authority. A KMI panel ruling or referees'-body statement outranks punditry. Mark provisional verdicts media-consensus.
  4. Mark paraphrases. A quote must be word for word. Otherwise set "paraphrased": true.
  5. Log correct calls too. A leaderboard with only mistakes can't show who is actually good.

An incident file

{
  "id": "mun-mci-haaland-enzo-offside",
  "league": "premier-league",
  "season": "2026-27",
  "date": "2026-09-13",
  "home": "man-utd",
  "away": "man-city",
  "score": "0-1",
  "minute": "60'",
  "type": "offside",
  "title": "Haaland derby winner stands despite Enzo Fernández offside",
  "summary": "What happened, in plain words…",
  "onField": "No goal: offside flag",
  "varOutcome": "overturned",
  "verdictSource": "official-statement",
  "calls": { "referee": "correct", "var": "error" },
  "officials": {
    "referee": "michael-oliver",
    "var": "matt-donohue",
    "avar": "blake-antrobus"
  },
  "benefited": "man-city",
  "harmed": "man-utd",
  "impact": "match-deciding",
  "controversy": 5,
  "sources": [
    { "title": "…", "publisher": "ESPN", "url": "https://…", "kind": "official" }
  ]
}

Full field reference in CONTRIBUTING.md. Runnpm run validate locally before you push.

Next leagues

The schema already supports multiple leagues. La Liga, Serie A and the Bundesliga open once each has a few maintainers. Want to lead one? Say hello on GitHub. See how verdicts are weighed on the methodology page.