NBA Top Shot profiteering reloaded

by Randy Gingeleski

4 minutes to read

One month after my entry, the NBA Top Shot trading space is much different than it was before. Or maybe I'm different.

Post featured image

In my original guide to Top Shot, we discussed how basketball doesn’t interest me at all. I also discovered that profiteering in this game is tougher for someone like that, like me.

In the end I liquidated my account for about double my money in.

Was this genius on my part? Ehhh more like dumb luck. You’ll see in my transactions.

NBA Top Shot is back into a bull market swing after a couple bearish weeks, which saw my account dwindle to about a 50% loss before swinging back.

But hey a win is a win.

My transactions

Individual transactions are all documented and public via here.

The profit there is a little bit misleading, because there are Dapper fees charged when you’re acquiring Moments and selling them.

Cash in from my credit card totaled $5,199.57 in receipts and my ending Dapper balance is $12,146.65.

So that’ll be $6,947.08 to a 1099-MISC for 2021, if you’re keeping track at home or IRS headquarters. ☕

Off-the-shelf tools

In my last post we discussed some off-the-shelf tools. This space is maturing fast though.

*i.e. I wouldn’t recommend Intangible Market for anything now.*

My current recommendation is to check out Evaluate Market, then for some secondary data. For example cash in/out from marketplace sales.

Shout out to Poland Springs at Evaluate Market for being a cool product owner. Maybe a fellow Pole too? I joined their Discord early and quality was much higher than the NBATS main Discord.

I considered launching a paid service like Top Shot Signals is turning out to be. In the next section we’ll walk through how to do the technical side of that — how you pull Flow blockchain data in a stream.

Oh well. Another victim of my lacking interest in basketball.

For my active SaaS projects you can always look to Kapotel’s website. 📈

Getting your own real-time market data

Erik Ren blogged about getting moment purchase events from Top Shot.

These are only part of the picture, though, because in full you have the following event types per NBATS smart contracts —

// emitted when a TopShot moment is listed for sale
pub event MomentListed(id: UInt64, price: UFix64, seller: Address?)
// emitted when the price of a listed moment has changed
pub event MomentPriceChanged(id: UInt64, newPrice: UFix64, seller: Address?)
// emitted when a token is purchased from the market
pub event MomentPurchased(id: UInt64, price: UFix64, seller: Address?)
// emitted when a moment has been withdrawn from the sale
pub event MomentWithdrawn(id: UInt64, owner: Address?)
// emitted when the cut percentage of the sale has been changed by the owner
pub event CutPercentageChanged(newPercent: UFix64, seller: Address?)

Another thing is that Erik’s code doesn’t dependably work. You encounter errors like this below.

He addressed the problems himself on GitHub here.

What do we do to get around Go and these errors? Use the Flow JavaScript SDK instead.

You can already find at least one project doing that. For some reason, its author complains the code is too slow.

Some limited testing of streaming this data locally to myself didn’t have that same problem.

Anyway, you want to hit Flow at some periodicity — say 30 seconds — and save off data to a database. That’s it in a nutshell.

You’ll need some logic that says to step back over historical blocks to backfill data back to some ancient time of your choice. That might be NBA Top Shot’s actual beginning, or maybe the start of public beta.

Up to you and what your analytical desires are.

Consider too that the market is maturing. Patterns that made sense in October 2020 may not make sense now. Consumer behaviors are emerging. Etcetera etcetera.

What kind of data should you use? I was tempted to throw everything in a big-ass Postgres database.

Would that be practical? It’s hard to say without having put rubber to the road.

The other challenge is that Top Shot is growing. After selling all my stuff it has continued to rise.


Increased activity means more data to process per interval of time you grab block data for. Whatever you design should scale up.

You might need Redis, queues, all that good stuff. Again it’s hard for me to say right now.

Closing thoughts

In the wacky market environment we see today, just about everything is paying out.

Even virtual basketball cards for someone averse to basketball. 😉

You’re not a genius when everything is going up — as much as I want to look like Internet Cool Guy.

NBA Top Shot is still in its infancy. Maybe I’ve left a lot of money on the table as they expand internationally, get more attention, etc.

For those who truly appreciate the NBA, at least your buying into Top Shot means you’ll never be at 100% loss. You find some intangible value in your Moments.

But it felt like gambling to me in the end.