transfers
43 columnsOne row per TRX, TRC-10 or TRC-20 transfer, with sender, receiver, token metadata and a USD value where a price exists.
tron/transfers<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingEvery TRX, TRC-10 and TRC-20 transfer on TRON since June 2018, one row per transfer, valued in USD where a price exists.
transfersWe decode TRON transfers from the chain ourselves: native TRX, TRC-10 and TRC-20 tokens, including TRX that contracts move in internal calls. Each row carries the token's name, symbol and exact decimals, and a USD value for TRX and TRC-20 tokens from our own hourly price series, so there is no price feed to join. About 13.3 billion rows, from block 342 on 25 June 2018 to yesterday.
The query most buyers run first is flow for one token: filter Transfer_Currency_SmartContract to the contract, then group sender and receiver. Filter Transfer_Currency_Native instead to get base-asset TRX movement on its own. Amounts are decimal strings, so cast with care, and join on contract addresses because symbols repeat across tokens.
One row per TRX, TRC-10 or TRC-20 transfer, with sender, receiver, token metadata and a USD value where a price exists.
tron/transfers<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingSend 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.
Opens a new chat with the question filled in. Nothing about you is sent to Bitquery, and the assistant sees only the public brief.
Parquet files in a Requester Pays S3 bucket or a Cloudflare R2 bucket, chosen at checkout. On S3 you download with your own AWS account and AWS bills the transfer; on R2 you download with a read-only API key and pay no egress. Layout:
# transfers: 50 blocks per file, sorted ascending
tron/transfers<start_block>_<end_block>.parquetEvery window includes 43 columns. Only the time range changes.
transfers table, 43 columnsOne Parquet table with 43 columns: every TRX, TRC-10 and TRC-20 transfer, one row each, with sender, receiver, amount, token metadata, the transaction it settled in, and the fee. TRX moved by contracts in internal calls is included.
About 13.3 billion rows over 100 months, roughly 1.4 TB as Parquet, estimated from the sample files. The last 24 months hold about 5.1 billion rows and the last 12 months about 2.9 billion. Row counts come from the live table; exact figures arrive with the delivery manifest.
To the start of indexed history: from 25 June 2018, at block 342, the first block with a transfer. The Full window runs from there to yesterday.
Filter Transfer_Currency_SmartContract to TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t for USDT. For base-asset flow with no tokens, filter Transfer_Currency_Native to true. In the seven days to 21 September 2026 those were 16.7 million and 30.7 million rows, out of 60.2 million.
The export applies no filter of its own: spam tokens, lookalike tokens and failed transactions all stay in, and the columns let you drop them. TRC-10 tokens carry no USD value because most are spam; one sample row moves 1.8 billion units of a token called Gas66. Staking, unstaking and reward withdrawals have no rows, since the files hold only TransferContract, TriggerSmartContract, TransferAssetContract and CreateSmartContract calls, so native TRX balances rebuilt from them will not match the chain. Token balances hold, rebasing tokens aside.
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 the decimals differ per token and the raw figure is wrong without them.
Decoded from TRON mainnet by our own indexer and stored with no time-to-live, so nothing is a rolling window. Before release we read the sample back: 11,488 rows over blocks 78,861,100 to 78,861,149, 97.6% carrying a USD value and none above $1 million. The live table returns the same 11,488 rows for those blocks.
Amounts are decimal strings, so casting to float loses precision on large values. Token symbols come from the contract and repeat, so join on the contract address. Failed transactions are kept, so filter TransactionStatus_Success when you want settled flow only. USD values use the hourly price for the block's hour, so they can drift from a tick price inside that hour.
TRON finalises quickly and the dump is built behind the head, so a delivered file is not rewritten. Incremental daily partitions are appended, never edited in place, and the manifest records the block range each file covers.
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.
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 layout with a JSON manifest listing every file and its sha256. We prepare the files within 7 business days of purchase and email you the location. You choose at checkout where to collect them: a Requester Pays S3 bucket, downloaded with your own AWS account, or a Cloudflare R2 bucket with a read-only API key and no egress fees. Files stay available for 7 days from delivery. Enterprise orders can be delivered into your own S3, GCS or R2 bucket.
Every bonding-curve trade, token creation, migration and pool on Pump.fun, plus per-token OHLCV, decoded and USD-priced.
Every native ETH and token transfer on Ethereum since August 2015, one row per transfer, valued in USD where a price exists.
Arbitrum One since its genesis block of May 2021 as flat Parquet: blocks, transactions, internal calls, decoded events, transfers, DEX trades and sequencer fee rewards, at block resolution.
Tell us the chain, tables and date range.