Bitcoin Fee Percentiles

The distribution inside every captured block — not just an average. Min, p10, p25, median, p75, p90 and max fee rates in sat/vB, computed by our own node. A growing series: the node is synced to the chain tip; coverage gaps from the sync period remain.

Daily aggregates · CSV Every block · CSV, gzipped (~1.5 MB)

Files regenerate daily · 59,923+ blocks from height 602,342 to the chain tip — the range contains gaps from the initial sync; exact covered heights are in the per-block file

Sample rows

dateblockstotal_fees_coinavg_feerate_p10avg_feerate_p50avg_feerate_p90txsbytes
2019-11-043415.5061379222.58835.67676.70689,42243,001,392
2019-11-0514443.7323248215.15325.85455.34332,839163,746,611
2021-04-1010360.0017272934.79651.31184.718196,660135,291,033

Columns

ColumnMeaning
dateUTC calendar day
blockscanonical blocks that day (orphans excluded)
total_fees_coinsum of transaction fees, in BTC
avg_feerate_p10 / p50 / p90day's average of each block's 10th / 50th / 90th fee-rate percentile, in sat/vB — computed per block by getblockstats at validation
txs, bytestransactions and serialized bytes that day

The per-block file adds height, time_unix, min/p25/p75/max percentiles, per-block fees and subsidy in base units.

Where the numbers come from

Every row was computed by our own full nodes at validation time — never scraped, never imported from another explorer. That is the point of the archive: a series with a provable start date whose numbers you can re-derive from any full node, plus per-block fee-rate percentiles that pruned nodes cannot reconstruct after the fact. Node liveness receipts are on /nodes.

Why percentiles, not averages

A block's average fee rate is dominated by outliers; the distribution is what tells you what confirmation actually cost. One consolidation transaction at 1 sat/vB or one overpay at 500 doesn't move the p50 — which is why percentile series are what fee researchers actually want, and why we store them per block instead of recomputing lossy summaries later.