If you’re reading this, you’ve probably already got an Alchemy account, or you’re about to open one, and you’re wondering whether it’s the right layer for what you’re actually building. “Alchemy alternative” is a search people run for a few different reasons: compute unit costs on a growing app, a need for a chain Alchemy doesn’t cover, or, the reason this post exists, a read that Alchemy’s own APIs don’t reach directly. That last case is the one worth walking through in detail.
TL;DR
Alchemy is excellent managed RPC infrastructure with real, useful data APIs on top. It stops being the fastest path the moment your read is a custom contract’s own logic rather than a standard token balance or NFT lookup. That’s the gap evmquery is built for. If you need webhooks, mempool visibility, or write infrastructure, stay on Alchemy; those are outside evmquery’s scope entirely.
What “Alchemy alternative” usually means
This site already has a broader four-way comparison covering Alchemy, QuickNode, Moralis, and evmquery at a summary level. This post narrows the lens to just Alchemy, and specifically to the question a lot of “alchemy alternative” searches are actually asking: not “who else runs RPC nodes” but “who else can get me a typed answer out of a specific contract without me writing the ABI and proxy plumbing myself.”
Those are genuinely different questions. If you need a drop-in RPC replacement with the same breadth of chains and the same Enhanced APIs, this post won’t tell you to leave Alchemy. If your actual bottleneck is the code you write between “I have an address” and “I have a typed value,” keep reading.
What Alchemy actually does well
Alchemy is a managed node provider first, with a genuinely useful set of products layered on top. Worth naming plainly, because a fair comparison starts by conceding the other side’s real strengths:
- Broad chain coverage. Alchemy documents support for 70+ chains, spanning every major EVM network and several non-EVM ones. If your product needs to be everywhere, that breadth is hard to match.
- Data APIs for the common shapes. Token balances, NFT ownership and metadata, transfer history, and price data all have dedicated, indexed endpoints. You’re not writing
eth_callloops for any of these. - Webhooks. Define a filter (address activity, mined transactions, dropped transactions) and get a push notification instead of polling. This is a real product, not a thin wrapper, and it covers a use case evmquery does not attempt.
- Mempool visibility. WebSocket subscriptions to pending transactions exist and are documented, letting you react before a transaction is mined, something a request/response query layer like evmquery has no equivalent for.
- Write-side infrastructure. Account abstraction tooling (a bundler, a gas manager for sponsoring fees) sits alongside the read APIs, and standard write methods (
eth_sendRawTransactionand friends) run through the same RPC endpoint you’re already paying for. - Observability. The dashboard breaks down compute unit usage per method, which makes it straightforward to see what’s actually expensive in your integration.
None of that is a footnote. It’s the reason Alchemy is a default choice for teams building anything that touches wallets, NFTs, or write transactions at scale.
Where the friction shows up for contract-logic reads
The Enhanced/Data APIs cover the shapes Alchemy chose to index ahead of time: tokens, NFTs, transfers, prices. The moment your read is a specific contract’s own logic (a lending pool’s health-factor calculation, a DEX’s reserve state, a DAO’s proposal snapshot), none of that is a standard endpoint. You’re back to raw RPC, and three things land on you every time:
- ABI sourcing. You need the contract’s ABI, and if it’s a new or less common protocol, that means digging through Etherscan, the project’s GitHub, or an npm package that ships the interface.
- Proxy detection. Many of the production contracts you’ll integrate against sit behind a proxy, an EIP-1967 transparent proxy, a beacon proxy, or an older pattern like the legacy zeppelinOS proxy USDC itself still uses. The address you’re given usually isn’t where the logic lives, and nothing about the address alone tells you that. Get this wrong and you’ll spend an afternoon debugging why a call returned
0xor a zero value instead of the number you expected. - Batching. If you want more than one field back in one round trip, you’re writing Multicall3 calls by hand, or reaching for a library helper that still requires you to have already solved problems 1 and 2 for every contract involved.
None of this is a knock on Alchemy specifically. QuickNode has the same shape of gap for the same reason: both are RPC-first products, and RPC doesn’t know what a proxy is or where an ABI lives. It’s just where the work actually sits once you’re past the standard token and NFT shapes.
What evmquery does differently
evmquery is a contract-logic query layer, not an RPC provider. You name a contract address and write one expression (SEL, our CEL-based expression language); the ABI resolution, proxy unwinding, and Multicall3 batching all happen server-side before you see a typed result.
USDC on Ethereum is a convenient real example, because it’s exactly the kind of contract described above: it sits behind a legacy zeppelinOS proxy, not the more common EIP-1967 pattern, which is easy to miss if you’re checking for proxies by pattern-matching a known slot.
const query = { chain: "evm_ethereum", schema: { contracts: { usdc: { address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" } }, }, expression: "[usdc.totalSupply(), usdc.decimals()]",};
const res = await fetch("https://api.evmquery.com/api/v1/query", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": apiKey }, body: JSON.stringify(query),});Validated while writing this post
- Running the query above against evmquery’s live API resolved USDC’s proxy automatically and returned
totalSupply()anddecimals()in one round: 2 on-chain calls, 1 round, at Ethereum block 25,691,094. - USDC’s own resolution reports
dispatches via zeppelinos, the legacy proxy pattern, confirming it’s not the newer EIP-1967 style a proxy-detection script might be written to expect. - The raw values returned were
49219031970982486(totalSupply, 6 decimals) and6(decimals), roughly 49.2 billion circulating USDC at that block.
No ABI import, no proxy check, no Multicall3 wiring. That’s the whole difference: not faster RPC, less code between the address and the answer.
A concrete side-by-side
Put next to Alchemy’s own token balance endpoint, the contrast is really about scope, not quality:
| Question | Alchemy | evmquery |
|---|---|---|
| Standard ERC-20 balance for a wallet | One call to the Token API | One expression, same result |
| NFT ownership and metadata | One call to the NFT API | Not evmquery’s job; use an indexer |
A custom Governor’s proposalSnapshot(id) |
Raw eth_call, your ABI, your proxy check |
One expression, ABI and proxy resolved automatically |
| A dashboard reading five fields across three differently-proxied protocols | Raw eth_call x5 or hand-written Multicall3 |
One expression, one Multicall3 round |
| Real-time notification when a contract emits an event | Webhooks | Not supported; poll or use Alchemy/QuickNode alongside |
The first row is a tie. The second and last rows are Alchemy’s to win outright. The middle two are the actual reason a team ends up searching for an Alchemy alternative in the first place: the read is real, the data is public, and the work is entirely in ABI and proxy bookkeeping that a standard indexed endpoint was never going to cover.
Where Alchemy is still the better fit
Being honest about the other direction matters as much as the pitch above. Reach for Alchemy, not evmquery, when:
- You need webhooks. evmquery has no push mechanism at all; every read is a request you initiate. If “notify me when X happens on-chain” is the actual requirement, Alchemy’s webhook product (or QuickNode’s equivalent) is the right tool, not a workaround.
- You need mempool or pending-transaction visibility. evmquery only ever answers questions about confirmed, on-chain state at a given block. Anything upstream of that, seeing a transaction before it’s mined, is outside what a query layer like this can do.
- You need to write to the chain. evmquery is read-only by design.
eth_sendRawTransaction, account abstraction, gas sponsorship, all of that lives on the RPC side, and an RPC provider like Alchemy running alongside evmquery covers exactly this gap. - Your reads are wallet- or NFT-shaped, not contract-shaped. A wallet’s token holdings, its NFT collection, its transfer history: that’s indexed data Alchemy has already crawled. Querying a specific contract’s own state one expression at a time doesn’t buy you anything there.
- You need chains evmquery doesn’t support. evmquery currently covers Ethereum, Base, and BNB Smart Chain. Alchemy’s chain list is far wider; if you’re building for a chain outside those three, this isn’t a live question.
Can you run both
Keeping an RPC provider in the stack alongside evmquery is expected, not a failure of either product. A common shape looks like Alchemy (or QuickNode) handling RPC, webhooks, and any write transactions, while evmquery handles the specific contract-logic reads that would otherwise mean writing and maintaining ABI and proxy code by hand. Neither vendor asks you to standardize on its client library exclusively, and the boundaries are thin enough that switching either piece later doesn’t require rewriting the other.
If you’re building for an AI agent rather than your own backend code, the same resolution runs behind evmquery’s MCP server instead of the REST endpoint shown above; the AI agent integration overview covers connecting it to Claude, Cursor, or another MCP-aware client directly.
Next steps
- Moralis vs Alchemy vs QuickNode vs evmquery is the broader four-way comparison this post narrows down from.
- evmquery vs. raw viem benchmark puts real line counts and round-trip numbers on the same ABI and proxy work described here.
- How evmquery resolves a contract read walks through the ABI resolution and proxy unwinding pipeline in more depth.
- Pricing if you want to run the exact query in this post against your own contracts.



