BitcoinDatabase.com
All posts
Metrics

On-Chain Metrics Explained: SOPR, Realized Cap, HODL Waves and What They Mean

On-chain metrics explained from first principles: SOPR, realized cap, HODL waves, active addresses and exchange flows, what each one measures, how it is computed from UTXOs, and how to read it. Informational only, not advice.

By the BitcoinDatabase team

June 2026 · 11 min read

Query Console
btc
try:

Hit Run to query the fully-indexed Bitcoin blockchain.

BTC

30-day trend

informational on-chain data · not financial advice

REST API · SQL · dashboards, one indexed dataset. Querying the indexed Bitcoin blockchain ...

On-chain metrics explained: what the ledger actually measures

On-chain metrics are statistics computed directly from the Bitcoin ledger rather than from price feeds or exchange order books. Because every transaction, output and address is public and verifiable, you can measure things about the network that no off-chain source can see: how old the coins moving today are, what price they last moved at, how many addresses were active, and how much value flowed toward exchanges. This article explains the most cited metrics, where each number comes from, and how to read it. Everything here is informational and analytical. None of it is financial or investment advice, and on-chain metrics are descriptive, not predictive.

The building block: UTXOs

Almost every meaningful metric is built on the unspent transaction output, or UTXO. Bitcoin does not store account balances; it stores discrete coins called outputs. When you spend, you consume whole outputs as inputs and create new outputs. Each UTXO carries an amount, the block it was created in, and (because the ledger is timestamped) the rough price at that time. That last fact, a creation height and an implied historical price, is what makes the richer metrics possible.

-- coins that have not moved in over a year ("old supply")
SELECT sum(value_btc) AS old_supply_btc
FROM outputs
WHERE spent = false
  AND created_at < now() - interval '1 year';

SOPR: Spent Output Profit Ratio

SOPR asks a simple question of every coin that moves: was it sold for more or less than it was acquired for? For each spent output, divide the value at the moment it is spent by the value when it was created. Average that across all outputs spent in a period and you have SOPR.

A SOPR above 1 means coins are, on average, moving at a profit relative to when they last moved. Below 1 means they are moving at a loss. A reading right around 1 is often where coins move at break-even. Analysts watch it as a behavioral indicator of whether the market is realizing gains or losses, but it describes what holders have already done, it does not forecast what they will do next. See what SOPR is for the full breakdown, or query it and adjusted SOPR from the SOPR API.

Realized cap and realized price

Market cap multiplies every coin by today's price. Realized cap does something more grounded: it values each UTXO at the price when it last moved, then sums those values. In effect it is the aggregate cost basis of the entire supply, a measure of how much real capital is stored in the network rather than a snapshot of speculative value.

Divide realized cap by the circulating supply and you get realized price, an approximation of the average price at which all coins last changed hands. Because it weights by actual movement, realized cap reacts slowly and is far less jumpy than market cap. See what realized price is for the full breakdown, or pull the figures directly from the realized price API.

-- realized cap = sum of each unspent output valued at its last-moved price
SELECT sum(value_btc * price_at_creation_usd) AS realized_cap_usd
FROM outputs
WHERE spent = false;

HODL waves

HODL waves slice the entire supply into age bands, how long ago each coin last moved, and chart what share of supply sits in each band over time. Bands typically run from "less than a day" up through "1 to 2 years", "3 to 5 years" and beyond.

Reading them is intuitive: when older bands swell, a large share of supply is sitting still and dormant. When younger bands expand, older coins are waking up and moving. HODL waves are a vivid way to see the balance between long-term holding and active circulation across the network's history. They are a description of coin age, nothing more. See what HODL waves are for the full breakdown, or query them and supply in profit and loss from the supply metrics API.

Active addresses

