Measured sizes
The same rows, from real responses:
The fields are those of Estimating costs.
JSON doubles every binary byte (hex) and adds the column names to every row. Because you’re
billed by the bytes you receive, the same data costs 2–2.5× more
as JSON.
Use Arrow when
- You’re reading more than a few thousand rows, or running the same query repeatedly.
- The data goes into a dataframe, a database or a file: pandas, Polars, DuckDB, Spark, ClickHouse and BigQuery all read Arrow without conversion.
- You want typed columns:
UInt64block numbers, fixed-size binary hashes and addresses, nested lists of structs.
Use JSON when
- You’re exploring with
curlandjq. - You’re debugging a filter and want to read the rows.
- The script is tiny, and adding an Arrow library isn’t worth it.
What’s the same
- The request body, the filters, the fields and the validation.
- Which rows come back and in what order.
- Pagination: both return
next_blockand stop at the same kinds of limits. - The metadata values (
archive_height,finalized_block,next_block, …). Arrow puts them in the schema metadata asbl.*strings; JSON puts them in the body as numbers. See Response metadata.