Maintained by: Dune · Refresh: hourly · Token standards: native, ERC20
Get This Data
Access balance data via API, Datashare, or the Dune App.
Available Datasets
Latest Balances
Most recent balance per (address, token) with USD value
Daily Balance Updates
Sparse validity-interval table for historical balance reconstruction. The default for time-series analysis.
Balance Updates
Per-block balance changes
Choosing a Table
| Question | Use |
|---|---|
| What does this wallet hold right now? | balances_<chain>.latest |
| What did this wallet hold on day X? Over the last N days? | balances_<chain>.daily_updates |
| Exactly when did the balance change? | balances_<chain>.updates |
balances_<chain>.daily_updates is the right default. It trades off granularity for query speed and includes USD values. Drop down to balances_<chain>.updates only when you need block-level resolution.
balances_<chain>.daily_updates is sparse: it stores one row per balance change with a validity interval [valid_from, valid_to), not one row per day per pair. The interval layout means you can reconstruct the balance for any (address, token) on any past day by joining a calendar table or expanding the interval. See the page’s usage notes for the recommended filter pattern and address_prefix partition key.
Cross-chain
The tables are per-chain. For a wallet’s portfolio across chains,UNION ALL per-chain totals from balances_<chain>.latest:
Coverage
arbitrum, avalanche_c, base, bnb, ethereum, flare, gnosis, hyperevm, ink, linea, mantle, monad, optimism, plasma, polygon, sei, sonic, unichain, worldchain, zksync. Token standards:native and erc20. NFT balances (ERC721/ERC1155) are not included. Native tokens use the standardized contract address from dune.blockchains for that chain (zero address on most EVMs, 0x0000…1010 on Polygon).
Methodology
Balances are read directly from chain state at the blocks where activity is observed, rather than being accumulated from transfer events. Between observed activity, the most recent value is carried forward. Balance changes that occur without surfacing any tracked activity (for example, a rebase that emits noTransfer) are not detected until the next surfacing event.
balances_<chain>.daily_updates and balances_<chain>.latest include balance_usd joined from prices.day and prices.latest respectively. balances_<chain>.updates is intentionally unpriced. See its docs for how to attach a price that fits your analysis.
Related Tables
tokens.transfersfor token transfer eventsprices.day/prices.latestfor token pricestokens_<chain>.erc20for ERC20 metadata (name, symbol, decimals)
Enterprise Data Solutions
Need custom balance datasets or dedicated support? Talk to our enterprise team.
Build Custom Models
Build private balance tracking pipelines with the dbt Connector.