Any wallet’s balance, at any block, on seven chains.
Point-in-time balances and a full transfer ledger for Ethereum, Base, BNB Chain, Polygon, Arbitrum, Solana and Tron. In your BigQuery, as Parquet, or as a live stream.
- Ethereum (Live)
- Base (Live)
- Tron (Live)
- Solana (Building)
- BNB Chain (Planned)
- Arbitrum (Planned)
- Polygon (Planned)
$ SELECT day, block_number, balance FROM balances.daily WHERE address = '0x28c6c06298d514db089934071355e5743bf21d60' AND symbol = 'USDT' AND day = LAST_DAY(day, MONTH)
| day | block_number | balance | relative size |
|---|---|---|---|
| 2026-04-30 | 24,996,367 | 757,477,051.98 | |
| 2026-05-31 | 25,218,797 | 635,225,161.48 | |
| 2026-06-30 | 25,433,938 | 561,901,590.46 | |
| 2026-07-31 | 25,656,292 | 688,889,834.76 | |
| 2026-08-31 | 25,878,704 | 621,547,878.29 | |
| 2026-09-30 | 26,093,737 | 1,260,387,000.63 | |
| now | … | reading… |
Three ways to get balances today
Build it yourself
weeks, then edge casesRebuilding balances from raw logs takes weeks, then breaks on rebasing tokens, fee-on-transfer tokens and Solana’s closed accounts.
$ reconcile --wallet 0x3c1e…a9f0 --token stETH --at 2026-06-30 sum of transfers 1,204.551 balanceOf() at block 1,212.906 ✗ off by 8.355 rebasing token: the balance grew with no transfer
Call a wallet API
a bill per callYou get one wallet per call and a bill for each call. History for ten thousand wallets means ten thousand calls, for every date you ask about.
GET /v1/wallets/0x9f2c…11ab/balances?date=2026-06-30 200 1 call GET /v1/wallets/0x51d0…e7c2/balances?date=2026-06-30 200 1 call GET /v1/wallets/0xc07b…0e44/balances?date=2026-06-30 200 1 call calls 0 wallets answered 0 left 10,000 of 10,000
Buy from a warehouse vendor
a contract firstThe tables exist, but they sit behind an annual contract and a sales call.
from sales@vendor.example subject Re: pricing for balance tables Thanks for reaching out! Pricing depends on your use case. Could we find 30 minutes next week? Our plans are annual.
noticeDune closed its Sim wallet API on 1 August 2026. If you’re choosing what replaces it, compare tables as well as endpoints.
Fifty wallets, every month end, one query
Change the token, the chains or the period. The query runs in your own BigQuery project, on your own bill.
-- USDT, 50 wallets, each month end
SELECT
chain,
day AS month_end,
address,
balance,
block_number
FROM `asof-data.balances.daily`
WHERE symbol = 'USDT'
AND chain IN ('tron', 'ethereum')
AND address IN UNNEST(@wallets) -- your 50 addresses
AND day = LAST_DAY(day, MONTH)
AND day >= '2025-01-01'
ORDER BY month_end DESC, balance DESC
| chain | month_end | address | balance | block_number |
|---|---|---|---|---|
| ethereum | 2026-08-31 | 0x2084…cec9 | 12,329,750.04 | 25,878,670 |
| ethereum | 2026-08-31 | 0xea93…5780 | 9,777,295.40 | 25,878,670 |
| ethereum | 2026-08-31 | 0x6891…b6e8 | 4,727,724.55 | 25,878,670 |
| ethereum | 2026-08-31 | 0x6fcd…9c85 | 4,667,922.63 | 25,878,670 |
| tron | 2026-08-31 | Tas9…T5EK | 4,328,976.98 | 85,849,495 |
| ethereum | 2026-08-31 | 0x6287…96ab | 3,882,671.83 | 25,878,670 |
| ethereum | 2026-08-31 | 0x8994…5e8d | 3,878,179.45 | 25,878,670 |
month_end = 2026-08-31… 1,333 more rows50 wallets × 2 chains × 20 month ends, where a balance exists
Synthetic wallets and balances; block numbers are each chain’s last block of the day, to within a few blocks. The demo will run this query on real data.
Delivered where you already work
We share a dataset into your Google Cloud project. Query it like your own tables; you pay only for your own queries.
Bulk files split by chain and day. Load them into Snowflake, DuckDB, Spark or anything else that reads Parquet.
A Pub/Sub feed of transfers and balance changes, filtered to the tokens or wallets you choose.
asof-data
balances
ledger
One row per wallet, token and day: the balance at 23:59:59 UTC.
| chain | STRING |
| day | DATE |
| address | STRING |
| token_address | STRING |
| symbol | STRING |
| balance | BIGNUMERIC |
| balance_raw | STRING |
| block_number | INT64 |
Who it’s for
Month-end holdings across chains, ready for your administrator and your investor letters.
SELECT chain, symbol, SUM(balance) AS held
FROM `asof-data.balances.daily`
WHERE address IN UNNEST(@fund_wallets)
AND day = '2026-08-31'
GROUP BY chain, symbol
ORDER BY held DESC
| chain | symbol | held |
|---|---|---|
| tron | USDT | 4,812,440.00 |
| ethereum | USDC | 2,150,337.52 |
| ethereum | USDT | 1,006,912.75 |
| base | USDC | 388,120.40 |
How we check the numbers
Every day we sample balances from our tables and compare them with the chain. How we check depends on what each chain’s nodes can tell us. The log below runs the Ethereum check in your browser, against a public node, on each new block.
Waiting for the next block. Each check picks a wallet whose USDT or USDC balance moved in it.
We’ll publish the daily match rate on this page once the checks have run for a month.
The method, by chain
- Ethereum, Base, BNB Chain, Polygon, Arbitrum
- We ask an archive node for the balance at the same block.
- Solana
- Nodes don’t serve past state, so we check against the balances each transaction records before and after it runs.
- Tron
- Nodes don’t serve past state either. We check today’s balance against a node, then sum the ledger back to each past date.
Known edge cases, and what we do about each
| Case | What goes wrong | What we do |
|---|---|---|
| Rebasing tokens | Balances grow or shrink with no transfer at all. | We read balances from contract state, not only from summed transfers. |
| Fee-on-transfer tokens | The amount sent is not the amount received. | We record what each balance actually changed by. |
| Native coins moved by contracts | Internal transfers leave no log. | Native balances come from traces, so they count. |
| Gas fees | Every transaction lowers the sender’s native balance. | Fees are rows in the ledger like any other transfer. |
| Solana closed accounts | A token account closes and its balance seems to vanish. | We follow token accounts by owner and record each close. |
| Tron TRC-10 tokens | They move without contract events. | We read TRC-10 transfers from transactions, next to TRC-20 logs. |
| USDT issue and redeem | Tether changes its supply without a Transfer event. | We read the Issue and Redeem events too. |
Chains and tables
Where each chain stands on launch day, 10 November 2026. After that, one chain goes live each week.
| chain | daily balances | block balances | transfer ledger | live stream | Vote |
|---|---|---|---|---|---|
| Ethereum | live | live | live | building | |
| Base | live | live | live | planned | |
| Tron | live | live | live | building | |
| Solana | building | building | building | planned | |
| BNB Chain | planned | planned | planned | planned | |
| Arbitrum | planned | planned | planned | planned | |
| Polygon | planned | planned | planned | planned |
Solana comes first after launch. After that, sign-up votes set the order of BNB Chain, Arbitrum and Polygon. Vote for the chain you need; votes go with your sign-up.
Prices, published.
No sales call. Pick a plan and we’ll set it up for you.
$990
a month
For funds, accountants and data teams
- Daily balances
- Every live chain
- Block-level balances
- Every live chain
- Transfer ledger
- Every live chain
- History
- Full history
- Delivery
- Your BigQuery, bulk Parquet
- Help with the schema
- Included
- Stream
- Add for +$490 a month
| Compare plans | ||||
| Daily balances | USDT and USDC sample | Every live chain | Every live chain | Other chains |
| Block-level balances | — | — | Every live chain | Other chains |
| Transfer ledger | Sample | Every live chain | Every live chain | Other chains |
| History | Last 90 days | 1 year | Full history | By scope |
| Delivery | Public BigQuery dataset, Parquet samples | Your BigQuery | Your BigQuery, bulk Parquet | Private delivery |
| Help with the schema | — | — | Included | Custom tables |
| Stream Trading tools and payment teams | — | +$490 a month | +$490 a month | By scope |
A Pub/Sub feed of transfers and balance changes, filtered to your tokens or wallets. Add it to any paid plan. The first ten paying customers get 50% off for 12 months. Design partners use it free during the beta, in return for a 20-minute call every two weeks.
Questions.
Something else? Ask in the form; every message gets a personal reply.
- How fresh is the data?
Daily tables close shortly after midnight UTC. Block tables and the stream follow the chain within minutes: fresh enough for monitoring and reporting, not for trading. The demo shows the real delay on every row.
- How do you handle reorgs?
Tables only take final blocks, so a reorg never rewrites a row you’ve already read. The stream sends changes as blocks arrive, and a correction if a block is dropped.
- Where does the data come from?
We build every table from full chain history: blocks, transactions, logs and, where the chain has them, traces. Native balances come from traces, so transfers made inside contracts count.
- How is this different from Dune, Allium or Zerion?
Wallet APIs such as Zerion’s answer one wallet per call and meter every call; we deliver every wallet’s history as tables you query in bulk. Allium and SonarX sell warehouse tables with prices on request; ours are on this page. Dune is a place to run queries; we deliver into your own warehouse, and we include Tron balances, which Dune has no table for.
- Do you have USD prices?
Not yet, and we don’t run a price feed. Join a price source you already license, or a free one; we’ll tell you which work for each chain.
- Can I get another chain?
Yes. Name it in the form below; sign-ups vote on which chain comes next. The Custom plan covers chains outside the seven.
- Is there a free sample?
Yes: daily USDT and USDC balances on Tron and Ethereum for the last 90 days, free in BigQuery and as Parquet on Hugging Face.
A note from the builder
I’ve built blockchain data pipelines for years, and one question keeps coming back: what did this wallet hold on this date? I’m building the tables that answer it, checked against the chain. I answer every email myself.
Get early access.
Leave an email and we’ll write when your chains go live.
- We email you when the chains you picked go live, and not about anything else.
- Design partners get free access during the beta, for a 20-minute call every two weeks.
- The first ten paying customers keep 50% off for 12 months.