Bitcoin's ledger records something no stock exchange publishes. Every time a coin moves, the chain knows what it was worth the last time it moved, which means for any transaction you can ask a blunt question, did the person spending this coin make money or lose money, and get an actual answer. Aggregate that across every coin spent in a day and you get SOPR, the Spent Output Profit Ratio. It sits in the small group of on-chain metrics with a pattern clean enough that I actually make decisions around it.
The mechanics are simple. For every spent output, divide its value at the time it was spent by its value at the time it was created, weight by size, and average across the day. A reading above 1.0 means the coins that moved were sold, in aggregate, at a profit. Below 1.0 means people were realizing losses. Exactly 1.0 means the average coin changed hands at its cost basis, which sounds like a boring midpoint and turns out to be where all the useful behavior lives.
Why 1.0 behaves like a price level
Breakeven does strange things to people. Nobody wants to sell at a loss, and holders who are underwater tend to promise themselves they will get out the moment they are made whole. Both biases are old news in behavioral finance. What a transparent ledger adds is the ability to watch them play out in aggregate, in near real time, and together they give the 1.0 line a property most oscillators only pretend to have. It acts like support in uptrends and resistance in downtrends.
In an uptrend it works like this. Price dips, recent buyers watch their position fall back toward their entry, and most of them do nothing, because selling at breakeven after riding a winner feels stupid. The loss-sellers who would push SOPR below 1.0 mostly are not there, and buyers who missed the earlier move treat the dip as their entry. So SOPR tags 1.0, holds, and turns back up, and that bounce has historically lined up well with local bottoms in bull markets.
In a downtrend the same line flips character. Now there is a mass of holders underwater, waiting for the exit. Any rally that lifts the average spent coin back to breakeven runs straight into their sell orders. SOPR climbs toward 1.0, stalls, and rolls over, and price usually rolls with it, because the supply overhead is real and it is sitting exactly at cost basis.
The useful corollary is that the flip itself is information. When SOPR stops bouncing at 1.0 and starts getting rejected there, or the reverse, the regime has probably changed, and that change often shows up before it is obvious on the price chart alone. It is one of the earlier honest tells I know of.
Where raw SOPR lies to you
The raw metric has two structural problems, and if you have ever watched a SOPR spike that made no sense, you have probably met one of them.
The first is change outputs. When you spend a UTXO, the leftover comes back to you as a new output, and if that change moves again shortly after, it registers as a spend with almost no holding period and a profit ratio of almost exactly 1.0. Enough of these mechanically drag the whole metric toward 1.0 and mute the signal. Adjusted SOPR, usually written aSOPR, fixes this by ignoring outputs younger than about an hour. If you take one thing from this piece, default to aSOPR over the raw series.
The second problem is bigger and dumber. Exchanges shuffle coins between their own wallets constantly. Hot to cold, cold to hot, consolidation sweeps, and the occasional full migration to new infrastructure. No one is taking profit when that happens, but on-chain it all looks like spending, and the coins involved often carry very old cost bases. A large custodian reorganizing wallets can print a monster SOPR spike that reads like long-term holders dumping en masse when, economically, nothing happened. This exact false signal has burned people during several well-known exchange migrations over the years.
Entity-adjusted SOPR exists for that reason. Data providers cluster addresses into entities using heuristics like common input ownership, then count only transfers that cross an entity boundary, so an exchange moving coins between its own addresses drops out of the metric entirely. It is the cleanest read of genuine profit-taking available, with the honest caveat that the clustering is proprietary and imperfect, so different providers will not print identical values. The shape tends to agree even when the levels do not, and the shape is what you use.
There is also a short-term holder variant, STH-SOPR, which restricts the calculation to coins younger than roughly 155 days. Recent buyers are the twitchiest cohort, so it responds faster around local swings, and its 1.0 tests are the ones I watch when timing actually matters.
How I actually use it
My working checklist, roughly in order:
- Smooth it. The daily series is noisy, so I look at something like a 7-day average and mostly ignore single prints.
- Establish the trend from price structure first. The 1.0 test only means something inside a trend. In sideways chop, SOPR oscillates around 1.0 and every rule below will whipsaw you.
- In an uptrend, smoothed aSOPR tagging 1.0 and curling back up suggests the dip is exhausting. Reasonable place to add, bad place to panic sell.
- In a downtrend, SOPR grinding up toward 1.0 from below tells me a rally is about to meet a wall of breakeven sellers. I do not chase there.
- Watch for the regime flip. A series that lived above 1.0 for months and then spends a couple of weeks below it is telling you the dip-buying cohort has stopped defending its cost basis. Stop treating dips as gifts.
- Sanity-check any violent one-day spike in the raw series against known exchange wallet activity before believing it. If entity-adjusted SOPR barely moved, you were watching internal plumbing rather than actual selling.
Two more caveats before you wire this into anything. SOPR is value-weighted, so a single whale realizing a decade of profit can dominate a day's print without telling you much about the crowd. And it is a coincident metric, sometimes slightly lagging. It confirms that a dip is being bought or a rally is being sold while that happens, and it will not warn you the day before. The metric is also native to Bitcoin's UTXO accounting, so versions built for account-based chains are reconstructions, and I trust those less. I treat SOPR as a regime filter and a confirmation layer, never as a standalone trigger.
I keep smoothed aSOPR on a panel next to whale wallet flows in Blockcircle, and the pairing earns its place. A clean 1.0 bounce on a hard dip while the large wallets are absorbing rather than distributing is about as good as on-chain confirmation gets. Neither signal makes the trade for you. But knowing whether the people selling into a move are locking in profits or capitulating at a loss is a genuine edge over reading the candle alone, and SOPR is the simplest honest way to get it.