BitcoinDatabase.com
All posts
Buyer guides

Bitcoin Balance History API Providers for Auditors

A Bitcoin balance history API fit for audit work returns integer satoshis at a named block for every address type. On 29 September 2026 BlockCypher matched our independent trace to the satoshi at block 900,000, Esplora ignored its height parameter, and Santiment refused P2WSH and Taproot wallets holding 226,942 BTC.

By the BitcoinDatabase team

September 2026 · 8 min read

Query Console
btc
try:

Hit Run to query the Bitcoin blockchain.

Live from the chain for .

BTC

Balance trail

informational on-chain data · not financial advice

REST API · SQL · dashboards, one indexed dataset. Reading the chain ...

The short answer

A Bitcoin balance history API is only useful to an auditor or custodian if it returns the balance at a named block height, exact to the satoshi, for every address type. On 29 September 2026 we tested five providers against the chain. BlockCypher's height filter matched our independent trace to the satoshi, Esplora ignored its height parameter, and Santiment refused P2WSH and Taproot addresses. BitcoinDatabase returns full address history from $199 a month, with SQL for many addresses at once.

This guide is for audit seniors, controllers, fund administrators and custody operations teams who have to state what a set of Bitcoin addresses held at a period end and then defend that number. A chart of a wallet going up and down is not the job. The job is a figure that someone else can re-perform next month and get the same answer, down to the last satoshi.

We sell Bitcoin on-chain data, so weigh that. Every claim below comes from calls we made on 29 September 2026 at chain tip 969,173, and where another provider does the job better or cheaper, we say so.

What makes a balance history API fit for audit work?

Four things. It must accept a block height, because a date is ambiguous and a height is not. It must be exact to the satoshi, as integer satoshis or fixed eight place decimals, because a float that rounds is a reconciling difference you have to explain. It must read every script type, because custodians hold their largest balances in multisig SegWit and increasingly Taproot. And it must let you ask about many addresses at once, because a custodian's cold storage is rarely one address. Most providers pass one or two of these tests. Very few pass all four.

Bitcoin balance history providers compared

ProviderBalance at a past heightWhat we measured on 29 Sep 2026Price we could read
BlockCypherYes, a before parameter per addressExact to the satoshi at block 900,000, P2WSH and Taproot both readFree at 3 requests a second and 100 an hour, paid from $119 a month
Esplora explorersNo, current balance onlyA height parameter is ignored: the response was byte-identical to the current oneFree public endpoints
SantimentDaily values at 00:00 UTC, not by heightRefused P2WSH and Taproot; 3 to 21 satoshis low on idle addressesFree tier, then $49 to $999 a month
Google BigQueryYes, by writing SQL over inputs and outputsPublic dataset runs about three blocks behind tip$6.25 per TiB scanned, first TiB a month free
BitcoinDatabaseYes, from full REST history back to 2009, or one SQL query within the indexed chainExact to the satoshi for every script type, many addresses in one query$49 a month with one year; full history and SQL from $199

Two of these are free and good. If you have one address and a period end, BlockCypher's height filter answers it correctly, and we would rather you used it than a tool that gets the number wrong. The trouble starts when the address list grows, when the vault is a multisig, or when the same query has to run every month for fifty clients.

What we measured on each provider

BlockCypher got the height right

We took one of the largest exchange cold wallets we track, 34xp4vRoCGJym3xR7yCVPFHoCNxv4Twseo, and asked BlockCypher for its balance before block 900,000. It returned 24,859,753,728,657 satoshis across 5,447 transactions. To check it, we paged the address history from a different explorer, found the 139 transactions confirmed at or after block 900,000, and backed their net effect out of today's balance. The result was 24,859,753,728,657 satoshis. Same number, two independent methods. BlockCypher also read a 62 character P2WSH cold wallet and a Taproot address with the same filter. The limits are volume and plumbing: one address per call, 100 requests an hour on the free tier, and a batch endpoint that we have seen return HTTP 429 with half the addresses answered and half refused in the same body.

