blocks
22 columnsOne row per Arbitrum One block, with the sequencer, gas, base fee and the trie roots.
arbitrum/blocks<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingArbitrum One since the Nitro upgrade of August 2022 as flat Parquet: blocks, transactions, internal calls, decoded events, transfers, DEX trades and sequencer fee rewards, at block resolution.
Seven flat Parquet tables covering Arbitrum One from the Nitro upgrade on 31 August 2022 (block 22,207,818) to yesterday, at block resolution: blocks, transactions, calls, events, transfers, dex_trades and miner_rewards. Every table carries Block_Number and Block_Time, and every table but blocks and miner_rewards carries Transaction_Hash, so they join without a lookup table.
The calls and events tables are the ones an archive node will not give you cheaply: each internal call frame with its decoded function signature, arguments and return values, gas and revert state, and each log with its decoded topic signature and the call frame that emitted it. Decoded arguments come as parallel arrays, one entry per argument, with the value typed in the column that matches its ABI type.
Arbitrum closes a block about every quarter second, so block numbers passed 500 million in 2026 and a 50-block file covers only seconds. Gas is paid in ETH, native rows in transfers carry the symbol ETH, and the S3 prefix is arbitrum/.
One row per Arbitrum One block, with the sequencer, gas, base fee and the trie roots.
arbitrum/blocks<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingOne row per Arbitrum One transaction, with the fee breakdown, receipt status, call count and outcome.
arbitrum/transactions<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingOne row per call frame, internal calls included, with decoded signature, arguments and return values, gas and revert state.
arbitrum/calls<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingOne row per log, with the decoded event signature, topics, raw data and the call frame that emitted it.
arbitrum/events<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingOne row per native ETH or token transfer on Arbitrum One, with sender, receiver, token metadata and a USD value where a price exists.
arbitrum/transfers<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingOne row per DEX swap on Arbitrum One, with both sides, pool and protocol, fees, transaction details and a USD value where a price exists.
arbitrum/dex_trades<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingOne row per block, splitting the sequencer's take into static, dynamic, transaction-fee and burnt components. Complete from 8 May 2026 (block 460,491,246).
arbitrum/miner_rewards<start_block>_<end_block>.parquet50 blocks per file, sorted ascendingblocks22 columnsOne row per Arbitrum One block, with the sequencer, gas, base fee and the trie roots.transactions40 columnsOne row per Arbitrum One transaction, with the fee breakdown, receipt status, call count and outcome.calls65 columnsOne row per call frame, internal calls included, with decoded signature, arguments and return values, gas and revert state.events63 columnsOne row per log, with the decoded event signature, topics, raw data and the call frame that emitted it.transfers24 columnsOne row per native ETH or token transfer on Arbitrum One, with sender, receiver, token metadata and a USD value where a price exists.dex_trades54 columnsOne row per DEX swap on Arbitrum One, with both sides, pool and protocol, fees, transaction details and a USD value where a price exists.miner_rewards27 columnsOne row per block, splitting the sequencer's take into static, dynamic, transaction-fee and burnt components. Complete from 8 May 2026 (block 460,491,246).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.
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:
# blocks: 50 blocks per file, sorted ascending arbitrum/blocks<start_block>_<end_block>.parquet # transactions: 50 blocks per file, sorted ascending arbitrum/transactions<start_block>_<end_block>.parquet # calls: 50 blocks per file, sorted ascending arbitrum/calls<start_block>_<end_block>.parquet # events: 50 blocks per file, sorted ascending arbitrum/events<start_block>_<end_block>.parquet # transfers: 50 blocks per file, sorted ascending arbitrum/transfers<start_block>_<end_block>.parquet # dex_trades: 50 blocks per file, sorted ascending arbitrum/dex_trades<start_block>_<end_block>.parquet # miner_rewards: 50 blocks per file, sorted ascending arbitrum/miner_rewards<start_block>_<end_block>.parquet
Every window includes all 7 tables and 295 columns. Only the time range changes.
Seven Parquet tables with 295 documented columns in total: blocks (22), transactions (40), calls (65), events (63), transfers (24), dex_trades (54) and miner_rewards (27). Each purchase covers the window you choose, through to yesterday, refreshed daily. The Full tier starts at the Nitro upgrade on 31 August 2022 (block 22,207,818) for six tables; miner_rewards starts on 8 May 2026 (block 460,491,246).
To block 22,207,818 on 31 August 2022, the day the Nitro upgrade went live. Arbitrum Classic, the chain's history from May 2021 until Nitro, is not in our index. User transfers and trades start at about 16:08 UTC that day.
The largest tier by a wide margin, and calls and events dominate it; both carry several rows per transaction, where transfers and dex_trades carry one per movement. We size it per table before delivery and send you the exact figures with the manifest, so you can plan storage before downloading. If calls and events are more than you need, we can quote the other five tables on their own.
On Transaction_Hash, which appears in every table except blocks and miner_rewards; those join on Block_Number. Within a transaction, Call_Index orders the call frames, Log_Index orders the logs, Transfer_Index orders the transfers and Trade_Index orders the swaps. A log points back to the frame that emitted it through Call_Index.
Balance updates. The chain-wide balance_updates table exists in our store but is not part of this bundle, because it carries several rows per transfer and would dominate the size. If you need it, ask and we will quote it alongside this one.
As parallel arrays rather than one JSON column: element i of Arguments_Type_Name, Arguments_Type_Type and the Arguments_Value_* columns all describe argument i. Each value sits in the column matching its ABI type, addresses and bytes in Arguments_Value_Bytes as hex, small integers in Arguments_Value_UInt or Arguments_Value_Int, and every value also rendered in Arguments_Value_String. The Arguments_Path_* arrays give the member path for struct and array arguments. In calls, the Returns_* columns follow the same layout for return values.
Arbitrum closes a block about every 250 milliseconds, and sometimes several per second, so the chain passed 500 million blocks in 2026. Files are still cut every 50 blocks, which here means a file spans seconds; a one-month window is tens of thousands of files per table. The manifest lists them all, and the files sort by block number.
The fee columns carry what the execution layer records for the transaction: gas used, effective gas price, base fee and priority fee, in ETH and USD. The separate L1 posting cost that Arbitrum folds into its gas price is not broken out as its own column. If you need it, ask and we will scope it.
No. Arbitrum One has a single sequencer and produces no uncle blocks, so Block_UnclesCount is 0 on every block, Block_UncleHash is the empty-list hash, and Reward_Uncle, Uncle_Block_Number and Uncle_Index in miner_rewards are 0 throughout. The columns exist because the schema is shared with chains that do have uncles; they are kept so a query written against one EVM chain runs unchanged here.
Every venue we decode on Arbitrum One, in one table, identified by Trade_Dex_ProtocolFamily and Trade_Dex_ProtocolName on each row. In the sample window the families present were Uniswap and PancakeSwap. Filter the family column to keep or drop a venue.
Only currencies with an hourly price series are valued, and the dataset says so rather than filling the gap: a USD value of 0 means either a zero-value row or no price, and the column cannot tell the two apart. DEX trades are priced from the safer side of the swap, so most swaps with a stablecoin or ETH on one side carry a value; transfers of long-tail and spam tokens mostly do not.
Yes, throughout, and the export applies no filter of its own. TransactionStatus_Success carries the transaction's outcome on every table that has it, and dex_trades additionally carries Trade_Success, because a single swap can fail inside a transaction that succeeded. Spam tokens, zero-value rows and lookalike contracts are all kept too; the columns let you drop what you do not want.
Filter Call_To in calls and Log_SmartContract in events to the contract, lower case with 0x. For token flow, filter Transfer_Currency_SmartContract in transfers. Join on contract addresses rather than symbols or names; both repeat, and lookalike tokens copy them deliberately.
Amounts are decimal-adjusted decimal strings, carrying exactly as many places as the token has decimals; multiply by ten to the power of the decimals for the raw on-chain integer. Casting to float loses precision on large values. Boolean flags are the strings true and false; only the Arguments_Value_Bool and Returns_Value_Bool arrays use 0 and 1, one entry per decoded argument.
One line in DuckDB: SELECT * FROM read_parquet('transfers/*.parquet') LIMIT 10. Pandas works too: pandas.read_parquet(path). The sample files open without credentials.
As flat Parquet named by block range, 50 blocks per file and sorted ascending, one prefix per table, 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. Refreshed daily with T+1 latency, so a purchase made today includes everything to yesterday.
Yes. Each table links to a public sample file with real records, and the sample bucket holds full Parquet files you can load directly. No email address required.
Every swap and every pool event across every indexed DEX program on Solana, in one schema, decoded and USD-priced at block time.
Polymarket fills, position splits, merges and payouts, and market results on Polygon since September 2025, with market titles, outcomes and USD values.
Every bonding-curve trade, token creation, migration and pool on Pump.fun, plus per-token OHLCV, decoded and USD-priced.
Tell us the chain, tables and date range.