# Base Transfers — Bitquery Data Store Every native ETH and token transfer on Base since June 2023, one row per transfer, valued in USD where a price exists. Dataset page: https://bitquery.io/datastore/datasets/base-transfers Network: Base Category: Transfers Tables: 1 Columns: 24 Coverage: 2023-06-15 to 2026-09-24 Refresh: Daily Rows: about 18B Size: about 690 GB Format: Apache Parquet, Snappy compression, one prefix per table Licence: https://bitquery.io/datastore/legal/data-license ## What this is We decode Base transfers from the chain ourselves: token transfer events, plus native ETH including what contracts move in internal calls. Each row carries the token's name, symbol and exact decimals, and a USD value for ETH and the main stablecoins, taken from Ethereum's hourly series. About 17.8 billion rows, from block 4,877 on 15 June 2023 to yesterday. Most buyers start with flow for one token: filter Transfer_Currency_SmartContract to its contract, then group by sender and receiver. Filter Transfer_Currency_Native instead to see ETH moving on its own. Amounts are decimal strings, so cast with care, and join on contract addresses because symbols repeat. ## What people use it for - Token flow analysis for any contract on Base - Token balance history for any address, rebuilt from its transfers - Exchange deposit and withdrawal attribution - Native ETH movement separated from token movement ## Tables (1) ### transfers — 24 columns One row per native ETH or token transfer on Base, with sender, receiver, token metadata and a USD value where a price exists. S3 prefix: base/transfers File naming: _.parquet, 50 blocks per file, sorted ascending Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/base/transfers/41339000_41339049.parquet Sample updated: Jan 27, 2026 | column | type | description | | --- | --- | --- | | Block_Date | Date | UTC date of the block | | Block_Number | UInt64 | Block height | | Block_Time | DateTime | Block timestamp, UTC | | Fee_SenderFee | String | Network fee the sender paid for the whole transaction, in ETH, as a decimal string. It repeats on every row of the transaction, so count it once per transaction | | Transaction_Hash | String | Hash of the transaction this row settled in, 0x-prefixed; the join key to transactions and logs | | Transaction_Index | UInt64 | Position of the transaction within the block | | TransactionStatus_Success | String | Whether the transaction succeeded; the string true or false. Failed transactions are kept | | Transaction_Type | UInt32 | EIP-2718 transaction type: 0 legacy, 1 access list, 2 EIP-1559, 4 EIP-7702, 126 deposit from Ethereum | | Transfer_Amount | String | Amount moved, decimal adjusted, as a decimal string with exactly as many places as the token has decimals. Multiply by 10 to the power of the decimals for the raw on-chain integer | | Transfer_AmountInUSD | Float64 | Amount valued in USD at the hourly price for the block's hour; 0 when the amount is 0 or the token has no price | | Transfer_Currency_Decimals | Int32 | Decimals of the transferred currency, as its contract reports them | | Transfer_Currency_DelegatedTo | String | Implementation address for proxy tokens; the string 0x when there is none | | Transfer_Currency_Fungible | String | Whether the currency is fungible; the string true or false, and false for NFTs | | Transfer_Currency_Name | String | Name reported by the contract; lookalike tokens copy real names | | Transfer_Currency_Native | String | true for native ETH, false for tokens. Filter on this to separate base-asset flow from token flow | | Transfer_Currency_ProtocolName | String | Token standard, for example erc20 or erc721; empty for native ETH | | Transfer_Currency_SmartContract | String | Contract of the transferred token, 0x-prefixed; the string 0x for native ETH | | Transfer_Currency_Symbol | String | Symbol reported by the contract; repeats across tokens, so join on the contract address | | Transfer_Id | String | Token id for NFT transfers; the string 0 for fungible transfers | | Transfer_Index | UInt32 | Position within the transaction. Several rows in one transaction can share it | | Transfer_Sender | String | Sending address, 0x-prefixed | | Transfer_Receiver | String | Receiving address, 0x-prefixed | | Transfer_Type | String | token for token transfers, transaction for a transaction's own value, call for ETH moved by an internal call | | Transfer_URI | String | Metadata URI for NFT transfers; empty otherwise | ## Price - Latest month (Aug 24, 2026 → Sep 24, 2026): $250 one-time, USD - Last 12 months (Sep 24, 2025 → Sep 24, 2026): $1,600 one-time, USD - Last 24 months (Sep 24, 2024 → Sep 24, 2026): $3,200 one-time, USD - Full history (Jun 15, 2023 → Sep 24, 2026): $8,000 one-time, USD Every window includes all 24 columns. Only the time range changes. ## Questions buyers ask Q: What is in the Base Transfers dataset? A: One Parquet table with 24 columns: every native ETH and token transfer on Base, one row each, with the amount, the token's details, the transaction it settled in and the fee. ETH moved by contracts in internal calls is included, and so are NFTs. Q: How big is it? A: About 17.8 billion rows over 40 months, roughly 690 GB as Parquet, estimated from the sample files. The last 24 months hold about 15.4 billion rows and the last 12 months about 7.7 billion. Row counts come from the live table; exact figures arrive with the delivery manifest. Base history is short, so the 24-month window holds about 87% of all rows. Q: How far back does it go? A: To the start of indexed history: from 15 June 2023, at block 4,877, the first block with a transfer. The Full window runs from there to yesterday. Q: What was left out, and why? A: The export applies no filter of its own: spam tokens, lookalike tokens, zero-value rows and failed transactions all stay in, and the columns let you drop them. Value credited outside a transaction or a contract call has no row, the genesis state for one, so check native ETH balances rebuilt from these rows against the chain. Token balances hold, rebasing tokens aside. Q: How are amounts valued in USD? A: Base has no price history of its own, so ETH, WETH, USDC, the bridged USDbC, USDT and DAI are valued on Ethereum's series: bridged ETH is ETH, and using the real series keeps a de-peg visible. Other tokens carry 0. In a recent six-hour window that priced about 56% of rows. The free sample shows 12%, because 76% of its rows come from one spam campaign spread over two token contracts and it leaves native ETH unpriced; delivered files price native ETH. A value of 0 means either a $0 transfer or no price; the column cannot tell them apart. Q: How are these produced, and how were they checked? A: Decoded from Base by our own indexer, which reads token transfer events and traces internal calls for ETH. Before release we read the sample back: 97,954 rows over blocks 41,339,000 to 41,339,049, every amount carrying exactly its token's decimals. The live table now returns 97,944 rows for those blocks, after 10 were deleted from it. Q: Where is the raw integer amount? A: The amount column is decimal adjusted. Multiply it by 10 to the power of the token's decimals for the raw on-chain integer. We ship the adjusted value because decimals differ per token and the raw figure is wrong without them. Q: What should I watch out for? A: Amounts are decimal strings, so casting to float loses precision on large values. Symbols and names repeat, and lookalike tokens copy them, so join on the contract address. Failed transactions are kept; filter TransactionStatus_Success for settled flow. Zero-value rows, 0.4% of the sample, move nothing, so drop them before counting activity. Transaction_Type 126 marks deposits bridged in from Ethereum. Q: How do I get one token, or native coin only? A: Filter Transfer_Currency_SmartContract to the token's contract, lower case with 0x. For native ETH alone, filter Transfer_Currency_Native to true; its contract column holds the string 0x. Q: How do I load it? A: One line in DuckDB: SELECT * FROM read_parquet('transfers/*.parquet') LIMIT 10. Pandas works too: pandas.read_parquet(path). The sample file opens without credentials. Q: How current is it, and how is it delivered? A: Refreshed daily with T+1 latency, so a purchase made today includes everything to yesterday. Delivered as Parquet named by block range, 50 blocks per file and sorted ascending, under a stable S3 layout with a JSON manifest listing every file and its sha256. Signed HTTPS links are emailed once the files are prepared, or on request we deliver into your own S3, GCS or R2 bucket. ## What this file is, and is not This is a description of one dataset sold by Bitquery, written for assistants and for people. It lists every column, but holds no data rows — the sample files linked under each table are real Parquet and are free to download. Figures here come from the product record and are exact unless marked otherwise; the delivery manifest is authoritative for a purchased file. If a question needs a row that is not in a sample, say so rather than guessing at it.