Playing the Lego stock market on eBay

Lego 10214 Tower Bridge sold prices I’ve been a Lego fan my whole life and recently I got into buying sets that were about to be retired to see whether they went up in value over time. Limited edition Star Wars sets were the clearest pattern, typically around 10% compound a year which is huge if you’re looking at it as a long hold. The hard part was figuring out which other ranges kept up with that kind of appreciation over long periods instead of just going by gut feel on Star Wars.

So I built a small dashboard of sold eBay UK prices to get a clearer picture of what sets actually traded for once they were off the shelves. I cared about the usual price band, not the asking prices.

What I built

This was also my first go at Google Cloud Functions so the whole serverless thing was new to me. There was no big centralised app - just a single static HTML file talking directly to a bunch of Cloud Functions that each run independently.

  • Frontend: one Bootstrap page with Google Charts. Watchlist of set numbers, sold listings you can hide, and a scatter + candlestick of the price band. No app server, the page just hits the function URLs over HTTPS.
  • Scrapers: Cloud Functions that pull completed new-condition UK sales from eBay into storage. I had an earlier function for live auctions but settled on sold listings as it gave a cleaner price history.
  • Storage: Google Cloud Datastore with search terms as parents and listings as children (price, shipping, end date, image, whether I’d hidden it).
  • Stats / API: more Cloud Functions to compute price percentiles, list search terms and listings, and soft-hide junk.

You type something like LEGO 75192, hit refresh scrape, and the charts update from whatever Datastore already has. Getting going was surprisingly fast. It was easy to push updates and prototype without worrying much about infra or keeping business logic in sync across a larger full-stack app.

What the numbers said

Once I had a few months of sold prices the bands were pretty tight.

Lego 21303 WALL-E sold prices

  • 10214 Tower Bridge: most sales between £191.50 and £209.50 (an £18 gap). Average £200.78 across 91 listings.
  • 21303 WALL-E: £100-£115. Average £105.55 across 95 listings.
  • 75105 Millennium Falcon: £120-£140. Average £132.12 across 103 listings.

Lego 75105 Millennium Falcon sold prices Hiding junk listings and refreshing the scrape didn’t open a spread, they just made the band clearer. Anything that looked underpriced got sniped really quickly. Often I’d message the seller asking to buy it ASAP and get something like “oh two people just messaged me and I’ve already sold it.” Basically every opportunity was already being taken by other people playing the same game.

Why I stopped

I wasn’t aware just how much of a real-time stock market this was, or that I wasn’t the first person to figure it out. In the end I gave up because the fun of tinkering with dashboards and serverless had run its course. I’d learned everything I was curious about and it wasn’t worth it as a side hustle, so I moved on.