Esplora quietly ignored the question

Blockstream's and mempool.space's Esplora API is the fastest free way to read a current balance. It has no historical balance endpoint, and adding a height parameter does not create one. We requested the same address with ?height=900000 and without it, and the two responses hashed to the same value. A script that assumes the parameter worked will file today's balance as last year's without an error. To get a past balance from Esplora you page the full transaction history and subtract, which is what we did above, and on a busy address that is thousands of calls.

Santiment refused multisig and Taproot, and missed by satoshis

Santiment's historicalBalance query returns a daily value at midnight UTC. It refused two exchange cold wallets that are P2WSH multisig, bc1qgdjq and bc1qjasf, holding 226,942.49 BTC between them, with an error saying the infrastructure is not supported. A Taproot address failed the same way. On the addresses it did read, it came back 21 satoshis short on 34xp4v, 3 short on 3M219K and 3 short on 1FzWLk, although none had moved for days and no transaction of those sizes exists on them. Santiment is a strong metrics product for traders, and our Santiment alternative page credits that. For a balance an auditor signs off on, a value that can be 21 satoshis off, or absent for every multisig SegWit vault, fails the test.

BigQuery is exact but you build it

Google's public crypto_bitcoin dataset holds every input and output, so a balance at a height is a SQL sum of outputs received minus outputs spent up to that block. It is correct, it covers every script type, and the first TiB scanned each month is free. The costs are engineering time, query scans that grow with the table, and a dataset that trails the tip by a few blocks. For a data team that already lives in BigQuery it is a sound choice. For an audit team without a data engineer it usually is not.

Why does the block height matter more than the date?

Because a date does not name one block. When we measured the 2025 year-end cutoff, the last block before midnight UTC was 930,340 and the last before midnight Pacific was 930,389, 49 blocks and 147,438 transactions apart. Eastern time was ambiguous by two blocks, because block timestamps are not strictly increasing and two later blocks carried earlier stamps. An API that answers "balance on 31 December" is choosing one of those for you without saying which. Record the height, record the clock you used to choose it, and put both in the workpaper. Our Bitcoin audit trail API page lays out that cutoff method.

How do I get the balance of many Bitcoin addresses at a past block?

Use SQL over an indexed chain, not a loop of single-address calls. With BitcoinDatabase on Growth you send one query that sums outputs received and spent up to the chosen height for the whole address list, grouped by address, and every value comes back exact to the satoshi, from a fixed eight decimal column, for every script type. The SQL index starts at a recent height and grows with every block, so it covers current period ends; for older heights the REST history below reaches back to 2009. On REST, the Bitcoin address balance history API returns each address's full transaction list back to 2009, so the same figure can be rebuilt address by address as a second method. Running both and getting the same total is the cheapest re-performance evidence there is.

For custodians, the same query is the core of a proof of reserves check: the addresses you publish, their total at a stated block, and a result any outside party can reproduce. We have read five tracked exchange cold wallets fifteen times now, and at block 969,173 their total was 685,431.54334626 BTC, unchanged to the satoshi since block 969,059.

Which Bitcoin address types do custodians use?

Mostly P2SH and native SegWit multisig, with a growing share of Taproot for new vaults. Of the five cold wallets above, two are P2WSH, two are P2SH and one is legacy P2PKH, so a provider that cannot read P2WSH misses a third of the total on its own. Before you pick a provider, test it on your largest address of each type, not on a sample legacy address. The Bitcoin address types page shows how to tell them apart from the prefix and length.

What should a custodian ask a balance history vendor?

  1. Can I pass a block height, and what happens if I pass one you do not support? A silent ignore is worse than an error.
  2. Are values returned as integer satoshis or as decimals, and has the vendor ever been off by a satoshi against a node?
  3. Does it read P2WSH and Taproot? Test with your own addresses.
  4. How many addresses can one request cover, and does a partial failure come back as an error or as a mixed success?
  5. Can the result be re-performed a year later from the same height and return the same number?

