Query the chain · SOPR
Bitcoin SOPR API for the spent output profit ratio
SOPR, the spent output profit ratio, measures whether the coins moving on-chain are being spent at a profit or a loss. For every spent output it compares the price when the coin was created to the price when it was spent: value realized divided by value at creation. Average that across all spent outputs in a window and a reading above 1 means coins are moving in aggregate profit, below 1 means loss, and 1 is breakeven. The Bitcoin SOPR API computes it from the fully-indexed chain, valuing each spent output against historical market data so you get SOPR, adjusted SOPR, and the realized profit and loss behind it.
REST API · SQL · dashboards · indexed from genesis
Hit Run to query the fully-indexed Bitcoin blockchain.
BTC
30-day trend
informational on-chain data · not financial advice
Pull the current figure over REST for a dashboard, or run SQL to rebuild the whole series, compute adjusted SOPR that filters very short-lived outputs, or split profit-taking from loss-taking. Because spent outputs, their timestamps and the price series share one schema, every SOPR reading traces back to the transactions that produced it rather than a black-box number. This is informational on-chain data and analytics for research, not a trading signal, a valuation, or investment advice.
Indexed from genesis queryable in seconds
On-chain data not financial advice
Why it works
What you get with SOPR
SOPR and adjusted SOPR
Get the spent output profit ratio for any window, plus adjusted SOPR that filters outputs spent within about an hour to strip out coins that barely moved, both computed from spent outputs valued at creation and spend on the indexed chain.
Realized profit and loss
SOPR is a ratio; the dollars behind it are realized profit and loss. Split value spent in profit from value spent in loss, so you can see not just whether coins moved in the money but how much profit or loss was realized.
Rebuild and slice in SQL
In SQL you can reconstruct the full daily SOPR series, compute it for a subset of the supply, or join it against realized price, exchange flows and other metrics you already query here, then trace any reading back to its spent outputs.
What a SOPR reading is actually sensitive to
On 3 September 2026 we rebuilt SOPR from raw chain data for block 965,140, using 661 sampled spent outputs, and ran the identical formula over three defensible daily close series. We got 0.977672, 0.978207 and 0.978806. The only thing that changed was the price source. That spread of 0.001134 is roughly 5 percent of the distance the reading sat from breakeven, and the two furthest apart were not two exchanges but one exchange against itself, because OKX returns a daily candle starting at 16:00 UTC unless you explicitly ask for bar=1Dutc. The same sample also showed why the adjusted variant exists: 555 of 658 inputs were under an hour old, and at daily price resolution those coins are priced identically on both sides of the ratio, so they contribute exactly 1.000000 by construction. This is the reason we expose the spent outputs and their prices rather than only a finished number. You can see which convention produced a reading, and change it.
What it handles
The indexed Bitcoin chain, queryable your way
Look up an address, a transaction, a UTXO, the rich list or an on-chain metric, by REST API, SQL or dashboard. The same authoritative data, reconciled block-by-block against the canonical chain, without running a node.
- Query SOPR and adjusted SOPR for any window
- Split realized profit from realized loss
- Reconstruct the full historical SOPR series in SQL
- Compute SOPR for a cohort or address set
- Trace any SOPR reading to its spent outputs
{
"address": "bc1qxy2k…l0wdv8",
"balance_btc": 68432.10,
"balance_usd": 4612165420,
"tx_count": 1284,
"unspent_outputs": 37,
"first_seen": "2014-02-09"
}
Why BitcoinDatabase
One platform, queryable three ways
Not a raw node to sync, not an indexer to build, and not five vendors to stitch together. The fully-indexed Bitcoin blockchain, available as a REST API, as SQL, and as dashboards, on one authoritative dataset.
REST API
Typed JSON for addresses, transactions, balances, UTXOs and metrics. Drop it into apps, wallets, explorers and agents with curl, Python or any HTTP client.
SQL access
Run SQL directly against the indexed Bitcoin dataset for ad-hoc analysis, cohorts and exports, the same data the API and dashboards read from.
Compliance-first
Informational on-chain data and analytics only. Entity labels and flow tracing are framed as tooling to support a regulated team's own review, not accusations.
Good questions
Questions about SOPR
Explore more
More ways to query Bitcoin with BitcoinDatabase
Bitcoin realized price API
Pull realized price, realized cap and the MVRV ratio from the indexed chain.
Learn moreBitcoin Supply Metrics API
Query supply in profit and loss, HODL waves and exchange supply from the indexed chain.
Learn moreBitcoin flow analysis
Trace how funds move between addresses, clusters and entities.
Learn moreBitcoin transaction volume
Raw, change-adjusted and entity-adjusted on-chain volume series from the indexed chain.
Learn moreBitcoin active addresses
Daily active address counts, historical series and entity-adjusted numbers from the indexed chain.
Learn moreBitcoin API
Query addresses, transactions and balances across the whole indexed chain in one call.
Learn moreStop running a node. Just query Bitcoin.
Run your first query now and get on-chain data back by REST API, SQL or dashboard, indexed from the genesis block. Informational on-chain data only, not financial advice.
Indexed from genesis · REST · SQL · dashboards · addresses, transactions, UTXOs, metrics