On-chain metrics · UTXO data
Bitcoin UTXO data from the fully-indexed chain
Bitcoin works in unspent transaction outputs, and the UTXO set is where the real on-chain state lives. BitcoinDatabase exposes the full UTXO set from the fully-indexed chain: every unspent output with its value to the satoshi, the address and script type that controls it, the block and age since it was created, and which transaction created it.
REST API · SQL · dashboards · address history from genesis
BTC
Balance trail
informational on-chain data · not financial advice
Query a single address's UTXOs, aggregate the set by age band to build UTXO age distribution and supply-by-age metrics, or analyze coin movement in SQL. It is the raw material for HODL waves, realized cap and coin-age research. Informational on-chain data only, not investment advice.
History from genesis queryable in seconds
On-chain data not financial advice
Why it works
What you get with UTXO data
The full UTXO set
Every unspent output is available with its value, controlling address, script type, creating transaction and the block it was minted in.
Age and distribution
Aggregate UTXOs by age band to build UTXO age distribution, supply-by-age and HODL-wave style views straight from the raw set.
Foundation for metrics
Coin age underpins realized cap, SOPR and coin-day analysis, and you can compute them from the indexed UTXO data on your own terms.
Side by side
The UTXO response schema, field by field
This is what GET /v1/address/{addr}/utxos returns for each unspent output, and how each field maps onto the names other Bitcoin APIs use for the same thing. Field names differ across providers far more than the underlying data does, and most of the time lost porting a UTXO integration goes into working that out. An unspent output in our schema is simply a row in outputs where spent is false, so the UTXO set is a view over the chain rather than a separate product.
| Field | Type | What it holds | Called elsewhere |
|---|---|---|---|
| txid | string | The transaction that created this output | txid, tx_hash, transaction_hash |
| vout | integer | The output index inside that transaction, zero based | vout, n, output_index, outputIndex |
| address | string | The address that controls the output | address, scriptpubkey_address |
| value_btc | decimal | The amount, carried to eight decimal places so nothing rounds | value, satoshi, value_satoshi, amount |
| script_type | string | p2pkh, p2sh, v0_p2wpkh, v0_p2wsh, v1_p2tr or op_return | scriptpubkey_type, scriptPk, script_type |
| spent | boolean | False for every UTXO, by definition | spent, is_spent, spent_by_txid |
| created_at | timestamp | When the creating block confirmed | block_time, status.block_time |
| block_height | integer | The height of the creating block, on the transaction | height, block_height, status.block_height |
| price_at_creation_usd | decimal | The USD price when the output was created, so acquisition value travels with the lot | No equivalent on public explorers |
Two practical notes. First, units: we return value_btc as a decimal with eight places rather than an integer satoshi count. Most explorers, and UniSat in particular, return an integer named satoshi or value instead, so multiply by 100,000,000 when you port a query across and never let a float round the result. Second, script_type is on the output itself. We checked this across the public address endpoints on 22 August 2026 and none of them returns a script type on an address lookup; the type only appears on the transaction endpoint, inside the vout object. If you are grouping a wallet by address type, that difference decides whether the job is one query or a full transaction crawl. On one block, 963,670, the split across 9,784 outputs was 56.91 percent v0_p2wpkh, 18.90 percent op_return, 12.54 percent v1_p2tr, 4.60 percent p2pkh, 4.26 percent p2sh and 2.26 percent v0_p2wsh.
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.
- List UTXOs for any address
- Read value, script type and creating tx
- Build UTXO age distribution and supply by age
- Analyze coin movement and dormancy
- Query the UTXO set via API, SQL or dashboard
GET /v1/address/{addr}
query result
{
"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 UTXO data
Explore more
More ways to query Bitcoin with BitcoinDatabase
Bitcoin address types
Script type on every input and output: legacy, P2SH, native SegWit and Taproot, counted and valued.
Learn moreBitcoin dust attack detection
Dust limits per script type, dust transaction data, and the spray patterns behind address poisoning.
Learn moreBitcoin address lookup
Look up any Bitcoin address: balance, full history and UTXOs in one query.
Learn moreBitcoin broadcast transaction API
Push a signed raw transaction to the Bitcoin network over REST and get the txid back, or the node's exact reason for refusing it.
Learn moreBitcoin transaction decoder
Decode a raw Bitcoin transaction hex into readable JSON: inputs, outputs, scripts and addresses.
Learn moreBTC address balance API
Get exact balances and UTXOs for any address, in batches.
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, with address history back to the genesis block over REST. Informational on-chain data only, not financial advice.
History from genesis over REST · SQL · dashboards · addresses, transactions, UTXOs, metrics