Active addresses counts the distinct addresses that appeared as an input or output in a given window, usually a day. It is a rough proxy for network usage. A caveat worth stating plainly: one person can control many addresses, and one address can represent many people (an exchange's hot wallet), so the count tracks activity, not unique users. Treat it as a directional signal of engagement, not a headcount.

-- distinct active addresses per day, last 14 days
SELECT day, count(DISTINCT address) AS active_addresses
FROM address_activity
WHERE day >= current_date - 14
GROUP BY day
ORDER BY day;

Exchange flows

Exchange flows measure how much BTC moves into and out of addresses labeled as belonging to exchanges. Net inflows mean more coins are arriving at exchanges; net outflows mean coins are leaving, often toward self-custody. These metrics depend on entity labeling, the imperfect art of clustering addresses and tagging them to a known service, so they carry real uncertainty. Labels are estimates, and any flow figure inherits the limits of the labeling behind it. To pull inflow, outflow and net flow directly, see how the Bitcoin exchange flows API computes them from labeled addresses.

Reading metrics responsibly

Every metric on this page is derived, not observed: each one is an aggregation over raw on-chain data, so the quality of the metric is only ever as good as the indexed chain underneath it. On-chain metrics are powerful precisely because they are computed from a transparent, verifiable ledger. But they describe behavior, not the future. They depend on assumptions (especially anything built on entity labels), and a single metric in isolation rarely tells a complete story. Use them to understand what has happened on the network, and keep clear that understanding history is not the same as predicting price. For the network-level numbers underneath these metrics, hashrate, difficulty, block times and supply, see the Bitcoin network statistics.

Get started

BitcoinDatabase computes these metrics over a fully-indexed copy of the chain and exposes them through the REST API, SQL, and ready-made dashboards. You can recreate every query above against live data, or open the Query Console and explore SOPR, realized cap and HODL waves yourself in a few seconds. The numbers are there for you to read and verify.

Query the Bitcoin blockchain yourself

Pull balances, UTXOs, transactions, on-chain metrics and fund flows from the fully indexed Bitcoin blockchain by REST API, SQL and dashboards. Indexed since 2009, new blocks within seconds, no node to run.

Keep reading

More from the BitcoinDatabase blog

On-chain metrics

What Are HODL Waves? Bitcoin Coin Age Bands Explained

HODL waves band the entire bitcoin supply by how long each coin has stayed unspent. What the bands mean, how realized-cap HODL waves differ, and how to read long-term-holder behavior from coin age without treating it as a signal.

Read
Data guides

Bitcoin Active Addresses: What the Metric Actually Counts

Active addresses does not count people, and it overstates them. We fetched all 4,329 transactions in block 963,218 on 19 August 2026 and counted them five ways: 12,388 naive unique addresses, but 11,760 of those appear exactly once, and merging addresses that co-spend gives 9,789 actors. One wallet consolidating dust contributed 285 of them while paying nobody.

Read
Guides

What Is Realized Price in Bitcoin? Realized Cap Explained

What is realized price in bitcoin: the average price at which every coin in circulation last moved on-chain. How realized cap is built from UTXOs, how it differs from market cap, and why analysts watch it.

Read
Buyer guides

Best Bitcoin On-Chain Data API for Quant Research Teams

For research work the deciding factor is reproducibility, not metric count. Checked first-hand on 21 August 2026: Glassnode's 49 dollar Advanced plan does not include API access and its Professional tier has no published price, while coinmetrics.io now 301-redirects to Talos with pricing behind a demo request. Plus why a fixed adjustment factor for on-chain volume breaks: two blocks six days apart needed corrections of 17.03x and 4.87x.

Read

Query the whole Bitcoin blockchain

BitcoinDatabase indexes the public Bitcoin blockchain block by block and returns balances, UTXOs, transactions, on-chain metrics and fund flows by REST API, SQL and dashboards, with no node to run.

REST + SQL + dashboards · indexed since 2009 · new blocks within seconds

Informational on-chain data only · not financial, investment or legal advice · AML features are compliance tooling to support your own review.