Bitcoin Fee Percentiles
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
| date | blocks | total_fees_coin | avg_feerate_p10 | avg_feerate_p50 | avg_feerate_p90 | txs | bytes |
|---|---|---|---|---|---|---|---|
| 2019-11-04 | 34 | 15.50613792 | 22.588 | 35.676 | 76.706 | 89,422 | 43,001,392 |
| 2019-11-05 | 144 | 43.73232482 | 15.153 | 25.854 | 55.34 | 332,839 | 163,746,611 |
| 2021-04-10 | 103 | 60.00172729 | 34.796 | 51.311 | 84.718 | 196,660 | 135,291,033 |
Columns
| Column | Meaning |
|---|---|
| date | UTC calendar day |
| blocks | canonical blocks that day (orphans excluded) |
| total_fees_coin | sum of transaction fees, in BTC |
| avg_feerate_p10 / p50 / p90 | day's average of each block's 10th / 50th / 90th fee-rate percentile, in sat/vB — computed per block by getblockstats at validation |
| txs, bytes | transactions 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.