transfers
24 columnsOne row per native BNB or token transfer on BSC, with sender, receiver, token metadata and a USD value where a price exists.
bsc/transfers<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingEvery native BNB and token transfer on BSC since August 2020, one row per transfer, valued in USD where a price exists.
transfersWe decode BSC transfers from the chain ourselves: token transfer events, plus native BNB including what contracts move in internal calls. Each row carries the token's name, symbol and exact decimals, and a USD value from our own hourly BSC price series. About 40.7 billion rows, from block 363 on 29 August 2020 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 BNB moving on its own. Amounts are decimal strings, so cast with care, and join on contract addresses because symbols repeat.
One row per native BNB or token transfer on BSC, with sender, receiver, token metadata and a USD value where a price exists.
bsc/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
bsc/transfers<start_block>_<end_block>.parquetEvery window includes 24 columns. Only the time range changes.
transfers table, 24 columnsOne Parquet table with 24 columns: every native BNB and token transfer on BSC, one row each, with the amount, the token's details, the transaction it settled in and the fee. BNB moved by contracts in internal calls is included, and so are NFTs.
About 40.7 billion rows over 74 months, roughly 1.9 TB as Parquet, estimated from the sample files. The last 24 months hold about 27.7 billion rows and the last 12 months about 19.2 billion. Row counts come from the live table; exact figures arrive with the delivery manifest.
To the start of indexed history: from 29 August 2020, at block 363, the first block with a transfer. The Full window runs from there to yesterday.
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 allocation for one, so check native BNB balances rebuilt from these rows against the chain. Token balances hold, rebasing tokens aside.
Prices come from our own hourly BSC series, which has covered about 7,600 tokens over its life and about 1,800 in the last month. In the published sample 82% of rows have a USD value; the rest are zero-value rows and tokens with no market. A value of 0 means either a $0 transfer or no price; the column cannot tell them apart.
Decoded from BSC by our own indexer, which reads token transfer events and traces internal calls for BNB. Before release we read the sample back: 8,053 rows over blocks 77,611,000 to 77,611,049, every amount carrying exactly its token's decimals. The live table returns the same 8,053 rows for those blocks.
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.
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, 1.8% of the sample, move nothing, so drop them before counting activity. USDT on BSC has 18 decimals where Ethereum and TRON use 6, so check Transfer_Currency_Decimals before comparing amounts across chains.
Filter Transfer_Currency_SmartContract to the token's contract, lower case with 0x. For native BNB alone, filter Transfer_Currency_Native to true; its contract column holds the string 0x.
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 TRX, TRC-10 and TRC-20 transfer on TRON since June 2018, one row per transfer, valued in USD where a price exists.
Every native ETH and token transfer on Ethereum since August 2015, one row per transfer, valued in USD where a price exists.
Tell us the chain, tables and date range.