# XRP Ledger | Bitquery Data Store The whole XRP Ledger as flat Parquet: transactions, transfers, payments, DEX and NFT offers, trust lines, escrows, checks and balance changes, at ledger resolution. Dataset page: https://bitquery.io/datastore/datasets/ripple Network: Ripple Category: Transactions, Transfers, Trades, Balances Tables: 10 Columns: 256 Coverage: first block to 2026-09-27 Format: Apache Parquet, ZSTD compression, one prefix per table Licence: https://bitquery.io/datastore/legal/data-license ## What this is 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. ## What people use it for - Cross-border payment flow analysis on the ledger built for settlement - Issued-token and stablecoin tracking across trust lines and issuers - XRPL DEX order-book research from offer creation to fill - Compliance and forensics: tracing funds between accounts with destination tags ## Tables (10) ### transactions_tx: 18 columns One row per XRP Ledger transaction, successful or failed, with type, fee, sequence and engine result. S3 prefix: ripple/transactions_tx File naming: _.parquet, 50 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/transactions_tx/93154950_93154999.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | blockchain_id | UInt64 | Internal chain identifier; 12 for XRP Ledger | | tx_sender | String | Account that submitted the transaction | | tx_type | String | XRPL transaction type, for example Payment, OfferCreate, TrustSet | | fee | String | Fee paid, as a STRING in drops. Divide by 1,000,000 for XRP | | memos | String | Attached memo field, empty when unused | | tx_signers | String | Multi-signature signers, empty for single-signed transactions | | source_tag | UInt64 | Sender-side tag, commonly used by exchanges to identify a customer | | account_txn_id | String | Hash of a prior transaction this one is chained to, when set | | sequence | UInt64 | Sender account sequence number | | last_ledger_sequence | UInt64 | Last ledger index at which the transaction could be included | | flags | UInt64 | Transaction flags bitfield | | result | String | XRPL engine result code, for example tesSUCCESS or tecUNFUNDED_PAYMENT | | success | UInt8 | 1 when result is tesSUCCESS. Filter on this to exclude failed transactions | ### payments_tx: 40 columns One row per Payment transaction, with the requested, delivered, maximum-send and minimum-deliver amounts and their currencies. S3 prefix: ripple/payments_tx File naming: _.parquet, 50 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/payments_tx/93154950_93154999.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | blockchain_id | UInt64 | Internal chain identifier; 12 for XRP Ledger | | sender | String | Paying account | | receiver | String | Destination account | | amount_currency_id | UInt64 | Internal currency id of the requested amount | | amount_currency_address | String | Currency address of the requested amount; '-' for XRPL currencies | | amount_currency_name | String | Currency name of the requested amount; 40-char hex for issued codes over 3 characters | | amount_currency_symbol | String | Currency symbol of the requested amount | | amount_currency_token_type | String | Token type of the requested amount, for example issued; '-' for native XRP | | amount_value | Float64 | Requested amount. A CEILING, not what moved — do not sum this for volume, use delivered_value | | amount_issuer | String | Issuer of the requested currency, empty for native XRP | | delivered_currency_id | UInt64 | Internal currency id of the delivered amount | | delivered_currency_address | String | Currency address of the delivered amount | | delivered_currency_name | String | Currency name of the delivered amount | | delivered_currency_symbol | String | Currency symbol of the delivered amount | | delivered_currency_token_type | String | Token type of the delivered amount | | delivered_value | Float64 | Amount actually delivered. THIS is the column to sum for payment volume | | delivered_issuer | String | Issuer of the delivered currency, empty for native XRP | | send_max_currency_id | UInt64 | Internal currency id of the SendMax limit | | send_max_currency_address | String | Currency address of the SendMax limit | | send_max_currency_name | String | Currency name of the SendMax limit | | send_max_currency_symbol | String | Currency symbol of the SendMax limit | | send_max_currency_token_type | String | Token type of the SendMax limit | | send_max_value | Float64 | Maximum the sender was willing to pay, including cross-currency conversion | | send_max_issuer | String | Issuer of the SendMax currency | | deliver_min_currency_id | UInt64 | Internal currency id of the DeliverMin floor | | deliver_min_currency_address | String | Currency address of the DeliverMin floor | | deliver_min_currency_name | String | Currency name of the DeliverMin floor | | deliver_min_currency_symbol | String | Currency symbol of the DeliverMin floor | | deliver_min_currency_token_type | String | Token type of the DeliverMin floor | | deliver_min_value | Float64 | Minimum the sender would accept delivering, on a partial payment | | deliver_min_issuer | String | Issuer of the DeliverMin currency | | tag | UInt64 | Destination tag, used by exchanges to route to a customer account | | invoice | String | Invoice identifier attached to the payment, when set | | flags | UInt64 | Payment flags bitfield; 131072 is tfPartialPayment | | partial | UInt8 | 1 when the payment was a partial payment, where amount_value overstates what moved | ### transfers_tx: 25 columns One row per value movement, with the from and to currency and amount. A single transaction produces several rows, classified by direction. S3 prefix: ripple/transfers_tx File naming: _.parquet, 50 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/transfers_tx/93155850_93155899.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | currency_from_address | String | Source currency address; '-' for XRPL currencies | | currency_from_id | UInt64 | Internal id of the source currency | | currency_from_name | String | Source currency name; 40-char hex for issued codes over 3 characters | | currency_from_symbol | String | Source currency symbol | | currency_from_tokenType | String | Source token type, for example issued or nft; '-' for native XRP | | currency_to_address | String | Destination currency address | | currency_to_id | UInt64 | Internal id of the destination currency | | currency_to_name | String | Destination currency name | | currency_to_symbol | String | Destination currency symbol | | currency_to_tokenType | String | Destination token type | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | sender | String | Account value moved from, for this row | | receiver | String | Account value moved to; empty on burns and fee rows | | direction | String | Row classification: payment, fee, trade, nft_trade, mint or other. Filter on this before aggregating | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | tx_hash_bin | String | Binary form of the transaction hash | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_sender_raw | String | Account that submitted the transaction, as recorded on the transaction | | tx_type_raw | String | XRPL transaction type, as recorded on the transaction | | transaction_type | String | Normalised transaction type | | transaction_sender | String | Normalised submitting account | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | amount_from | Float64 | Amount leaving, in source currency units | | amount_to | Float64 | Amount arriving, in destination currency units | ### offers_tx: 31 columns One row per XRPL DEX offer object change, with taker-gets and taker-pays sides before and after the change. S3 prefix: ripple/offers_tx File naming: _.parquet, 50 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/offers_tx/93154950_93154999.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | blockchain_id | UInt64 | Internal chain identifier; 12 for XRP Ledger | | tx_sender | String | Account that submitted the transaction | | tx_type | String | XRPL transaction type, for example OfferCreate or OfferCancel | | operation | String | AffectedNodes change type: CreatedNode, ModifiedNode or DeletedNode | | account | String | Account that owns the offer | | taker_gets_currency_id | UInt64 | Internal currency id of what the taker receives | | taker_gets_currency_address | String | Currency address of what the taker receives | | taker_gets_currency_name | String | Currency name of what the taker receives | | taker_gets_currency_symbol | String | Currency symbol of what the taker receives | | taker_gets_currency_token_type | String | Token type of what the taker receives | | taker_pays_currency_id | UInt64 | Internal currency id of what the taker pays | | taker_pays_currency_address | String | Currency address of what the taker pays | | taker_pays_currency_name | String | Currency name of what the taker pays | | taker_pays_currency_symbol | String | Currency symbol of what the taker pays | | taker_pays_currency_token_type | String | Token type of what the taker pays | | taker_gets_value | Float64 | Amount the taker receives, after this change | | taker_pays_value | Float64 | Amount the taker pays, after this change | | pre_taker_gets_value | Float64 | taker_gets before this change. Difference against taker_gets_value sizes the fill | | pre_taker_pays_value | Float64 | taker_pays before this change | | book_directory | String | Order book directory the offer sits in, encoding the exchange rate | | book_node | String | Node within the order book directory | | expiration | UInt64 | Offer expiry, Ripple epoch seconds; add 946684800 for Unix time | | sequence | UInt64 | Sequence number of the transaction that created the offer | | prev_txn_id | String | Hash of the previous transaction to touch this offer object | | prev_ledger_seq | UInt64 | Ledger index of the previous change to this offer object | | flags | UInt64 | Offer flags bitfield | ### nftoken_offers_tx: 32 columns One row per NFT offer object change, with the NFT, the price currency and which side of the offer is set. S3 prefix: ripple/nftoken_offers_tx File naming: _.parquet, 200 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/nftoken_offers_tx/93154950_93155149.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | blockchain_id | UInt64 | Internal chain identifier; 12 for XRP Ledger | | tx_sender | String | Account that submitted the transaction | | tx_type | String | XRPL transaction type, for example NFTokenCreateOffer or NFTokenAcceptOffer | | operation | String | AffectedNodes change type: CreatedNode, ModifiedNode or DeletedNode | | from_account | String | Account that created the offer | | destination_account | String | Account the offer is directed to, when the offer is private | | nftoken_sell_offer | String | Sell-offer identifier. Check which of this and nftoken_buy_offer is set to tell the sides apart | | nftoken_buy_offer | String | Buy-offer identifier | | nftoken_currency_id | UInt64 | Internal currency id of the NFT | | nftoken_currency_address | String | NFT currency address | | nftoken_currency_name | String | NFTokenID, the 64-character hex identifier of the token | | nftoken_currency_symbol | String | NFT symbol, the same NFTokenID | | nftoken_currency_token_type | String | Token type; nft | | nftoken_value | Float64 | Quantity of the NFT, normally 1 | | currency_id | UInt64 | Internal currency id the offer is priced in | | currency_address | String | Address of the pricing currency | | currency_name | String | Name of the pricing currency | | currency_symbol | String | Symbol of the pricing currency | | currency_token_type | String | Token type of the pricing currency | | value | Float64 | Offer price in the pricing currency | | book_directory | String | Offer book directory | | book_node | String | Node within the offer book directory | | expiration | UInt64 | Offer expiry, Ripple epoch seconds; add 946684800 for Unix time | | sequence | UInt64 | Sequence number of the creating transaction | | prev_txn_id | String | Hash of the previous transaction to touch this offer object | | prev_ledger_seq | UInt64 | Ledger index of the previous change to this offer object | | flags | UInt64 | Offer flags bitfield | ### ripple_states_tx: 21 columns One row per trust-line change, with the two counterparties and the signed balance between them. S3 prefix: ripple/ripple_states_tx File naming: _.parquet, 50 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/ripple_states_tx/93154950_93154999.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | blockchain_id | UInt64 | Internal chain identifier; 12 for XRP Ledger | | tx_sender | String | Account that submitted the transaction | | tx_type | String | XRPL transaction type that changed the trust line | | operation | String | AffectedNodes change type: CreatedNode, ModifiedNode or DeletedNode | | low_account | String | Numerically lower of the two accounts on the trust line | | high_account | String | Numerically higher of the two accounts on the trust line | | currency_id | UInt64 | Internal currency id of the issued asset | | currency_address | String | Currency address of the issued asset | | currency_name | String | Currency name; 40-char hex for issued codes over 3 characters | | currency_symbol | String | Currency symbol of the issued asset | | currency_token_type | String | Token type; issued | | balance | Float64 | Trust-line balance after the change, SIGNED from low_account's perspective: positive means low_account holds the asset | | pre_balance | Float64 | Trust-line balance before the change, same sign convention | | prev_txn_id | String | Hash of the previous transaction to touch this trust line | | prev_ledger_seq | UInt64 | Ledger index of the previous change to this trust line | | flags | UInt64 | Trust-line flags bitfield, including no-ripple and freeze settings | ### escrows_tx: 25 columns One row per escrow object change, with the amount held, the release conditions and the Ripple-epoch timestamps. S3 prefix: ripple/escrows_tx File naming: _.parquet, 200 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/escrows_tx/93154950_93155149.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | blockchain_id | UInt64 | Internal chain identifier; 12 for XRP Ledger | | tx_sender | String | Account that submitted the transaction | | tx_type | String | XRPL transaction type: EscrowCreate, EscrowFinish or EscrowCancel | | operation | String | AffectedNodes change type: CreatedNode, ModifiedNode or DeletedNode | | account | String | Account that created the escrow | | destination | String | Account the escrowed funds are released to | | currency_id | UInt64 | Internal currency id of the escrowed asset | | currency_address | String | Currency address of the escrowed asset | | currency_name | String | Currency name of the escrowed asset | | currency_symbol | String | Currency symbol of the escrowed asset | | currency_token_type | String | Token type of the escrowed asset | | amount | Float64 | Amount held in escrow | | condition | String | PREIMAGE-SHA-256 crypto-condition that must be fulfilled to release, when set | | cancel_after | UInt64 | Cancellable after this time, RIPPLE EPOCH seconds; add 946684800 for Unix time | | finish_after | UInt64 | Releasable after this time, RIPPLE EPOCH seconds; add 946684800 for Unix time | | source_tag | UInt64 | Sender-side tag | | destination_tag | UInt64 | Destination-side tag | | prev_txn_id | String | Hash of the previous transaction to touch this escrow object | | prev_ledger_seq | UInt64 | Ledger index of the previous change to this escrow object | | flags | UInt64 | Escrow flags bitfield | ### checks_tx: 25 columns One row per check object change, with the maximum amount, expiry and tags. Checks are rare on XRPL. S3 prefix: ripple/checks_tx File naming: _.parquet, 200 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/checks_tx/93154950_93155149.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | blockchain_id | UInt64 | Internal chain identifier; 12 for XRP Ledger | | tx_sender | String | Account that submitted the transaction | | tx_type | String | XRPL transaction type: CheckCreate, CheckCash or CheckCancel | | operation | String | AffectedNodes change type: CreatedNode, ModifiedNode or DeletedNode | | account | String | Account that wrote the check | | destination | String | Account the check is payable to | | currency_id | UInt64 | Internal currency id of the check amount | | currency_address | String | Currency address of the check amount | | currency_name | String | Currency name of the check amount | | currency_symbol | String | Currency symbol of the check amount | | currency_token_type | String | Token type of the check amount | | send_max | Float64 | Maximum amount the check can be cashed for | | expiration | UInt64 | Check expiry, Ripple epoch seconds; add 946684800 for Unix time | | invoice_id | String | Invoice identifier attached to the check, when set | | source_tag | UInt64 | Sender-side tag | | destination_tag | UInt64 | Destination-side tag | | sequence | UInt64 | Sequence number of the creating transaction | | prev_txn_id | String | Hash of the previous transaction to touch this check object | | prev_ledger_seq | UInt64 | Ledger index of the previous change to this check object | | flags | UInt64 | Check flags bitfield | ### account_roots_tx: 19 columns One row per account-root change: the XRP balance, owner count and account settings after each transaction that touched the account. S3 prefix: ripple/account_roots_tx File naming: _.parquet, 50 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/account_roots_tx/93154950_93154999.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | blockchain_id | UInt64 | Internal chain identifier; 12 for XRP Ledger | | tx_sender | String | Account that submitted the transaction | | tx_type | String | XRPL transaction type that changed the account root | | operation | String | AffectedNodes change type: CreatedNode, ModifiedNode or DeletedNode | | account | String | The account whose root object changed | | prev_balance | String | XRP balance before the change, as a STRING in drops. Divide by 1,000,000 for XRP | | balance | String | XRP balance after the change, as a STRING in drops. Divide by 1,000,000 for XRP | | domain | String | Domain set on the account, hex-encoded when present | | owner_count | UInt64 | Number of ledger objects the account owns, which sets its reserve requirement | | transfer_rate | UInt64 | Fee an issuer charges on transfers of its tokens; 0 when unset | | sequence | UInt64 | Account sequence number | | prev_txn_id | String | Hash of the previous transaction to touch this account root | | prev_ledger_seq | UInt64 | Ledger index of the previous change to this account root | | flags | UInt64 | Account flags bitfield, including RequireDest, DisallowXRP and DefaultRipple | ### balances: 20 columns One row per balance change, for native XRP and issued currencies alike, with the value before and after in XRP units. S3 prefix: ripple/balances File naming: _.parquet, 50 ledgers per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/ripple/balances/93154950_93154999.parquet | column | type | description | | --- | --- | --- | | block | UInt64 | XRP Ledger ledger index | | tx_date | Int64 | UTC date of the ledger, Unix epoch milliseconds | | tx_time | Int64 | Ledger close time, Unix epoch seconds | | tx_index | UInt64 | Position of the transaction within the ledger | | tx_hash | String | Transaction hash, hex. Join key across every ripple table | | blockchain_id | UInt64 | Internal chain identifier; 12 for XRP Ledger | | tx_sender | String | Account that submitted the transaction | | tx_type | String | XRPL transaction type that caused the balance change | | operation | String | AffectedNodes change type: CreatedNode, ModifiedNode or DeletedNode | | account | String | Account whose balance changed | | currency_id | UInt64 | Internal currency id | | currency_address | String | Currency address; '-' for XRPL currencies | | currency_name | String | Currency name; 'XRP Ledger Native Token' for XRP | | currency_symbol | String | Currency symbol; 40-char hex for issued codes over 3 characters | | currency_token_type | String | Token type; issued, or '-' for native XRP | | issuer | String | Issuing account for an issued currency, empty for native XRP | | prev_balance | Float64 | Balance before the change, in XRP units (not drops) | | balance | Float64 | Balance after the change, in XRP units (not drops) | | prev_ledger_seq | UInt64 | Ledger index of the previous change to this balance | | flags | UInt64 | Flags bitfield on the underlying ledger object | ## Price - Latest month (Aug 27, 2026 → Sep 27, 2026): $600 one-time, USD - Last 12 months (Sep 27, 2025 → Sep 27, 2026): $6,000 one-time, USD - Last 24 months (Sep 27, 2024 → Sep 27, 2026): $8,000 one-time, USD - Full history (Genesis → Sep 27, 2026): $10,000 one-time, USD Every window includes all 10 tables and 256 columns. Only the time range changes. ## Questions buyers ask Q: What is included in the XRP Ledger dataset? A: 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. Q: Which column should I sum for payment volume? A: 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. Q: Does the data include failed transactions? A: 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. Q: Why are some currency symbols 40-character hex strings? A: 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. Q: Are balances in XRP or drops? A: 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. Q: How do I read trust-line balances? A: 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. Q: Why does one transaction produce several rows in transfers_tx? A: 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. Q: How do I size a DEX fill? A: 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. Q: What timestamp format do escrows use? A: 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. Q: How is the data delivered? A: 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. Q: How current is the data? A: Refreshed daily with T+1 latency. A purchase made today includes everything up to yesterday. Q: Can I try before I buy? A: 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. ## What this file is, and is not This is a description of one dataset sold by Bitquery, written for assistants and for people. It lists every column but holds no data rows. The sample files linked under each table are real Parquet and are free to download. Figures here come from the product record and are exact unless marked otherwise; the delivery manifest is authoritative for a purchased file. If a question needs a row that is not in a sample, say so rather than guessing at it.