Skip to content
Intermediate guide

Bitcoin SOPR explained: what spent outputs can and cannot tell you

What Bitcoin SOPR measures, how the ratio is calculated, what readings above and below 1 mean, and why a spent output is not proof of a sale.

8 min readBitcoinOn-ChainSOPR

SOPR, short for Spent Output Profit Ratio, compares what the bitcoin spent in a given window were worth in US dollars when they moved with what the same coins were worth when they were created. A reading of 1.02 means the outputs spent in that window were, taken together, valued 2% higher at spending than at creation.

That is the whole definition, and it is narrower than the name suggests. "Profit" here is a bookkeeping comparison between two price references, not a record of anybody's trade. Coins move for all sorts of reasons: payments, exchange housekeeping, someone shifting funds between their own wallets. SOPR counts every one of them. Keep that in mind and the metric is useful. Forget it, and it starts telling stories the data can't back up.

What does Bitcoin SOPR measure?

SOPR looks at one slice of the blockchain: coins that were spent. Everything that sat still during the same period is invisible to it.

What counts as a spent output?

Bitcoin doesn't keep account balances. It keeps unspent transaction outputs, or UTXOs: discrete chunks of BTC, each locked to a script and tied to the block that created it. A transaction consumes one or more of those outputs as inputs and creates new ones. Once consumed, an output is spent and can never be used again (Bitcoin developer guide: transactions).

The catch is that an output can't be partially spent. Say your wallet holds a single 1 BTC output and you pay someone 0.2 BTC. The whole 1 BTC output is consumed. The transaction sends 0.2 BTC to the recipient and returns the remaining 0.8 BTC, minus the fee, to you as a fresh change output. For SOPR, the full 1 BTC entered the calculation, even though only a fifth of it left your hands. The on-chain analysis basics guide walks through the UTXO model in more depth.

Which coins enter a daily value?

Only outputs spent inside the window. On CoinVett that window is 24 hours, so a daily SOPR value describes the outputs consumed on that day and nothing else. A coin that has been sitting in cold storage since 2017 has no effect on the number until the day it moves. That is the main difference from metrics such as MVRV, which look at the entire supply at once.

So the sample changes every day: Monday's value and Tuesday's value describe two different sets of coins.

How is SOPR calculated?

Glassnode, one of the best-known on-chain data providers, defines SOPR as the realized value of a spent output in USD divided by the USD value of the original UTXO at creation (Glassnode: SOPR). For a whole day you add up both sides across every spent output and then divide:

SOPR = total USD value of the spent outputs at spending ÷ total USD value of the same outputs at creation

Neither value comes from the blockchain itself. The ledger records amounts and block times, not prices. The dollar figures come from a BTC/USD price history, matched to when each output was created and when it was spent. "Value at creation" is therefore the market price at that time multiplied by the amount. It is not what anyone actually paid.

A hypothetical two-output example

The numbers below are made up to keep the arithmetic simple. Suppose only two outputs are spent on a given day, and the reference price that day is $60,000.

  • Output A: 0.5 BTC, created when the reference price was $40,000. Value at creation $20,000, value at spending $30,000. Ratio 1.50.
  • Output B: 2 BTC, created when the reference price was $70,000. Value at creation $140,000, value at spending $120,000. Ratio about 0.86.

Average the two ratios and you get roughly 1.18, which looks like a day of gains. That is the wrong method. SOPR divides the totals: $150,000 at spending against $160,000 at creation, which gives 0.94. Output B is four times the size of output A, so it dominates the result. Summing the dollar values first weights every output by its size, and that is the only reading that makes sense for an aggregate.

Notice what the 0.94 does not say. It doesn't mean "the market" lost money. In this tiny sample, the larger output happened to have been created at a higher reference price. That's all.

What changes in adjusted SOPR?

Glassnode also publishes adjusted SOPR, or aSOPR. It uses the same formula but drops every output that was less than one hour old when it was spent (Glassnode: aSOPR). Very young outputs, often change or coins being shuffled between addresses, sit close to 1 almost by construction: the price barely moves within an hour. Removing them shifts the result.

The two series are related but not interchangeable, so check which one a chart shows. CoinVett does not display aSOPR.

What do readings above, below and near 1 mean?

Above 1, below 1, around 1

The arithmetic reading is simple:

  • Above 1: the outputs spent in the window were, in aggregate, valued higher at spending than at creation.
  • Below 1: they were valued lower.
  • Around 1: the two valuations roughly match, which can happen when many of the coins that moved were created recently, at similar prices.

None of these readings says how any individual is doing. A value of 1.05 is compatible with thousands of small outputs spent below their creation value, as long as a few large, old outputs moved at a big gain. Because one large output can outweigh thousands of small ones, a single day can swing on a handful of transactions.

