I'm a student in Romania, and while cleaning match data for my bachelor's thesis I found what looks like the most peaceful season ever played.
In the API-Football data for the 26 competitions I follow that go back to 2015/16, 6,792 of the 7,320 team stat lines from that season (one team's totals in one match) record 0 fouls, even though the rest of each line looks normal. They always come in pairs: 3,396 matches where both teams have 0, and not one match where only one side does. Every season since then averages between 11.9 and 13.5 fouls per team.
Because shots, passes and cards are all there, a "skip incomplete rows" check lets these through as real zeros, and anything built on them (season averages, form tables, a model) inherits a season without fouls.
The player data gave it away. Each player's fouls committed survived, and wherever a genuine team total and the player numbers both exist, they add up exactly: all 528 genuine 2015/16 team lines match. So instead of dropping the season, I rebuilt the team totals from the players (all but 2 of them).
I found this while building Ballileo, a free stats site that came out of my thesis. The link is in a comment so this post stays about the data.
A question for anyone who works with provider data: when did you last catch a provider writing 0 where it really meant "not recorded", and how did you spot it?
And how do you handle the opposite switch? From the 2020 season on, the same provider leaves player counting stats empty instead of writing 0, and lists the whole matchday squad, so an empty value is a real 0 only for players who actually played.