Write the query. See real on-chain data back.
The Bitquery IDE is a browser workspace for authoring GraphQL against decoded blockchain data — historical and real-time, across 40+ networks, with a schema explorer, autocomplete and live subscriptions. No node, no indexer, no local setup.
Already know what you need? Get an API key and skip straight to code.
# five most recent SOL/USDC trades, any Solana DEX query RecentSolTrades { Solana(dataset: realtime) { DEXTradeByTokens( limit: {count: 5} orderBy: {descending: Block_Time} where: {Trade: { Currency: {MintAddress: {is: "So11111111111111111111111111111111111111112"}} Side: {Currency: {MintAddress: {is: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}}} }} ) { Block { Time } Trade { Dex { ProtocolName } Currency { Symbol } Side { Currency { Symbol } } Amount Price PriceInUSD } Transaction { Signature } } } }
{ "data": { "Solana": { "DEXTradeByTokens": [ { "Block": { "Time": "2026-07-27T14:02:11Z" }, "Trade": { "Dex": { "ProtocolName": "raydium_clmm" }, "Currency": { "Symbol": "SOL" }, "Side": { "Currency": { "Symbol": "USDC" } }, "Amount": "412.884190", "Price": 184.2071, "PriceInUSD": 184.1904 }, "Transaction": { "Signature": "5tPq…9xKd" } }, // 4 more, newest first ] } } } // dataset: realtime -> trades land here seconds after the slot. // swap query for subscription and the same // fields stream over WebSocket instead.
What you get in the editor
Not a generic GraphQL playground pointed at a public endpoint. The IDE is wired to the Bitquery schema, so the editor knows every chain, cube and field before you type it.
Schema explorer & autocomplete
Browse the full schema in the Document panel, or press ctrl+space and let the editor complete cubes, arguments and enums. Invalid queries are flagged before you run them.
Saved queries
Save a working query to your account and reopen it from the Queries panel — the editor comes back exactly as you left it, which is what you want when a query took a while to get right.
Subscriptions in the browser
Change query to subscription and results start pushing over WebSocket in the results pane — real-time behaviour verified before you write a line of client code.
Query cost, visible
Every response reports the points it consumed, so you tune filters and limits against real cost instead of guessing. How points work →
Variables and a visual builder
Parameterise a query in the Variables panel instead of editing the string each time, or start from Builder and assemble one without writing GraphQL by hand.
Archive, realtime or combined
One argument decides whether a query reads full history, the live tip, or both stitched together — the same fields either way. See what is indexed per chain →
Six queries worth running on day one
Each one is valid as written. Copy, paste, change an address or a mint, and you have your own. The linked product page covers the fields, filters and limits in depth.
DEX trades for a token
What has traded, at what price, on which venue — decoded per protocol across 300+ DEXs.
query TokenTrades { Solana { DEXTradeByTokens( limit: {count: 20} orderBy: {descending: Block_Time} where: {Trade: {Currency: {MintAddress: {is: "<mint>"}}}} ) { Trade { Dex { ProtocolName } Price Amount PriceInUSD } Block { Time } } } }
Top holders of a token
Who holds it and how concentrated it is, on any date — the distribution question, answered in one call.
query TopHolders { EVM(network: eth, dataset: archive) { TokenHolders( date: "2026-07-20" tokenSmartContract: "0xdAC17F958D2ee523a2206206994597C13D831ec7" limit: {count: 10} orderBy: {descending: Balance_Amount} ) { Holder { Address } Balance { Amount } } } }
Every token a wallet holds
Balances rolled up from decoded balance updates, so the answer includes tokens no dashboard listed.
query WalletBalances { EVM(network: eth, dataset: combined) { BalanceUpdates( orderBy: {descendingByField: "balance"} where: {BalanceUpdate: {Address: {is: "<address>"}}} ) { Currency { Symbol SmartContract } balance: sum(of: BalanceUpdate_Amount, selectWhere: {gt: "0"}) } } }
Where a wallet sent funds
Transfers grouped by receiver and token — the first hop of a money-flow investigation.
query Outflows { EVM(network: eth, dataset: combined) { Transfers( limit: {count: 10} orderBy: {descendingByField: "sent"} where: {Transfer: {Sender: {is: "<address>"}}} ) { Transfer { Receiver Currency { Symbol } } sent: sum(of: Transfer_Amount) } } }
Live trades, pushed to you
The same fields as a query, delivered as they happen. Run it in the IDE and watch the pane fill.
subscription LiveRaydiumTrades { Solana { DEXTrades( where: {Trade: {Dex: {ProtocolName: {is: "raydium"}}}} ) { Block { Time } Trade { Buy { Price Currency { Symbol } } Sell { Currency { Symbol } } } } } }
Volume and trader counts
Aggregates computed server-side — the shape behind a leaderboard, a token page or a terminal panel.
query TokenActivity { Solana(dataset: combined) { DEXTradeByTokens( where: { Trade: {Currency: {MintAddress: {is: "<mint>"}}} Block: {Time: {since: "2026-07-26T00:00:00Z"}} } ) { volumeUSD: sum(of: Trade_Side_AmountInUSD) trades: count traders: count(distinct: Transaction_Signer) } } }
The query you tested is the query you ship
Nothing is rewritten on the way out of the IDE. Same endpoint, same fields — you add an auth header, and for live data you swap the transport.
import { createClient } from "graphql-ws"; const client = createClient({ url: "wss://streaming.bitquery.io/graphql?token=ory_at_…" }); client.subscribe( { query: "subscription { Solana { DEXTrades { Trade { Buy { Price } } } } }" }, { next: (msg) => handle(msg.data), error: console.error, complete: () => {} } );
# any GraphQL client works: fetch, Apollo, urql, requests curl -X POST https://streaming.bitquery.io/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $BITQUERY_TOKEN" \ -d '{"query":"{ Solana { DEXTradeByTokens(limit: {count: 5}) { Trade { Price } } } }"}' # -> 200 OK · application/json # -> the same JSON you saw in the results pane
Queries are billed in points — cost scales with how much data a query actually scans, so narrower filters and smaller limits are cheaper. Subscriptions are bought as concurrent streams rather than metered per message, with points added to cover them for the billing period, so a live feed's cost stays flat. Your token is generated the moment you sign in to the IDE; the same one authorises HTTP requests, WebSocket streams, Solana gRPC and the MCP server if you want an agent asking these questions instead of a person.
One schema, 40+ chains
Switch a single argument and the same query runs on another network. EVM chains, Solana, Bitcoin and the UTXO family, TRON, Cardano, XRP Ledger and more — each decoded, not raw-log dumped. The blockchains hub lists what is indexed per chain.
Trying it is free. Every paid plan starts with a 7-day free trial — full WebSocket streaming, no card required. Self-service runs $49–$299/mo, and Enterprise is a flat platform fee.
Compare plansBefore you open the editor
Do I need an account to use the IDE?
What does it cost to start?
How do subscriptions differ from queries?
How do points work?
Can I use my own client instead?
Where is the schema reference?
Paste a query. Watch the data arrive.
The editor is open, the schema is loaded and the index is live. First result in about thirty seconds.
7-day free trial · 40+ chains · queries, subscriptions and gRPC on one token