You will find commentary that treats moves around 1 as a market signal. That's interpretation stacked on top of the arithmetic, and the arithmetic doesn't support a timing rule.

One value versus a series

A daily value is a snapshot of one window. Before you read anything into it, check the date the data refers to and the window it covers. A value labelled with yesterday's date describes yesterday's spent outputs, not what is happening right now.

A series gives more context than any single day, because you can see whether a reading is unusual or sits within its normal range. Context isn't a forecast, though: a run of days above 1 describes the past and says nothing reliable about tomorrow.

What can SOPR not tell you?

A moved coin is not a sold coin

This is the limitation that matters most. A spent output proves that a transaction consumed it. It doesn't prove a change of ownership, a sale on an exchange, or a gain landing in anyone's bank account.

Picture an exchange consolidating thousands of small deposit outputs into one cold-storage address. The coins stay with the same company, yet every one of those outputs counts as spent and gets valued at today's price against its creation price. If the deposits are months old and the price has risen since, SOPR ticks up. Nothing was sold. The same happens when a long-term holder moves coins to a new hardware wallet: the old outputs are spent, new ones are created, and the creation price of those coins resets to the current level.

It works the other way round too. A trade between two customers of the same exchange usually just changes the exchange's own books and never touches the blockchain; the ECB classes such trades as off-chain transactions (ECB Economic Bulletin 5/2019). So a lot of real selling never shows up in SOPR. The accurate phrasing is "outputs were spent at an aggregate gain", not "investors took profits".

Different providers, different versions

SOPR is a concept, not a standard with one reference implementation. CoinVett reads the series sopr_24h from the Bitcoin Research Kit (BRK), open-source software that computes on-chain metrics from a Bitcoin node (BRK on GitHub). BRK documents the series as the spending value divided by the creation-date value of all outputs spent over the trailing 24 hours (BRK: sopr_24h). According to CoinVett's methodology, the preferred source is a self-hosted node; if none is reachable, the public BRK instance at bitview.space supplies the data.

Same idea as Glassnode's, not necessarily the same implementation. Price sources, day boundaries and edge cases can differ, so if two charts disagree in the third decimal place, neither one is necessarily wrong.

How to read CoinVett's Bitcoin SOPR alongside other data

The Bitcoin page shows SOPR next to MVRV, NUPL and Realized Price, with the date the data refers to, a 30-day range and the source of the measurement. If the sync has no fresh value, the figure can be missing or out of date, so look at the date before you look at the number.

The four figures measure different things. In the on-chain block of the Bitcoin page they sit side by side rather than being blended into a single score:

  • SOPR describes the outputs spent in one 24-hour window.
  • Realized Price is the cost basis of the entire supply, based on when each coin last moved.
  • MVRV compares market value with that realized value.
  • NUPL expresses the unrealized gain or loss of the whole supply relative to market value.

When SOPR and MVRV seem to point in different directions, the usual reason is that they look at different sets of coins, not that one of them is broken. Turning the combination into a trading signal would mean reading something into the data that isn't there.

SOPR answers one narrow question, and answers it well: how were the outputs spent in this window valued, compared with when they were created? Who sold, why the coins moved and where the price goes next are separate questions. The number has nothing to say about them.

Frequently asked questions

Does SOPR above 1 prove Bitcoin was sold at a profit?

No. It shows that the outputs spent in the window were, in aggregate, valued higher at spending than at creation. Those outputs include self-transfers, change and exchange housekeeping. Whether anyone sold, and at what personal cost basis, can't be read from the number.

How is SOPR different from MVRV and NUPL?

SOPR only looks at coins spent within a given window. MVRV and NUPL describe the entire supply, using the realized value of all coins. The guides on MVRV and NUPL explain both in detail.

Is CoinVett's SOPR the same as Glassnode's aSOPR?

No. CoinVett shows the sopr_24h series from the Bitcoin Research Kit, which according to BRK's documentation uses all spent outputs, including those younger than one hour. The one-hour filter is what defines adjusted SOPR (aSOPR), the variant Glassnode documents. BRK computes its own version, the asopr_24h series, which CoinVett does not display.

Notice: These figures describe historical on-chain data; the sources are linked in the text. For information only, not financial advice.

Related coins to explore

Want to go deeper? Open these coin pages to see market data and AI insights.

Related guides

These guides cover similar topics and make good next reads.

Ready to put this into practice?

The Crypto Profile Finder helps you explore an educational profile category based on your answers.

Continue learning

Bitcoin UTXOs explained: inputs, outputs and change

Next guide →
Editorial Team

CoinVett Team

The CoinVett editorial team combines crypto market expertise with AI-powered analysis tools.

This website only uses technically necessary cookies. No tracking, no analytics.