Build a blazing fast indexer with Shadow

Emit data rich shadow events for any deployed contract. Speed up your indexing pipelines by reducing RPC calls, traces, and complex joins.
Try it out

Reduce engineering hours and index onchain data faster.

Access the entire state of the chain with block-level accuracy. Emit the exact data you need in shadow events, and skip unnecessary data pipelines.
Access to any mainnet state
Emit data directly in shadow events that usually requires making separate RPC calls.
Reduce data engineering time
Eliminate the need to build and maintain data pipelines to merge onchain datasets.
Save on compute costs
Eliminate expensive multi-join queries by emitting shadow events in usable schemas.
Rapidly iterate on schemas
Shadow events frontfill instantly, and full historical backfills take less than 15 minutes.
No more tracing
Protocol doesn't emit an event you need? No problem. Emit a shadow event yourself.
Access peripheral contract data
Get aggregator, fees, collection, and ENS data with simple view function calls.
Most accurate point-in-time prices
Call a price oracle directly in shadow events to get prices with block-level accuracy.
Easy access to contract storage
Get any data stored by contracts during execution without complex decoding.
Standardize schemas across protocols
Create unified event schemas for similar protocols to reduce data transformations.

Emit events wherever you want, however you want.

Simplify your data indexing stack by generating data rich events that are not possible on mainnet. Write custom events for any contract, and get the data in realtime.
01 define

Define your shadow events

Create custom event schemas for any smart contract deployed on mainnet.
Write custom events in standard Solidity or Vyper code
Instant frontfills, full backfills in less than 15 minutes
Full control over schema definition and parameter naming
Easily unify schemas across similar protocols for standardization
02 emit

Emit them how you want

Emit your shadow events where and when you want them, by directly editing contract code in your Shadow fork.
Access any state data on mainnet (even from other contracts)
Call view functions from any contract to get hard-to-get data
Point-in-time prices via oracles with block-level accuracy
No more tracing for event data not logged by protocol developers
03 call

Familiar RPC methods

Fetch your custom shadow event data with standard RPC requests.
Fully hosted Shadow RPC (e.g. eth_getLogs)
<300ms query latency with 99.99% uptime
Easy integration – simply swap in your Shadow RPC URL


Get custom onchain data for indexing and analytics in minutes.