BitqueryBitqueryData Store
BaseTransfers

Base Transfers

Every native ETH and token transfer on Base, one row per transfer, with sender, receiver and a USD value where a price exists.

Coverage
Jun 15, 2023→ Sep 24, 2026 · yesterday
Rows
≈19Brows · estimate
Table
1transfers
Columns
24typed
Coverage ends yesterday, UTC

Overview

This is every transfer on Base, native ETH and tokens alike, from 15 June 2023. Each row names the sender, the receiver, the token with its decimals and symbol, and the transaction it settled in. 19.2 billion rows in all.

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 rather than symbols, which repeat.

Use cases

  • Token flow analysis for any contract on Base
  • Address-level balance reconstruction at any block
  • Exchange deposit and withdrawal attribution
  • Native ETH movement separated from token movement

Table

24 columns · free sample for the table

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.

base/transfers<start_block>_<end_block>.parquet50 blocks per file, sorted ascending
Browse columns Sample fileSample updated Jan 27, 2026

Schema reference

copies a column name
24 columns
ColumnTypeDescription
Block3
Block_DateDateUTC date of the block
Block_NumberUInt64Block height
Block_TimeDateTimeBlock timestamp, UTC
Fee1
Fee_SenderFeeStringNetwork fee the sender paid for the whole transaction, in ETH, as a decimal string. It repeats on every transfer in the transaction, so sum it per transaction, not per row
Transaction3
Transaction_HashStringHash of the transaction this transfer settled in, 0x-prefixed; the join key to transactions and logs
Transaction_IndexUInt64Position of the transaction within the block
Transaction_TypeUInt64EIP-2718 transaction type: 0 legacy, 2 EIP-1559, 4 EIP-7702
TransactionStatus1
TransactionStatus_SuccessStringWhether the transaction succeeded; the string true or false. Failed transactions are kept
Transfer16
Transfer_AmountStringAmount transferred, decimal adjusted, as a decimal string with exactly Transfer_Currency_Decimals places. Multiply by 10^Transfer_Currency_Decimals for the raw on-chain integer
Transfer_AmountInUSDFloat64Amount 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_DecimalsInt64Decimals of the transferred currency, as its contract reports them
Transfer_Currency_DelegatedToStringImplementation address for proxy tokens; the string 0x when there is none
Transfer_Currency_FungibleStringWhether the currency is fungible; the string true or false, and false for NFTs
Transfer_Currency_NameStringName reported by the contract; lookalike tokens copy real names
Transfer_Currency_NativeStringtrue for native ETH, false for tokens. Filter on this to separate base-asset flow from token flow
Transfer_Currency_ProtocolNameStringToken standard, for example erc20 or erc721; empty for native ETH
Transfer_Currency_SmartContractStringContract of the transferred token, 0x-prefixed; the string 0x for native ETH
Transfer_Currency_SymbolStringSymbol reported by the contract; repeats across tokens, so join on the contract address
Transfer_IdStringToken id for NFT transfers; the string 0 for fungible transfers, not empty
Transfer_IndexUInt64Transfer index within the transaction. Not unique: several transfers in one transaction can share it
Transfer_SenderStringSending address, 0x-prefixed
Transfer_ReceiverStringReceiving address, 0x-prefixed
Transfer_TypeStringtoken for token transfers, transaction for a transaction's own value, call for ETH moved by an internal call
Transfer_URIStringMetadata URI for NFT transfers; empty otherwise
Sample file

Ask an AI about this data

Send this dataset’s full schema to an assistant and ask it anything. It reads the plain-text brief first, so the answer comes from the real column list rather than a guess.

Start with

Opens a new chat with the question filled in. Nothing about you is sent to Bitquery, and the assistant sees only the public brief.

Delivery

Parquet files, delivered as signed download links by email after payment, in this layout:

# transfers — 50 blocks per file, sorted ascending
base/transfers<start_block>_<end_block>.parquet
  1. Download a free sampleNo email needed.
  2. Pay nowName, work email and licence check.
  3. Pay the invoiceBy card or bank transfer.
  4. Get signed linksThe team prepares the export and emails the links.

Time windows

Every window includes 24 columns. Only the time range changes.

31 days
Latest month
Aug 24, 2026 → Sep 24, 2026
$250
Pay now
365 days
Last 12 months
Sep 24, 2025 → Sep 24, 2026
$1,600
Pay now
730 days
Last 24 months
Sep 24, 2024 → Sep 24, 2026
$3,200
Pay now
1,197 days
Full history
Jun 15, 2023 → Sep 24, 2026
$8,000
Pay now
In every window
  • The transfers table, 24 columns
  • Parquet files in the layout under Delivery
  • Signed download links by email
  • Licensed under the Data License

FAQ

9 questions
What is in the Base Transfers dataset?

One Parquet table with 24 columns: every native ETH and token transfer on Base, one row each, with sender, receiver, amount, token metadata, the transaction it settled in and the fee. Internal transfers of ETH made by contract calls are included.

How big is it?

About 19.2 billion rows and 1.39 TiB across 40 monthly partitions. The last 24 months hold about 16.8 billion of them and the last 12 months about 9.0 billion. Figures are approximate until the delivery manifest is generated.

How far back does it go?

To the start of indexed history: from 15 June 2023, at block 4,877, weeks before the public launch in August. The Full window runs from there to yesterday.

How are amounts valued in USD?

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 less, because 76% of its rows are one spam airdrop 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.

Where is the raw integer amount?

Transfer_Amount is decimal adjusted. Multiply it by 10 to the power of Transfer_Currency_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.

What should I watch out for?

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, so filter TransactionStatus_Success for settled flow. Zero-value transfers are common: they are address-poisoning attempts, not real movement. Base history is short, so the 24-month window already holds about 87% of every Base transfer ever made.

How do I get one token, or native coin only?

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.

How do I load it?

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.

How current is it, and how is it delivered?

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.