Oct 21, 2017
The Night NBA Stats went Crazy
This is my take on what occurred last night in the GSW-NOP game and how the world of NBA data feeds works in general. I may not have all the facts 100% correct, but I believe it's pretty close. I just wanted to give the DFS community the information I have so that you can better understand what's happening behind the scenes in situations like this.
The NBA has an official scorekeeping team
SportRadar has a scorekeeping team and is the “official provider of real-time NBA league statistics”
Stats, Inc. has a scorekeeping team
ESPN has an scorekeeping team
DFS sites work with Stats or SportRadar or both for their real-time statistics
We work with SportRadar so I can only speak for their workflow as I see it
During an NBA game, all of the above track player statistics. SportRadar receives the NBA's official statistical updates in real-time and posts those to a collection of APIs that we access. Additionally, both the NBA and SportRadar issues in game revisions to stats and pushes those through as well. On a normal night SportRadar just allows the NBA data to pass through with no revisions, but they can also make corrections and inform the NBA that they may have seen a play incorrectly.
Once the game is completed SportsRadar waits for the final scorer's book from the NBA official scoring team and then they update their scoring to match. You can view the official NBA scorer's books here: (note the GSW-NOP game still shows as “in-progress”)
This generally occurs pretty quickly but can take up to several hours on occasion. Once this is done we see the game status change from “completed” to “closed'. In a perfect world that would be it for revisions, but in rare cases the NBA can still make revisions to their official box score after a game has been given “closed” status. Additionally, these revisions can occur at any time after game closure so there is no “correct” amount of time to wait prior to paying out contests. Pay out quicker and you may miss some stat revisions, pay out slower and your users receive their winnings later then they may be used to. We've settled on paying out one hour after the final game closes for the time being, but we will wait until the following morning if we feel it is warranted.
Oct 20th, 2017 – Smoothie King Center, New Orleans, LA
With around 7 minutes left in the 4th quarter of the GSW-NOP game the NBA's official scorekeeping team stopped documenting player statistics. You can see this here:
The other real time stats providers continued to tabulate statistics as they saw it, but when the game ended there was no official source to verify their results with. Player statistics were all over the map. Durant showed 4 blocks on one site and 7 on another. At midnight PST our lead developer typed, “what if our universe split and there actually were two different games”. It was as good an explanation as any at that point.
Shortly after this SportRadar released a ton of stats revisions for the game, and ESPN and NBA magically updated to have the same stats for all players. SportRadar now matched ESPN and NBA for all player stats with the exception of Livingston (4 reb vs. 5) and Jordan Crawford (0 blk vs. 1 blk). These discrepancies had no impact on our contests but we weren't comfortable with the situation and made the decision to delay payouts until the following morning.
This morning SportRadar revised Crawford and Livingston's stats and now we were in the happy position of having identical stats across ESPN, NBA.com, and SportRadar. We paid out our contests at 10am PST.
Hopefully that sheds some light on how this all works. It's been an interesting start of the season (and preseason) but I'm confident that in game statistics will get back to the level of accuracy we saw last year.