Markets5 min read
Trading the gap in CS:GO skins
The first market I ever traded was a video game's. How instant-cashout sites created a knowledge gap, how I later played spreads between North American and Chinese marketplaces, and why the setup itself was the moat.
Long before order books and perpetual futures, the first market I traded was made of gun skins.
In Counter-Strike: Global Offensive (now Counter-Strike 2), weapons can have cosmetic skins. They do nothing for gameplay, but they're rare, tradeable between players, and some are worth more than a car. That combination produced a real market, with real liquidity, real spreads, and very uneven information. This post is about how I found the gap in it, twice.
How the market is shaped
That one detail, Steam money being stuck in Steam, creates most of the structure:
- The Steam Market has the most visible prices, but those prices are in a currency you can't cash out, after a cut taken on every sale.
- Instant-trade and cashout sites, CS.Money being the best known at the time, ran bots that would take your skin immediately and give you another skin or cash. Instant liquidity, at a spread.
- Peer-to-peer marketplaces let players sell to each other for real money, slower but closer to fair value.
Round one: the knowledge gap
In high school, the first edge I found wasn't technical. It was informational.
Most players thought of a skin's value as "what it says on the Steam Market" or "what an instant site offers me right now". Far fewer compared those against each other. The instant sites were valuable to people who wanted liquidity now, and they priced that convenience in. Some players wanted a specific skin and would overpay to get it immediately. Others wanted out and would sell below what a patient buyer would pay.
So the trade was straightforward to describe:
- buy from people who valued speed over price
- sell to people who valued a specific item over price
- know the prices across venues better than either side did
I started by doing it by hand, then wrote scripts to watch prices across sites and flag when the same item was meaningfully cheaper in one place than another. The edge wasn't speed. It was simply knowing more than the person on the other side of the trade.
Round two: the cross-border spread
Years later, in university, I came back to the market with better tools and a bigger idea.
By then the most important prices weren't in North America at all. Buff163 and YouPin are Chinese marketplaces with enormous volume, and a lot of price discovery for high-value skins happens there. CSFloat had become the common peer-to-peer marketplace for North American traders. The same item could sit at meaningfully different prices on each, and because skins move through Steam, an item bought on one could be sold on another.
The catch is that the Chinese marketplaces aren't built for people outside China. Getting set up meant:
- Step 1Regional account requirementsThese platforms are built for users in mainland China, so accounts and verification are tied to Chinese services that a North American setup doesn't cover.
- Step 2An Alipay accountDeposits and withdrawals run through Alipay, which needs its own verification before it can move money in and out.
- Step 3Marketplace accounts and verificationEach marketplace has its own account, its own verification, and its own rules for listing and withdrawing.
- Step 4Currency and settlementPrices are in yuan, so every spread has to be computed after currency conversion and each platform's fees.
- Step 5Steam's own constraintsItems move through Steam trades, with trade holds and protections that lock an item for a period after it moves.
That list is the real reason the spread existed. None of the steps is hard on its own. Together, they were enough friction that most North American traders simply didn't bother. The setup was the moat.
Automating it
Once the accounts existed, the rest was an engineering problem, and a satisfying one:
- Price feeds from each marketplace, normalized into one currency and one item naming scheme, since the same skin is described slightly differently on each site
- Net spreads, not headline spreads. A gap only counts after both platforms' fees, the currency conversion, and the cost of having money tied up while an item is locked
- Holding time as a cost. Because items can be locked after a trade, a spread that looks great but takes a week to realize competes with everything else that capital could do in that week
- Execution automated across listing, buying, and moving items, so the process ran without me babysitting each trade
What it taught me
Looking back, almost everything I do now has a version that started here:
- The quote is not the fill. The price on the screen and the price you actually get are different numbers, and the difference is where the work is.
- Friction is a moat. Some opportunities exist not because they're hard to see, but because they're tedious to reach. Being willing to do the boring setup is an edge.
- Net everything. Fees, currency, time locked up. A spread that doesn't survive its costs isn't a spread.
It's the same instinct that later shows up in ranking bridges by what actually arrives, and in charging every cost per trade in my own book.