Indexing smart contracts

Index any smart contract, on any chain, without RPC.

Point a Substreams module at a contract and get every event and call it has ever emitted — years of history backfilled in minutes, then live at the head of the chain with sub-second liveness. Land it straight in your own database.

7M blocks & 5 GiB egress included — no credit card required
$ substreams sink postgres uniswap-v4-substreams@v0.1.0 map_events \
--dsn "psql://a:b@localhost:5432/db?sslmode=disable" -s -1
sinking · block 34812004 · 128 swaps

Ditch the RPC polling loop

The same job, done two ways — one you maintain, one you subscribe to.

Backfill

Polling an RPC endpoint: Page through eth_getLogs one range at a time. A year of history takes days, and a rate limit ends the run.

Streaming with Substreams: Up to 300 parallel workers on paid plans replay the same range at once — years of contract history in minutes.

Liveness

Polling an RPC endpoint: Latency is whatever your polling interval is, plus the blocks that landed while a request was in flight.

Streaming with Substreams: Blocks are pushed as they are produced. New contract activity reaches you sub-second.

Reorgs

Polling an RPC endpoint: Detect forks yourself, or write data you have to reconcile later.

Streaming with Substreams: Every stream is cursor-based and emits explicit undo signals, so a reorg rewinds your data instead of corrupting it.

Chains

Polling an RPC endpoint: A new provider, a new set of quirks, and a new integration for every chain you add.

Streaming with Substreams: The same module shape across EVM, SVM, and 90+ networks, behind one account and one API key.

Delivery

Polling an RPC endpoint: Write the ingestion service, the retry logic, and the schema migrations yourself.

Streaming with Substreams: Sink to Postgres or ClickHouse with a single command — run it yourself, or let us host it.

What you get

History and head, one stream

A single request spans genesis to the chain head. Backfill years of contract history in minutes, then keep receiving blocks with sub-second liveness — no second pipeline for realtime.

Never miss a beat

Streams resume from a cursor, exactly where they stopped, across restarts and deploys. Forks are signalled rather than silently overwritten, so what your database holds always matches the chain.

Any chain, one model

EVM, SVM, and 90+ networks through the same API. Taking a contract index to another chain is a manifest change, not a rewrite.

Sink anywhere

Postgres, ClickHouse, files, PubSub, or a webhook. Run the sink on your own infrastructure, or hand it to Hosted Sinks and keep nothing but the database.

Ethereum, Base, Arbitrum, Solana, and 90+ more

Every supported network runs the same streaming stack, so the contract you index today and the chain you add next quarter work the same way.

Browse supported networks

Start indexing your contract today.

Create an account, generate an API key, and stream your first contract events in minutes. No credit card, no node to run.

Start free — get an API key7M blocks & 5 GiB egress included — no credit card required