Migrating from Moralis to Bitquery
A concept map for teams moving REST-style Moralis calls to Bitquery's GraphQL cubes. Instead of one endpoint per resource, you compose a single GraphQL query against the cube you need.
note
Capability comparisons below describe Bitquery's model; verify exact coverage for your chains against the coverage matrix.
Concept mapping
| Moralis (REST) | Bitquery (GraphQL) |
|---|---|
| Get wallet token balances | EVM { Balances(...) } — Balances |
| Get wallet token transfers | EVM { Transfers(...) } — Transfers |
| Get token price | Crypto Price API |
| Get token holders | EVM { Holders(...) } — Holders |
| Get DEX trades / swaps | EVM { DEXTrades / DEXTradeByTokens } — DEX trades |
| Streams (webhooks) | WebSocket subscriptions or Kafka |
Example: wallet token transfers
{
EVM(network: eth, dataset: combined) {
Transfers(
where: { Transfer: { Sender: { is: "0x..." } } }
orderBy: { descending: Block_Time }
limit: { count: 100 }
) {
Block { Time }
Transfer { Amount Currency { Symbol SmartContract } Receiver }
Transaction { Hash }
}
}
}
What differs
- One flexible query vs many endpoints. You select exactly the fields you need across a cube, rather than calling a fixed-shape endpoint.
- Dataset selection. Choose
realtime/combinedexplicitly for live vs historical data — see the coverage matrix. - Streaming. Real-time delivery is via WebSocket/Kafka/gRPC rather than webhooks. [confirm your delivery needs]
Frequently Asked Questions
How do I get wallet balances like Moralis?
Use the EVM Balances cube with an Address filter. Add a Currency filter for a single token.
Does Bitquery have webhooks like Moralis Streams?
Real-time delivery is via WebSocket subscriptions, Kafka, or Solana gRPC rather than webhooks. Choose based on throughput and filtering needs.
How far back does historical data go?
It depends on the chain and cube — see the Data Coverage & Retention matrix.