Multi-Chain Wallet Balance API: Token Balances and USD Values Across Chains
How to get a wallet's token balances with USD values on Ethereum, Base, BSC, Solana and other chains, keep them live with streams, and look up what a wallet held on any past date.

The short answer
To show a wallet's holdings across chains you need three things: current token balances with USD values, live updates when they change, and history for any past date. Bitquery covers all three on its 10 core chains, and one GraphQL request can return balances from several chains at once.
| Need | How Bitquery does it |
|---|---|
| Current balances with USD value | The Balances query on EVM chains and Tron; balance updates on Solana |
| Live changes | WebSocket streams of transfers and balance changes |
| What the wallet held on a past date | Balance history from the transfers archive add-on |
Get current balances on an EVM chain
One GraphQL query returns every token the wallet holds on a chain, largest USD value first:
query WalletPortfolio {
EVM(network: eth) {
Balances(
where: { Balance: { Address: { is: "<wallet address>" } } }
orderBy: { descending: Balance_AmountInUSD }
limit: { count: 50 }
) {
Balance { Amount AmountInUSD LastChangeTime UpdateCount }
Currency { Symbol Name SmartContract Decimals }
}
}
}
Change network to cover another EVM chain, such as Base, BSC, Arbitrum, Polygon or Optimism. Tron uses the same shape under Tron. Add up AmountInUSD across the rows to get the wallet's total value on that chain.
Solana
Solana has no Balances query. You read the latest balance update per token for the wallet instead. The wallet portfolio recipe in the docs has the Solana version next to the EVM one.
Cover many chains in one request
GraphQL aliases let one request ask several EVM chains at once. Each alias returns that chain's tokens with USD values:
query MultiChainWallet {
eth: EVM(network: eth) {
Balances(
where: { Balance: { Address: { is: "<wallet address>" } } }
orderBy: { descending: Balance_AmountInUSD }
limit: { count: 50 }
) { Balance { Amount AmountInUSD } Currency { Symbol SmartContract } }
}
base: EVM(network: base) {
Balances(
where: { Balance: { Address: { is: "<wallet address>" } } }
orderBy: { descending: Balance_AmountInUSD }
limit: { count: 50 }
) { Balance { Amount AmountInUSD } Currency { Symbol SmartContract } }
}
}
Add an alias for each chain the wallet uses, then merge the rows by USD value. Solana uses a different shape, so it goes in its own block. The wallet tracking API comparison sets the main providers side by side.
Keep balances live
The Balances query is a snapshot and cannot be subscribed to. Read it once, then keep it current with a WebSocket stream of the wallet's transfers or balance changes. Streams start on the Pro plan, and the 7-day free trial includes them.
What a wallet held on a past date
Questions like "what did this wallet hold on 1 January?" need balance history. Self-service plans keep recent balance changes in a rolling window. Complete history on a core chain comes with the transfers archive add-on, which includes balances and holders, at $150 a month per EVM chain. See historical add-ons.
What to watch for
- Spam tokens. Airdropped scam tokens fill raw balance lists. Sort by USD value and hide rows with no trading liquidity.
- Long-tail prices. A token no exchange lists still needs a price. Bitquery prices tokens from on-chain DEX trades, so new tokens get a value once they trade.
- Address formats. An EVM address on a Solana query returns nothing, which looks like an empty wallet. Match the format to the chain.
Related APIs
- Address and balance API: balances, history, labels and risk for any wallet
- Wallet portfolio API: balances, PnL and USD value
- Token holder API: every holder of a token, the other side of the same data
FAQ
What is the best API for multi-chain wallet balances?
It depends on how many chains you need and whether you need history. Bitquery covers balances with USD values on 10 core chains, with live streams and point-in-time history, and one request can cover several EVM chains through GraphQL aliases.
Can I get a wallet's token balances in USD with one query?
Yes. On EVM chains and Tron, the Balances query returns each token's amount and USD value, sorted by value. Add one alias per chain to cover several EVM chains in the same request.
Can I get historical wallet balances?
Yes. Recent balance changes are on every self-service plan. Complete history on a core chain comes with the transfers archive add-on, at $150 a month per EVM chain.
How do I keep wallet balances updated in real time?
Read the balances once, then subscribe to a WebSocket stream of the wallet's transfers or balance changes. Streaming starts on the Pro plan and is included in the free trial.
Related reading
Subscribe to our newsletter
Subscribe and never miss any updates related to our APIs, new developments & latest news etc. Our newsletter is sent once a week on Monday.