Do I need an archive node to get historical data?
Updated August 2026
Usually not. An archive node answers a specific question — "what was the state of this contract at block N" — but most data pipelines need something different: the record of what happened in each block, which flat-file extraction provides far more cheaply.
Teams often reach for an archive node because it is the familiar answer to "I need history," then discover it is expensive to run and still does not make historical data searchable.
What does an archive node actually give you?
Full historical state. A regular full node prunes old state and keeps recent blocks; an archive node retains the complete state trie, so you can query storage at any past block.
That is genuinely necessary for some things:
- What was this contract's storage at block 15000000?
- What was this address's balance at a specific historical block?
- Simulating a transaction against past state
If you need point-in-time state reconstruction, an archive node is the right tool.
What do most pipelines actually need?
The execution record — what happened in each block, in sequence. Every transaction, every call, every transfer, every state change, as it occurred.
That is a different shape of data. You are not asking "what did the world look like at block N," you are asking "what happened between block A and block B," which is what almost every analytics, monitoring, and application-data use case comes down to.
| Archive node | Flat-file extraction | |
|---|---|---|
| Answers | State at a given block | What happened in each block |
| Access | RPC point queries | Sequential or parallel reads |
| Searchable | No | Yes, once transformed |
| Operating cost | High — large storage, ongoing | Extract once, read many times |
| Parallel consumers | Compete for node capacity | Independent |
Why is the archive node route painful?
Storage requirements are large and grow permanently. Sync times are long. And critically, even with the node running you still cannot search — RPC gives you point lookups, so "every swap by this address last year" still means fetching a great many blocks and filtering yourself.
You end up paying to operate expensive infrastructure and then building an indexing layer on top of it anyway.
What's the alternative?
Extract the execution record once into flat files, then read those files as many times as you need. This is what Firehose does, and it captures more than logs expose — call trees, state changes, and balance changes, so internal transactions are visible rather than absent.
Substreams then transforms that record into whatever you need, processing history in parallel and continuing into live data with the same code.
When do you still need an archive node?
When you genuinely need point-in-time state: simulating historical transactions, reconstructing a contract's storage at a past block, or forensic analysis requiring the state trie. These are real requirements — they are just narrower than "I need historical data" usually implies.
Frequently asked questions
Can I get historical data without running any node? Yes. Hosted endpoints serve full history without you operating infrastructure.
Do internal transactions require an archive node? No. They require extraction that captures call traces. Log-based indexing misses them regardless of node type.
Is flat-file data as complete as an archive node's? For the execution record, yes — arguably more so, since it includes detail never emitted as events. For point-in-time state reconstruction, an archive node is the right tool.
Get full history without operating a node — API key at thegraph.market, no personal information required.
Related: What is a flat-file blockchain dataset? · RPC vs indexing · How do I backfill historical blockchain data?