Most teams working with onchain data for accounting purposes spend more time normalizing the data than doing the actual accounting — writing per-chain parsers, mapping addresses by hand, rebuilding logic every time a new chain or token standard changes. Dune is the production-ready reconciliation stack that absorbs that work centrally.
Get clean, auditable transfer data across multi-chain client portfolios — the audit trail and journal-entry layer for onchain engagements.
Reconstruct tax events from raw onchain data without per-chain rebuilds. Cost-basis, lot tracking, and event reconstruction across every supported chain.
Verify deposits and withdrawals against source transactions at scale. Cross-check custody-API state against the chain — the only true source of record.
Reconcile treasury movements across multiple chains and protocols. Track positions, classify intent, and produce financial reports finance teams can sign off on.
Build onchain compliance infrastructure for institutional clients on a normalized data layer. Skip the per-chain pipeline work and ship the product instead.
Onchain treasury, RWA exposure, and deposit/withdrawal audit trails — formatted for financial reporting and broker-dealer audit obligations.
Source-traceable records that map directly to journal entries.
Reconstruct tax events from raw onchain data without per-chain rebuilds.
Reconcile treasury holdings across multiple chains and protocols.
Cross-check deposits and withdrawals against source transactions.
See what any wallet held at any point in time — by token, in USD, across 23 EVM chains.
| Dune | Competitor avg. | |
|---|---|---|
| Chains covered | ||
| Live coverage | EVM-only | |
| Chains covered | Live coverage | EVM-only |
| Non-EVM coverage | ||
| Non-EVM coverage | ||
| Source-traceable | ||
| Partial | ||
| Source-traceable | Partial | |
| Decoded Logs | ||
| Decoded Logs | ||
| Entity attribution with provenance | ||
| Risk-flag only | ||
| Entity attribution with provenance | Risk-flag only | |
| SQL + datashare + API delivery | ||
| UI-only | ||
| SQL + datashare + API delivery | UI-only | |
| Queryable structured data | ||
| Queryable structured data | ||
| Historical balance snapshots | ||
| Historical balance snapshots | ||
Forget hex topics and uint256 blobs. No decoding needed, no ABI confusion. Get the insights you want, instantly, across all your data in one schema.
Every token transfer across all chains in one unified table: decoded, normalized, and priced.
Decoded event logs for all onchain activity: transfers, approvals, mints, and more for any wallet across EVM chains.
Named entities for known addresses: exchanges, protocols, bridges, and treasuries, so your counterparty ledger shows who moved money, not just where.
Historical and current token balances across 23 EVM chains — point-in-time snapshots for audit periods, fiscal year-ends, and reconciliation workflows.
Token Transfers is the canonical, source-traceable record of onchain movement across supported chains. One schema works across EVM, Solana, Tron, Stellar, Ripple, Aptos, Sui, and Tempo: no per-chain parsing, no patchwork of indexers, no reshape work to reconcile against custody records or tax filings.
Every onchain movement, normalized into one schema. The multichain table gives you a chain-agnostic record of fungible activity across EVM, Solana, Aptos, Sui, Stellar, XRPL, and Tron — same SQL works everywhere, no per-chain parsing on your side. Per-chain tables sit underneath and keep the chain-specific fields when you need them.
tokens_multichain.transfers provides a chain-agnostic view of fungible token transfer activity across EVM-compatible chains, Solana, Aptos, Sui, Stellar, and XRPL. It normalizes commonly used transfer fields into one schema for cross-ecosystem analysis without writing a custom UNION ALL over chain-specific tables.
| Column | Description | Example |
|---|---|---|
| unique_key | Stable row identifier used for deduplication and joins back to the curated transfer row. | 999e3e44e210c1dbd1f141481c6b622a |
| blockchain | Canonical blockchain identifier. | ethereum |
| block_time | Timestamp of the block, slot, ledger, or checkpoint that produced the transfer. | 2026-05-08 08:44:47.000 UTC |
| block_date | Date bucket derived from block time for partitioning and daily reporting. | 2026-05-08 |
| block_month | Month bucket derived from block time for partitioning and monthly reporting. | 2026-05-01 00:00:00.000 UTC |
| block_number | Block number on chains that expose numbered blocks. | 2.5049225e+07 |
| tx_id | Normalized source transaction identifier used by the multichain table. | 0x23e097b8dbba360550b7ef5c4d5db88dda58d532c9eedd824353bba4ee4e3f8d |
| tx_index | Transaction position inside the block, slot, ledger, or equivalent ordering scope. | 180 |
| event_index | Normalized event, instruction, operation, or balance-change index within the transaction. | 450 |
| sub_event_index | Additional nested ordering for inner instructions, effects, or expanded movements. | <nil> |
| from_address | Normalized sender/source account in the multichain table. | 0x000000000004444c5dc75cb358380d2e3de08a90 |
| to_address | Normalized receiver/destination account in the multichain table. | 0xc10ee9031f2a0b84766a86b55a8d90f357910fb4 |
| tx_signer | Transaction signer, fee payer, or initiating account where available. | 0x7a683085e81c91d39cbe928fd4f5d046fd6bd71d |
| token_address | Normalized token, mint, contract, asset, issuer, or coin identifier used by the multichain table. | 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 |
| token_id | Additional token/object identifier where the source model needs more than the asset address. | 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 |
| token_symbol | Normalized token symbol in the multichain table. | USDC |
| token_standard | Token standard or source asset family for the transfer. | erc20 |
| amount_raw | Raw amount in source units before decimal adjustment. | 1.81779047e+08 |
| amount | Decimal-adjusted transfer amount. | 181.779047 |
| price_usd | Unit USD price used for valuation when available. | 1.0001272499999998 |
| amount_usd | USD value of the transfer when pricing is available. | 181.8021783837307 |
| transfer_type | Chain-native movement semantic such as transfer, mint, burn, fee, clawback, payment, account lifecycle, ownership change, or AMM movement. | <nil> |
| _updated_at | Timestamp when the curated row was last updated. | 2026-05-08 09:54:02.690 UTC |
| No rows returned. | |||
The Token Transfers dataset includes full history: each chain's first indexed transfers through the latest activity available today.
| No rows returned. | |||
Inspect real normalized rows from tokens_multichain.transfers: source transaction identifiers, counterparties, token metadata, amounts, USD values, and signer context in one cross-chain schema.
| No rows returned. | ||||||||||||||||||
Decoded Logs takes every EVM event log and maps it back to a contract name, an event name, and the full event payload as JSON — in one standardized table per chain. No ABI parsing on your side, no long tail of per-contract decoded tables that breaks Snowflake / BigQuery / Databricks pipeline economics. Every contract whose ABI Dune has on file is decoded into the same table — coverage compounds as new ABIs are added, with no per-protocol parsing on your side.
Every EVM contract event mapped back to a contract name, an event name, and the full event payload as JSON — in one standardized table per chain. Every contract whose ABI Dune has on file is decoded into the same table, so coverage compounds without you maintaining per-contract decoders downstream. Same shape across Ethereum, Optimism, Arbitrum, Base, Polygon, and BNB.
One row per emitted event from a decoded contract. The example below is a Swap event from a Uniswap V3 pool — decoded_json exposes every parameter the contract emitted, so you read swap size, price, and tick straight from the row.
| Column | Description | Example |
|---|---|---|
| block_time | Timestamp of the block containing the decoded log. | 2026-05-09 19:22:11.000 UTC |
| block_number | Block number containing the log. | 25059581 |
| tx_hash | Transaction hash containing the decoded event. | 0x63d470f12bf065da791e630c0285abaf34230522664401a94c22cf24181332b1 |
| index | Position of the log inside the block. | 349 |
| tx_from | Address that initiated the transaction. | 0x930b88a592a045c428f3d99f7f3e5f95e3967508 |
| tx_to | Address the transaction was sent to. | 0x1103fc560de8b710983e7f3ec09d587f3f848566 |
| namespace | Project namespace attached to the decoded contract or event family. | uniswap_v3 |
| contract_name | Decoded contract name from the registered ABI. | UniswapV3Pool |
| contract_address | Address of the contract that emitted the event. | 0xc5c9a9ab6403cdba9722463000146c18b504f0ba |
| event_name | Human-readable event name decoded from the ABI. | Swap |
| signature | Event signature hash (topic0) used to match the ABI entry. | 0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67 |
| decoded_json | Full event parameters as JSON, so you can read every emitted field without joining per-event decoded tables. | { "sender": "0x1103fc560de8b710983e7f3ec09d587f3f848566", "recipient": "0xc7bbec68d12a0d1830360f8ec58fa599ba1b0e9b", "amount0": "10510459079568843898497", "amount1": "-122143926874515366", "sqrtPriceX96": "270845218814430251233432262", "liquidity": "8014602887207398750171", "tick": "-113577" } |
Token Transfers tells you what moved and what it was worth in USD. Decoded Logs tells you which contract emitted the event and what its parameters say. Join on tx_hash, evt_index, and the emitting contract address to get one row per priced movement with the decoded event attached — same primary key on both sides, no per-contract decoders to maintain.
Every priced inbound and outbound Token Transfer for a single Ethereum wallet (Coinbase 10), joined to the matching Decoded Log. The example below is a USDC inbound — decoded_json shows the raw Transfer(from, to, value) parameters that the curated Token Transfer row was derived from.
| Column | Description | Example |
|---|---|---|
| block_time | Timestamp of the block containing the transfer. | 2026-05-09 00:36:59.000 UTC |
| direction | Whether the fixed wallet received (inbound) or sent (outbound) the transfer. | inbound |
| symbol | Token symbol from the curated Token Transfers row. | USDC |
| amount | Decimal-adjusted transfer amount. | 17781975.328456 |
| amount_usd | USD value of the transfer at block time. | 17785959.97 |
| from | Sender address from the source Token Transfer row. | 0xa6e3c7a74aedccfae78eed37ab8d19c893a75958 |
| to | Receiver address from the source Token Transfer row. | 0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43 |
| tx_hash | Source transaction hash, used as the join key. | 0xe09d162e44094223005d25a9004bda753dc052dea53f6a51cd4902e2cc33fc35 |
| evt_index | Event index inside the transaction, used as the join key. | 154 |
| token_contract | ERC20 contract address that emitted the transfer event. | 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 |
| event_name | Decoded event name attached to the transfer. | Transfer |
| namespace | Project namespace of the decoded contract that emitted the event. | circle |
| log_emitting_contract_name | Name of the contract that emitted the decoded log, when available. | USDC |
| decoded_json | Raw decoded event payload for the transfer, preserved as JSON. | { "from": "0xa6e3c7a74aedccfae78eed37ab8d19c893a75958", "to": "0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43", "value": "17781975328456" } |
A day of activity for a single Ethereum wallet (Coinbase 10), sorted by USD size. Every priced Token Transfer with the matching Decoded Log attached: amount, USD value, and direction on the left; event name, namespace, and decoded JSON payload on the right.
| No rows returned. | |||||||||||||
Labels turn raw addresses into named entities — so a transfer table becomes a counterparty ledger your audit, tax, and finance teams can build on. Each attribution carries source provenance and a confidence score, so high-confidence labels can be filtered for entity-level reporting.
Named counterparties for every address: exchanges, custodians, institutions, and protocols, with provenance and confidence on each attribution.
| blockchain | block_time | token_symbol | amount_usd | from_address | to_address |
|---|---|---|---|---|---|
| May 10, 19:23 | ETH | $142,400 | Binance: Hot Wallet 1 · cex | Binance: Hot Wallet 1 · cex | |
| May 11, 01:12 | WBTC | $87,200 | 0xAC18…D249 | Aave V3: Pool · lending | |
| May 10, 21:05 | USDC | $8,410 | 0x7F2b…E3A9 | Morpho: Vault · lending | |
| May 10, 23:31 | SOL | $12,080 | GbE9w…K4mP | Jupiter: Aggregator · dex | |
| May 11, 00:18 | ETH | $3,240 | 0x3d1c…F8b2 | Uniswap V3: Pool · dex | |
| May 10, 22:45 | USDC | $51,000 | Tether Treasury · issuer | Coinbase · cex |
Historical and current token balances and balance changes across 23 EVM chains. Every figure traces back to the event that moved it, using one schema across every chain.
Tax & audit
Reconstruct what any address or set of addresses held on any date, by token, in USD. Used for fiscal year-end reporting, audit-period reconstruction, quarterly snapshots, and beneficial ownership disclosure.
| Token | Balance (units) | USD |
|---|
Compliance
Track what a defined group of addresses holds over time: exchanges, custodians, lending markets, or any curated list. Filter by token and date range to scope the analysis.
Wallets, custodians & exchanges
Track current and historical holdings for any address, at any scale, from a single customer wallet to an entire user base.
Showing 2024–2025 data on Ethereum
Showing 2021–2025 data on Ethereum
Research
See how a token's supply is distributed across its full holder base, and how that distribution shifts over time. Cut by wallet count, supply share, or holding tier.
Showing 2015–2026 data on Ethereum
Showing 2015–2026 data on Ethereum
Three datasets, one reconciliation stack. Token Transfers and Decoded Logs are the foundation: normalized, source-traceable records that every audit, tax, and finance workflow can build on. Labels & Entity Attribution sits on top, turning a transfer table into an entity-level counterparty ledger.
Every onchain movement, normalized into one schema. The curated transfer layer for fungible money movement: who moved what, from where, to where, when, and with which source transaction. EVM tokens_evm.transfers, Solana tokens_solana.transfers, and Tron tokens_tron.transfers are public on the Dune platform. Query them today to see the shape of the data. Aptos, Sui, Stellar, and XRPL transfers ship as extended coverage, plus tokens_multichain.transfers for cross-chain analysis in one normalized schema.
One public decoded logs table per EVM chain. logs_decoded is the broad public decoded-log surface: one standardized table per EVM chain with event names, contract context, source transactions, and decoded payloads as JSON. It is different from Dune's many individual decoded event and function tables, which expose contract- or protocol-specific schemas for narrower analysis. Query logs_decoded for free on Dune, then use Datashare, API, or warehouse delivery when you need the same surface in production data workflows.
...and many more
Every address, named, with provenance. The identity layer that turns raw addresses into named entities and auditable clusters. Bulk SQL-joinable against Token Transfers and Decoded Logs, designed for data warehouses and reporting pipelines, not address-by-address research. Each attribution carries source provenance and a confidence score, so finance teams can filter to high-confidence labels and audit how each one was derived. Built for entity-level reporting and counterparty journal posting, not sanctions / KYT screening.
Historical and current token balances and balance changes across EVM chains. Every figure traceable to the event that moved it. Three tables per chain: block-level changes, daily balance updates, and current holdings, all updated hourly.
Three datasets, three jobs. Token Transfers is the source-traceable transfer foundation across EVM and major non-EVM chains. Decoded Logs gives you every EVM contract event in one standardized JSON-payload table. Labels & Entity Attribution turns raw addresses into named counterparties with provenance — sold as an Enterprise add-on.
| Capability | Token Transfers | Decoded Logs | Labels |
|---|---|---|---|
| Chain coverage | Supported chains | EVM | All chains |
| Decoded contract events | |||
| Address → entity mapping | |||
| Provenance + confidence per row | |||
| USD pricing | |||
| Joinable in SQL across the stack | |||
| Datashare delivery | |||
| Refresh cadence | Per-chain SLA | Continuous | As mapped |
| Access | Free / Enterprise | Free on platform | Enterprise add-on |
Flexible pricing based on your actual usage. Start with a preview dataset today.
Missing a chain or contract?
Sync the reconciliation stack to Snowflake, BigQuery, Databricks, or Amazon S3. No API limits.
Query the reconciliation stack directly in Dune's SQL editor. Start from a template or write your own.
Programmatic access to the reconciliation stack. Same shape, REST-ready for pipelines, integrations, and product features.
Plug reconciliation data into Claude, Cursor, Codex, and other MCP-compatible agents.