Progress pill
Connecting your wallet to your node

Indexers: role, operation, and solutions

Setting up your first Bitcoin node

Indexers: role, operation, and solutions

  • What is an indexer?
  • Does Bitcoin Core have an indexer?
  • Should you add an address indexer to your node?
  • Which indexer to choose?
  • How do I install an indexer on Umbrel?
If you've already explored Bitcoin nodes before taking this course, you may have encountered the term "indexer". These are tools such as Electrs or Fulcrum, which can be added to a Bitcoin Core node. But what exactly is their role? How do they work in practice? And should you install one on your new Bitcoin node? That's what we're going to explore in this chapter.

What is an indexer?

Generally speaking, an indexer is a program that scans a set of raw data, extracts relevant keys (such as words, identifiers, and addresses), and builds an auxiliary file, called an "index", where each key refers to the exact location of the data in the corpus. This pre-processing phase utilizes CPU time and requires some disk space, but it eliminates the need to process the entire corpus each time the database is queried; simply interrogating the index yields an almost immediate response.
In layman's terms, it's the same principle as an index in a book: if you're looking for a specific piece of information, rather than rereading the whole book, you consult the index to directly find the page where the information you're looking for appears.
In a Bitcoin node, such as Bitcoin Core, Blockchain data is stored in its raw, chronological form. Each block contains transactions, which in turn contain inputs and outputs, without any particular classification by address, identifier, or wallet. This linear organization is optimized for block validation, but unsuitable for targeted searches. For example, if you wanted to find all transactions linked to a specific address in a non-indexed node, you'd have to manually review the entire blockchain, block by block and transaction by transaction. This is precisely where the indexer on your Bitcoin node comes in.
An indexer is a specialized software program that analyzes this mass of raw data (Blockchain, Mempool, UTXO set) and extracts keys, such as transaction identifiers, addresses, and block heights. From these keys, it builds its index, associating each key with the exact location of the information in the node's storage.
Indexing allows you to search for information on your node quickly, accurately, and efficiently. For example, when you connect a wallet like Sparrow to your node, it can display the balance of an address almost instantly. In concrete terms, it queries the indexer with a request like: "Which UTXOs are associated with this script-Hash?" The indexer responds almost immediately, without having to reread the entire Blockchain, as this data is already listed in its database.

Does Bitcoin Core have an indexer?

Without the need for additional software, Bitcoin Core does not, strictly speaking, offer a complete address indexer comparable to those found in software such as Electrs or Fulcrum. Nevertheless, it does incorporate several internal indexing mechanisms, as well as optional options for extending its querying capabilities. To fully understand the situation, we need to take a detour into the project's history.
Until Bitcoin Core version 0.8.0, transaction validation was based on a global transaction index, known as the txindex. This index referenced all Blockchain transactions and their outputs. When a node received a new transaction, it consulted this index to verify that the consumed outputs (in inputs) actually existed and had not already been spent. txindex was therefore indispensable for transaction validation at the time.
However, this approach had its limitations: it was slow, costly in terms of storage, and redundant in terms of information. To remedy this, version 0.8.0 introduces an overhaul of the validation model called Ultraprune. Instead of storing everything in the form of transaction indexes, Bitcoin Core maintains a simple database dedicated solely to UTXOs, called chainstate (in everyday language, this is known as "UTXO set"), and updates its list as outputs are consumed and created.
This method is much faster and stores only the current state of the register, making the txindex indexer unnecessary. However, instead of deleting the txindex code, the developers have chosen to keep this functionality behind a simple parameter (txindex=1). By enabling this option on your node, you can query any transaction from its txid.
Contrary to popular belief, Bitcoin Core doesn't offer address-based indexing like Electrs or Fulcrum. There are several reasons for this choice:
  • The role of Bitcoin Core is not to become a complete block explorer, nor to provide an API tailored to each use. Integrating an address-based index would imply a long-term maintenance commitment that goes beyond the software's initial scope.
  • Most use cases can already be covered in other ways. For example, to estimate the balance of an address, you can use the scantxoutset command, which directly queries the UTXO set without requiring a full index.
  • Each software program has specific requirements regarding the format or type of data to be indexed (address, Hash script, proprietary tag, etc.). It's more flexible and logical to let these programs build their own customized indexes than to fix a generic solution in Bitcoin Core.
Bitcoin Core does have an optional transaction indexer (txindex), a vestige of its historical operation, but it does not provide an address index, nor a direct Interface for complex searches. In some cases, therefore, it may be useful to add an external indexer.

Should you add an address indexer to your node?

Adding an address indexer, such as Electrs or Fulcrum, is not mandatory; it depends on your specific needs.
If you simply want to connect a wallet, such as Sparrow, to your node to view balances and broadcast transactions, this is entirely possible directly via Bitcoin Core's Interface RPC, either locally or remotely via Tor.
On the other hand, to use more advanced software, such as running mempool.space locally, the installation of an address indexer becomes indispensable for the space block explorer.
The indexer requires a certain amount of synchronization time (less than the IBD) and will occupy additional disk space. If your SSD still has enough free space after downloading Blockchain, you can easily add an indexer.

Which indexer to choose?

Two software programs are commonly used to build this type of address index and make it accessible: Electrs and Fulcrum. These tools index the Blockchain according to script-hash (addresses) and then propose a standardized Interface (the Electrum protocol), to which numerous wallets, such as Electrum wallet, Sparrow, or Phoenix, connect.
Simply put, Electrs is quite compact: it indexes Blockchain faster and takes up less disk space, but performs slightly less well than Fulcrum on queries. In contrast, Fulcrum consumes more disk space and takes longer to index, but offers superior query performance.
For individual use, I recommend Electrs: it consumes less space, is well-maintained, and, although it is slightly slower on certain requests than Fulcrum, it is still more than sufficient for everyday use. If you have the time and disk space, you can also try out Fulcrum, which will perform significantly better, especially on wallets with numerous addresses to verify.
In concrete terms, in August 2025, Electrs will require approximately 56 GB of storage, compared to approximately 178 GB for Fulcrum. Your choice of indexer, therefore, also depends on your storage capacity:
  • If your disk space is very limited, you'll have to make do with Bitcoin Core without an external address indexer.
  • If you want to use an indexer, but are still constrained by capacity, opt for Electrs.
  • If you've got a comfortable amount of disk space, Fulcrum may be just what you're looking for.
For the rest of this BTC 202 course, I'll be using Electrs, but you can easily follow along with Fulcrum: the installation procedure is identical, as is the Interface connection to the wallet, since both expose an Electrum server.

How do I install an indexer on Umbrel?

To install Electrs (or Fulcrum) on your Umbrel, the procedure is straightforward: go to the App Store, search for the relevant application (located in the Bitcoin tab), and then click the "Install" button.
Once installation is complete, Electrs will proceed with a synchronization (indexing) phase, which can take several hours.
Once synchronization is complete, you can connect your wallet software to your Electrum server, which is hosted on Umbrel.
Quiz
Quiz1/5
Which Bitcoin core version introduced the Ultraprune model?