transactions_tx
18 columnsOne row per XRP Ledger transaction, successful or failed, with type, fee, sequence and engine result.
ripple/transactions_tx<start_ledger>_<end_ledger>.parquet50 ledgers per fileThe whole XRP Ledger as flat Parquet: transactions, transfers, payments, DEX and NFT offers, trust lines, escrows, checks and balance changes, at ledger resolution.
Every indexed XRP Ledger topic, as ten flat Parquet tables at ledger resolution: transactions, transfers, payments, DEX offers, NFT offers, trust lines (ripple states), escrows, checks, account roots and balance changes.
Each table is one row per ledger object change, carrying the transaction hash, the ledger index, the account and the currency involved. Every table joins to every other on tx_hash, so a payment can be tied to the balance changes, trust-line movements and offer fills it caused in the same transaction.
XRPL has settlement semantics that differ from account-based chains, and the schema exposes them rather than hiding them: partial payments, signed trust-line balances, drops-versus-XRP units and the Ripple epoch all appear as they are on the ledger. The FAQ below documents each one, because getting them wrong silently corrupts a volume number.
One row per XRP Ledger transaction, successful or failed, with type, fee, sequence and engine result.
ripple/transactions_tx<start_ledger>_<end_ledger>.parquet50 ledgers per fileOne row per Payment transaction, with the requested, delivered, maximum-send and minimum-deliver amounts and their currencies.
ripple/payments_tx<start_ledger>_<end_ledger>.parquet50 ledgers per fileOne row per value movement, with the from and to currency and amount. A single transaction produces several rows, classified by direction.
ripple/transfers_tx<start_ledger>_<end_ledger>.parquet50 ledgers per fileOne row per XRPL DEX offer object change, with taker-gets and taker-pays sides before and after the change.
ripple/offers_tx<start_ledger>_<end_ledger>.parquet50 ledgers per fileOne row per NFT offer object change, with the NFT, the price currency and which side of the offer is set.
ripple/nftoken_offers_tx<start_ledger>_<end_ledger>.parquet200 ledgers per fileOne row per trust-line change, with the two counterparties and the signed balance between them.
ripple/ripple_states_tx<start_ledger>_<end_ledger>.parquet50 ledgers per fileOne row per escrow object change, with the amount held, the release conditions and the Ripple-epoch timestamps.
ripple/escrows_tx<start_ledger>_<end_ledger>.parquet200 ledgers per fileOne row per check object change, with the maximum amount, expiry and tags. Checks are rare on XRPL.
ripple/checks_tx<start_ledger>_<end_ledger>.parquet200 ledgers per fileOne row per account-root change: the XRP balance, owner count and account settings after each transaction that touched the account.
ripple/account_roots_tx<start_ledger>_<end_ledger>.parquet50 ledgers per fileOne row per balance change, for native XRP and issued currencies alike, with the value before and after in XRP units.
ripple/balances<start_ledger>_<end_ledger>.parquet50 ledgers per filetransactions_tx18 columnsOne row per XRP Ledger transaction, successful or failed, with type, fee, sequence and engine result.payments_tx40 columnsOne row per Payment transaction, with the requested, delivered, maximum-send and minimum-deliver amounts and their currencies.transfers_tx25 columnsOne row per value movement, with the from and to currency and amount. A single transaction produces several rows, classified by direction.offers_tx31 columnsOne row per XRPL DEX offer object change, with taker-gets and taker-pays sides before and after the change.nftoken_offers_tx32 columnsOne row per NFT offer object change, with the NFT, the price currency and which side of the offer is set.ripple_states_tx21 columnsOne row per trust-line change, with the two counterparties and the signed balance between them.escrows_tx25 columnsOne row per escrow object change, with the amount held, the release conditions and the Ripple-epoch timestamps.checks_tx25 columnsOne row per check object change, with the maximum amount, expiry and tags. Checks are rare on XRPL.account_roots_tx19 columnsOne row per account-root change: the XRP balance, owner count and account settings after each transaction that touched the account.balances20 columnsOne row per balance change, for native XRP and issued currencies alike, with the value before and after in XRP units.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, delivered as signed download links by email after payment, in this layout:
# transactions_tx: 50 ledgers per file ripple/transactions_tx<start_ledger>_<end_ledger>.parquet # payments_tx: 50 ledgers per file ripple/payments_tx<start_ledger>_<end_ledger>.parquet # transfers_tx: 50 ledgers per file ripple/transfers_tx<start_ledger>_<end_ledger>.parquet # offers_tx: 50 ledgers per file ripple/offers_tx<start_ledger>_<end_ledger>.parquet # nftoken_offers_tx: 200 ledgers per file ripple/nftoken_offers_tx<start_ledger>_<end_ledger>.parquet # ripple_states_tx: 50 ledgers per file ripple/ripple_states_tx<start_ledger>_<end_ledger>.parquet # escrows_tx: 200 ledgers per file ripple/escrows_tx<start_ledger>_<end_ledger>.parquet # checks_tx: 200 ledgers per file ripple/checks_tx<start_ledger>_<end_ledger>.parquet # account_roots_tx: 50 ledgers per file ripple/account_roots_tx<start_ledger>_<end_ledger>.parquet # balances: 50 ledgers per file ripple/balances<start_ledger>_<end_ledger>.parquet
Every window includes all 10 tables and 256 columns. Only the time range changes.
Ten Parquet tables with 256 documented columns in total: transactions_tx, transfers_tx, payments_tx, offers_tx, nftoken_offers_tx, ripple_states_tx, escrows_tx, checks_tx, account_roots_tx and balances. Covering the most recent month to yesterday, refreshed daily.
delivered_value, never amount_value. On XRPL a partial payment sets amount_value as a requested ceiling rather than what moved, and delivers less. Summing amount_value overstates native XRP volume by roughly 27,000,000x on real data. The partial column flags those rows. This is the single most common way an XRPL volume figure goes wrong.
Yes, deliberately — failures are signal for fee and congestion analysis. transactions_tx carries result (the XRPL engine code) and success. Filter success = 1, equivalent to result = 'tesSUCCESS', for settled activity only.
XRPL encodes issued-currency codes longer than three characters as 40-character hex. For example 4D656F7752500000000000000000000000000000 decodes to MeowRP. Three-character codes such as XRP or ELS appear as-is. Decode hex to ASCII and strip trailing nulls to get the display symbol.
It depends on the table, and the difference matters. account_roots_tx stores balance and prev_balance as strings in drops — divide by 1,000,000 for XRP. The balances table stores them as floats already in XRP. The fee column in transactions_tx is also a string in drops. We kept each table faithful to its source rather than silently converting.
In ripple_states_tx the balance is signed from low_account's perspective: positive means low_account holds the asset, negative means high_account does. Take the absolute value and pick the holder by sign before aggregating issued-token supply.
Because one XRPL transaction can move value several ways. The direction column classifies each row as payment, fee, trade, nft_trade, mint or other. Filter on it rather than assuming one row per transaction, and note that fee rows will double-count if you add them to payment volume.
offers_tx carries both the current and prior state: compare pre_taker_gets_value and pre_taker_pays_value with taker_gets_value and taker_pays_value. DeletedNode rows keep the offer's final state rather than being zeroed, so a consumed offer still tells you what it was worth.
finish_after and cancel_after use the Ripple epoch, which starts 2000-01-01Z. Add 946684800 to convert to Unix time. Every other time column in the dataset is already Unix: tx_time in seconds, tx_date in milliseconds.
As flat Parquet files under a stable S3 layout, one prefix per table, with a JSON manifest listing every file and its sha256. Signed HTTPS links are emailed to you once the files are prepared.
Refreshed daily with T+1 latency. A purchase made today includes everything up to yesterday.
Yes. Every 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.