Skip to main content

Bitcoin Data

Bitquery provides Bitcoin blockchain data as Parquet exports from the Bitquery Data Store, designed for large-scale analytics, historical backfills, and data lake integrations. These datasets can be hosted directly in your own cloud storage (for example, AWS S3) and queried using engines like Snowflake, BigQuery, Athena, Spark, etc.

How do I get Bitcoin address balance history block by block?​

Bitcoin is UTXO-based, not account-based: an “address balance” at height H is the sum of unspent outputs paying that address with block height ≤ H. In Bitquery’s Bitcoin Parquet dumps, join outputs to inputs to mark spends, aggregate per address per block (or use your warehouse’s window functions). For interactive GraphQL wallet history, see V1 Bitcoin documentation if your use case is supported there.

Available Bitcoin Topics​

For Bitcoin, Bitquery currently provides the following datasets:

  • Blocks – Block-level metadata

  • Transactions – Full transaction-level data

  • Inputs – Transaction input data

  • Outputs – Transaction output data

  • OMNI Transactions – OMNI Layer protocol transactions

  • OMNI Transfers – OMNI Layer token transfers

Sample Bitcoin Cloud Dataset​

You can explore schemas and validate your tooling using the public Bitcoin sample datasets:

GitHub reference (schemas & examples)
https://github.com/bitquery/blockchain-cloud-data-dump-sample/tree/main/bitcoin

Example Parquet file (public S3)

https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/bitcoin/blocks/<block_range>.parquet

Bitcoin Dataset Directory Structure​

bitquery-blockchain-dataset/
└── bitcoin/
├── blocks/
│ ├── <start_block>_<end_block>.parquet
│ ├── <start_block>_<end_block>.parquet
│ └── ...
├── transactions/
│ ├── <start_block>_<end_block>.parquet
│ └── ...
├── inputs/
│ ├── <start_block>_<end_block>.parquet
│ └── ...
├── outputs/
│ ├── <start_block>_<end_block>.parquet
│ └── ...
├── omni_transactions/
│ ├── <start_block>_<end_block>.parquet
│ └── ...
└── omni_transfers/
├── <start_block>_<end_block>.parquet
└── ...

Block Range Naming Convention​

Each Parquet file name follows this format:

<start_block>_<end_block>.parquet

Example:

932100_932149.parquet

Get Full Access​

Buy on the Data Store or email sales@bitquery.io for custom ranges. A Data Store purchase is downloaded from a Requester Pays S3 bucket or a Cloudflare R2 bucket, chosen at checkout. Custom exports can be delivered into your own S3, GCS or R2 bucket, or as a Snowflake or BigQuery share. To trial it first, fill the API form.

Datasets you can buy on the Data Store:

  • Bitcoin — blocks, transactions, inputs, outputs and Omni Layer data since genesis

This listing is not the full catalogue. Other topics, chains and date ranges are available on request from sales@bitquery.io.

Reading Files with DuckDB​

No key, no client library — point DuckDB at the public sample directly:

SELECT *
FROM read_parquet('https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/bitcoin/transactions/932100_932149.parquet')
LIMIT 10;

Reading Files in Python​

import pandas as pd

df = pd.read_parquet("https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/bitcoin/blocks/932100_932149.parquet")
print(df.info())
df.head()

Real-Time vs Batch Data Access​

Data Store exports are optimized for batch analytics and historical workloads.

If you require low-latency or streaming Bitcoin data, Bitquery also provides:

Build with Bitquery

Ready to run this in production?

Get an API key and run these queries in minutes, or talk to us about plans and enterprise delivery.