Como a Kote Charts calcula métricas on-chain do Bitcoin: full node próprio, índice de custo-base UTXO, rótulos de entidades, cadência de atualização, regras de granularidade, limitações e verificação.
Last updated: . Terms are defined in the glossary.
Every on-chain metric on Kote Charts is computed from a Bitcoin full node that we operate ourselves. The node validates every block since the genesis block of 3 January 2009; a dedicated indexer parses each block into transactions, inputs, outputs and addresses and stores them in our own database (about 1.4 billion transactions and 2 billion addresses at the time of writing). We do not buy or resell on-chain datasets from third parties.
Market data (BTC/USD price, gold, the US dollar index, equity indices, MSTR, exchange volumes, stablecoin supply and ETF flows) comes from public, documented sources and is refreshed once a day. Charts that mix on-chain data with a market series say so in their “Good to know” section and in the MCP describe_chart output (source: “mix · onchain + price” or “mix · onchain + markets”).
Bitcoin’s ledger is a set of unspent transaction outputs (UTXOs). Each output remembers the block in which it was created, and therefore the market price at that moment. We keep a live index of every unspent output with its creation price and age — the realized index — and extend it incrementally every day with the blocks that were added since the last run; it is never recomputed from scratch unless the methodology changes.
Realized cap is the sum of all UTXOs valued at their creation price; realized price divides it by circulating supply. MVRV, MVRV Z-Score, NUPL, supply in profit and every age-band chart derive from this one index, so they are internally consistent: a coin counted as “in profit” in one chart is in profit in all of them.
When an output is spent, the difference between its creation price and the spend price becomes realized profit or loss, and its age in days becomes coin days destroyed. SOPR is the volume-weighted ratio of spend price to creation price over all outputs spent that day; adjusted SOPR drops outputs younger than one hour. Short-term holders are coins younger than 155 days, long-term holders older ones.
Addresses are grouped into entities with standard clustering heuristics (chiefly common-input ownership) and labelled as exchanges, miners, funds or other known services from public attribution plus our own research. Exchange flow, reserve, whale-ratio and miner metrics count coins moving into or out of those labelled clusters.
Entity membership is frozen into a versioned snapshot before a pass runs, and the exchange reserve is cumulated from genesis for that exact snapshot — so a reserve series is never a mix of two label vintages. Labels are heuristic estimates: an unlabelled exchange wallet under-counts flows, and a mislabelled one over-counts them. We publish label coverage statistics internally and improve the labels continuously; historical series are restated when the membership changes materially.
Daily charts settle after the UTC day closes: the on-chain sync, the realized-index tail and the market-data refresh run every morning (Europe/Sofia), and charts are republished only when their data actually changed. Selected on-chain metrics also update per block; those series carry 5-minute buckets for the last 30 days.
Every chart page shows the date its data runs through and the last block height fully analysed (the analytical watermark). The same values are available programmatically: published_at and last_t per chart in GET /api/v1/public/charts, and asOf / lastT in the MCP describe_chart and get_latest tools.
Series are stored at their native resolution and resampled on request into day, 3-day, week, month or year buckets. Additive quantities (flows, counts, fees) are summed per bucket; state quantities (price, reserve, supply) keep the final observation of the bucket; derived ratios are recomputed from their inputs when those are available in the bucket.
All intervals are closed-only — a week appears once it has ended. The single exception is includePartial=true with daily granularity, which appends the still-open UTC day flagged partial: true; that point can change until midnight UTC.
On-chain metrics describe what happened on the ledger; they do not see off-chain trades inside exchanges or custodians. Entity labels are probabilistic. Early-history prices (2009–2010) are sparse and partly reconstructed. Market data depends on third-party providers and may lag by a day. Models such as stock-to-flow or the power law are descriptive references, not forecasts.
Nothing on this site is financial advice. Metrics are published for education and research; please read each chart’s “Good to know” caveats before drawing conclusions.
Every chart is available as JSON through the free REST API (GET /api/v1/public/charts/{id} with a free X-API-Key, 3 requests per second) described by an OpenAPI document at /api/v1/openapi.json, and through the MCP server at /api/v1/mcp (tools list_charts, describe_chart, get_chart, get_latest) that needs no key. Chart pages carry schema.org Dataset metadata with the formula, the temporal coverage and the download URL.
Data and charts are free for personal, educational and other non-commercial use. When you publish numbers or charts derived from Kote Charts, cite “Kote Charts” and link the chart page (https://kotecharts.com/c/<chart-id>); the Terms of Use govern reuse.