Custodians being examined on their controls get the same questions from a second direction, because SOC 2 auditors test that a reserve check runs the same way every period. If you are building that evidence trail anyway, a compliance automation platform that maps controls to SOC 2 keeps the control narrative in step with the data job that proves it.

How much does a Bitcoin balance history API cost?

From nothing to a few hundred dollars a month for most audit and custody teams. BlockCypher is free for light use and paid from $119 a month. Santiment's API plans run from $49 to $999 a month, with full history on restricted metrics only at the top. BigQuery charges $6.25 per TiB scanned after the first free TiB. BitcoinDatabase is $49 a month on Developer with one year of history, and $199 on Growth for full address history back to 2009 plus SQL over the indexed chain, which is what a team checking many addresses every period needs. Scale at $799 adds bulk CSV exports and webhooks.

If you are checking a single balance on a single date, use a free tool and write down the height. If you check dozens of addresses every quarter and have to tie them out, the crypto audit software guide for CPA firms covers the wider tool stack, and our Growth plan is built for exactly that query. BitcoinDatabase provides informational on-chain data only. It is not audit, legal or investment advice.

Query the Bitcoin blockchain yourself

Pull balances, UTXOs, transactions, on-chain metrics and fund flows from the Bitcoin blockchain by REST API, SQL and dashboards. Address history since 2009, new blocks within seconds, no node to run.

Keep reading

More from the BitcoinDatabase blog

Data guides

How to Check a Bitcoin Address Balance on a Specific Date

The blockchain stores no balances, only unspent outputs, and explorers report the present tense. We tested four public endpoints on one address: two ignored a height parameter, one returned zeroes, one is gone. What actually works, the arithmetic behind a point-in-time balance, and the five errors that quietly corrupt one.

Read
Buyer guides

Bitcoin Reconciliation API for Exchanges and Custodians

On 10 September 2026 we reconciled a five-address cold-storage set two independent ways at block 966,451, from address totals and from 1,677 individual transactions, and the two answers matched to the satoshi. That match is the test a reconciliation data layer has to pass, and commercial balance feeds cannot take it: they round to two decimal places and refresh hourly on every plan. We cover the silent-zero trap in historical balance endpoints, why you reconcile at a block height and never a timestamp, and the five questions to ask a Bitcoin data vendor before you sign.

Read
Buyer guides

Best Bitcoin API for Corporate Treasury Teams and Auditors

The best Bitcoin API for a corporate treasury team returns a wallet balance pinned to a block height, not just the balance right now. For the quarter ending 30 June 2026 the last block before midnight UTC was 956,140, but the last block before midnight Eastern was 956,162, and 22 blocks holding 110,263 transactions sit between the two cutoffs. Free explorers ignore a height parameter silently. Here is how to pick a data source for an ASU 2023-08 close.

Read
Buyer guides

Best Bitcoin Collateral Monitoring API for Crypto Lenders

The best Bitcoin collateral monitoring API for a crypto lender watches collateral outpoints rather than addresses and returns the balance at a named block for the loan tape. On 22 September 2026 a stranger was sending 546 satoshis at 0.162 sat/vB to a 234,719 BTC cold address, the kind of event that pages an address-level monitor for nothing. Custodian reports, Tatum, Crypto APIs, BlockCypher and a Bitcoin index compared with published prices.

Read

Query the whole Bitcoin blockchain

BitcoinDatabase indexes the public Bitcoin blockchain block by block and returns balances, UTXOs, transactions, on-chain metrics and fund flows by REST API, SQL and dashboards, with no node to run.

REST + SQL + dashboards · address history since 2009 · new blocks within seconds

Informational on-chain data only · not financial, investment or legal advice · AML features are compliance tooling to support your own review.