The ice cream shop that makes money when it's cold
28 Wishes sells ice cream in Los Angeles. Below 70°F, sales fall about 20%. The weather is out of their hands. Rent isn't.
So the owners started putting about $20 a day into Kalshi weather markets, taking the cold side. The days that keep customers away now pay something back.
This is hedging. Big companies have done it for decades, buying protection against bad weather, fuel spikes and rising rates. It used to take a broker, a trading desk, and an order size no corner shop could meet.
Kalshi opens it up. Contracts on weather, fuel prices, inflation, tariffs and regulation, starting at a few dollars. Take a position on the outcome that would hurt you. If it hits, the payout softens it. If it doesn't, the contract expires and the good month was the point.
Before I got my first job in sports, working at ESPN, I was obsessed with getting my hands on NBA player tracking data. Zach Lowe had made it known to the world a camera-tracking system called SportVU, was being put into every NBA arena and would track the precise location of all 10 players at all times during a game.
I just thought this was the coolest thing ever, but there was one catch: these systems cost a ton of money and therefore STATS LLC was going to charge a premium that essentially only NBA teams could afford.
Some day I would love to chronicle the history of player tracking data in the NBA, as there is a lot that has gone on behind the scenes that I think would just be cool to get out there for posterity’s sake2. But this post is about my contributions to the space and how my intense desire to get my hands of this data ended up having a much larger impact than I expected.
Moments aka Movements
NBA.com has always been at the forefront of adding cool features and technologies to augment its statistical coverage of its games. I don’t think people give them enough credit for what they’ve done.
After the NBA and STATS LLC agreed to a leaguewide deal for the 2013-14 season, I believe it was at some point during the 2014-15 season data from the player tracking system started appearing on NBA.com via a new feature called “Moments.”
The box scores and play-by-play on NBA.com were already fantastic because you could click on a stat, or a play, and it would pop up a clip showing that exact event in the game. But now there was an additional tab next the video clip called “Movements". Once you clicked that, it would show the tracking data instead of video for that given play.
Once I saw this existed, I realized I needed to do everything in my power to try and save off this data. For data that would cost roughly a million dollars to subscribe to, it was a tremendous opportunity to get my access to something that I could otherwise not afford.
After digging around, I was able to find the endpoint that delivered the raw data. Here is an example of what it looked like. Essentially the raw tracking XML files that SportVU delivered to teams directly, was sent to the NBA where they broke them down by event, and used them to build these moment animations on their site.
From there I built what now would be considered an extremely crude C# script3 to go through and download event game’s tracking data by event, and compress it into an archive. If you’ve never worked with tracking data before, it is very compressible so that is a must.
So from there I would just incrementally run the script, save tracking data by game, and ultimately decided to put it up on GitHub. The repo started out as a repository for basketball data that was just a mish mash of things I thought were interesting. It’s still online and the original SportVU data was all posted here, 11 years ago:
Now what you’ll notice is the last commit brought it down to just a single game. What happened around halfway through the 2015-16 season is the moments functionality got taken down. I’ve never got a definitive answer for this, but I always wondered whether my repo had played a role. And because of that, and having already been threatened with legal action once for my basketball hobby adventures, I modified the repo to just show one game instead of the 632 I had grabbed to date.
I was genuinely worried there for a little bit. You have to understand during this time I was getting 2-3 emails every week asking me about this data. How to download it, how to do stuff with it, etc. So my worldview at the time was this was definitely getting recognized, but to what degree I was unsure.
Those emails started becoming “why did you take down all the games”, and that’s where I would simply reply, “you can just go to a previous commit to get them still.” That commit still exists to this day, and was my way of seeming to have it both ways: proactively taking something down but still keeping it available.
Now to be clear, as I’ve gotten older I can say I’m comfortable with the decision to preserve this publicly available data. This data was made publicly available and represents observable truths. Observable truths aren’t copyrightable, even if the system to track them is.
At any rate, my contributions here had largely ended, but the impact it had on the basketball community had just begun. Other people forked my repository, and did some good legwork on documenting how to utilize the data and doing interesting stuff with it.
Two of the most widely used were Neil Seward’s nba-movement-data repository and linouk23’s NBA-Player-Movements repository. Seward explicitly credited my original repository and explained that he wanted to preserve a copy in case I deleted it. The linouk23 project paired the raw game files with a visualization tool, giving people a way to replay possessions and see what they were working with.
Other forks, including Rajiv Shah’s, helped distribute the archive further. Shah also put together a walkthrough for loading and exploring the data in R. Those contributions made it easier for people to get past the initial challenge of turning a large collection of coordinates into something they could actually analyze.
At the time, those weekly emails were how I knew people were finding the data. What was much harder to see was what happened after they downloaded it, particularly when they were getting it from one of those other repositories.
A decade later, I went back to trace that research trail. As of October 31, 2026, I can document 57 distinct scholarly works connected to the archive, including 49 that used the data. Those include journal and conference papers, preprints, theses, reviews, and other research outputs. I counted a preprint and its published version as one work, and did the same for a study’s paper, poster, and accompanying code.
Even that is a minimum. An author might cite a mirror, another researcher might build a cleaned dataset from that mirror, and a later paper might cite the cleaned version. Following those connections reveals considerably more use than searching for my name or the original repository alone.
One of the most visible examples was Using Hex Maps to Classify & Cluster Dribble Hand-off Variants in the NBA, which used the archived tracking data to help identify and classify dribble handoffs. It finished second in the research paper competition at the 2022 MIT Sloan Sports Analytics Conference.
The archive also supplied the raw data for MecaSportStats, the project behind a 2020 Sloan paper on the space and timing of three-point shots. That work examined catch-and-shoot and pull-up attempts in relation to defensive positioning and movement.
Other Sloan studies used it to explore shot selection and player profiling, player adaptability, and evaluating individual actions with deep reinforcement learning. The last of those, HoopEval, appeared at Sloan in 2026, still using those 2015–16 games. In total, five Sloan studies can be traced to the archive.
At the Carnegie Mellon Sports Analytics Conference, three additional projects explicitly identified a mirror as their source: research on free-throw form, an expected-assist model, and interpretable models of shot probability. The free-throw study was by Paul Ibrahim, then a high school senior at Cary Academy, and was a student research competition finalist in 2020.
That is a particularly good example of why access matters. A high school student could take those files and produce research selected for a sports analytics conference.
The reach also extends well beyond basketball analytics. Ten papers using the data appeared in the main proceedings of NeurIPS, ICML, ICLR, and CVPR, major venues for machine learning and computer vision.
At ICML in 2017, researchers used NBA movement data to evaluate The Statistical Recurrent Unit, a neural-network architecture for learning from sequences. At NeurIPS in 2020, Continuous Meta-Learning without Tasks used it in research on learning from continuous observations without neatly labeled task boundaries.
Later work used the archive to study forecasting under changing conditions, how models account for interactions between moving agents, and causal discovery in time series.
Basketball turns out to be a useful setting for these questions. Ten players and a ball are moving together, with teammates cooperating, opponents reacting, and the meaning of a movement depending on everything happening around it. A collection of games saved by a basketball futurist could give researchers a shared benchmark for testing much broader ideas.
The resulting scholarship has its own reach. For the first 50 works identified in the review, OpenAlex recorded 604 incoming citation links from 551 distinct citing works. Those figures measure citations to the downstream scholarship.
There is also a substantial trail of practical work. The review identified 49 additional software, analysis, and tutorial records, covering everything from preparing the raw files to plotting player movements and building models. Together, the original repository and three major derivatives had 1,244 GitHub stars and 391 forks at the time of the review. One person can star several repositories, and one project can produce several outputs, so those are measures of activity across the archive’s wider community.
Looking back, what stands out is how much people could build once they had a common starting point. I wasn’t alone at that time wishing I had access and having numerous ideas I would love to pursue. The mirrors preserved the files. Tutorials helped people understand them. Researchers added labels, created models, and published results that other people could build on in turn.
When I was getting those emails, I knew the repository was attracting attention. I had no clear picture of where the data would go next. There are now papers being published in 2026 based on games I downloaded during the 2015–16 season.
I started out wanting to get my hands on the data. Putting it on GitHub let a lot of other people do the same. A decade later, they are still finding new things to do with it, and the NBA has brought back this data through a “game pulse” feature in their app.
So get subscribe, as my next post is going to be another data dump of tracking data from NBA.com, but with games played a decade later!
1 This also had a personal impact. When I was interviewing at ESPN midway through 2016, I remember sitting down with Alok Pattani and him asking about the tracking data. I presume I put it somewhere on my resume, and I vividly remark him saying “wait, so you’re the guy who made all of that player tracking data available?”
2 And to honor the people behind the scenes who have worked tirelessly to make this all possible.
3 That’s right, C# baby. This was before Python took over, and that felt like the latest and great.





