BitqueryBitqueryData Store
Solana logoSolanaLiquidityPools

Orca Whirlpool Liquidity Changes

Liquidity adds, removes and fee collections on Orca Whirlpool pools since October 2025, one row per instruction, USD-priced at block time.

Coverage
Oct 29, 2025→ Oct 12, 2026 · yesterday
Rows
≈4.9Mrows · estimate
Size
≈1.3 GBParquet · estimate
Table
1orca_whirlpool_liquidity_changes
Columns
64typed
Coverage ends yesterday, UTC

Overview

Orca Whirlpool Liquidity Changes holds the liquidity adds, removes and position fee collections on Orca Whirlpool (program whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc), cut from our Solana pools table so you do not have to load the swaps. Each row is one instruction that changed a pool's reserves: the pool, both tokens, the amount that moved on each side, the reserve left afterwards and the wallet that signed.

Group by Pool_Market_MarketAddress and Block_Date and sum the two change amounts to get net liquidity flow per pool and day. Amounts are decimal adjusted, and USD values use the price at block time when we have one for the token. Rows from failed transactions are kept, so filter on Transaction_Result_Success when you need changes that took effect.

Use cases

  • Net liquidity added and removed per pool and day
  • Liquidity drain alerts on new pools, from large removes by one wallet
  • LP wallet activity by signer, across pools
  • Reserve history after each liquidity change, without loading swaps

Table

64 columns · free sample for the table

orca_whirlpool_liquidity_changes

64 columns

One row per instruction that added liquidity, removed it or collected position fees, with the change and the resulting reserve for both tokens.

datashare/solana/orca_whirlpool_liquidity/dex_pools<start_slot>_<end_slot>.parquet
Browse columns Sample fileSample updated Oct 13, 2026

Schema reference

copies a column name
64 columns
ColumnTypeDescription
Block3
Block_DateDateUTC date of the block
Block_SlotUInt64Slot number of the block; delivered files are split by slot range
Block_TimeDateTimeBlock timestamp, UTC
Instruction7
Instruction_CallPathArrayInstruction_Index values of the parent instructions; empty on a top-level instruction
Instruction_ExternalSeqNumberUInt64Number of the top-level instruction this row falls under, counting from 1
Instruction_IndexUInt64Position of the instruction in the transaction, counting inner instructions
Instruction_InternalSeqNumberUInt64Position under its top-level instruction, counting from 1; 0 on a top-level instruction
Instruction_Program_AddressStringProgram that executed the instruction
Instruction_Program_MethodStringDecoded instruction name and the action taken, for example increaseLiquidityV2, decreaseLiquidity or collectFeesV2
Instruction_Program_NameStringDecoded program name
Pool_BaseCurrency6
Pool_BaseCurrency_ChangeAmountDecimalBase-token amount the event added to the pool (positive) or took out (negative), decimal adjusted
Pool_BaseCurrency_ChangeAmountInUSDFloat64Base-token change in USD; 0 when unpriced or when only the quote side was valued
Pool_BaseCurrency_PostAmountDecimalBase-token reserve left in the pool after the event, decimal adjusted
Pool_BaseCurrency_PostAmountInUSDFloat64Base-token reserve after the event, in USD; 0 when unpriced or when only the quote side was valued
Pool_BaseCurrency_PriceFloat64Quote-token reserve divided by base-token reserve after the event; a fair price only on constant-product pools
Pool_BaseCurrency_PriceInUSDFloat64Base-token USD price from the reserve ratio, so off on order books and concentrated liquidity; Pool_BaseCurrency_PostAmountInUSD ÷ Pool_BaseCurrency_PostAmount matches trade prices
Pool_Dex3
Pool_Dex_ProgramAddressStringProgram address of the DEX that owns the pool, base58; Orca Whirlpool's is whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc
Pool_Dex_ProtocolFamilyStringVenue family as indexed, which can span several programs; OrcaWhirpool for Orca Whirlpool
Pool_Dex_ProtocolNameStringProgram name and version as indexed; forks can share one, so pair it with the program address; whirlpool for Orca Whirlpool
Pool_Market31
Pool_Market_BaseCurrency_CollectionAddressStringNFT collection of the base asset; empty for fungible tokens
Pool_Market_BaseCurrency_DecimalsUInt64Decimal places of the base token, as its mint sets them
Pool_Market_BaseCurrency_EditionNonceUInt64Metaplex edition bump seed; a technical value, 0 when unset
Pool_Market_BaseCurrency_FungibleBoolWhether the base asset is fungible; false for NFTs
Pool_Market_BaseCurrency_MetadataAddressStringMetaplex metadata account of the base asset, when recorded
Pool_Market_BaseCurrency_MintAddressStringMint address of the base token and the key for joins; SOL shows as 11111111111111111111111111111111 (native) or So11111111111111111111111111111111111111112 (wrapped)
Pool_Market_BaseCurrency_NameStringName from the base token's metadata; lookalikes copy real names
Pool_Market_BaseCurrency_ProgramAddressStringProgram that owns the base mint, SPL Token or Token-2022, when recorded
Pool_Market_BaseCurrency_SellerFeeBasisPointsUInt64Creator royalty in basis points (100 = 1%); 0 for nearly all fungible coins
Pool_Market_BaseCurrency_SymbolStringTicker of the base token; not unique, so join on the mint address
Pool_Market_BaseCurrency_TokenCreators_AddressArrayCreator wallets from the base asset's metadata; often empty
Pool_Market_BaseCurrency_TokenStandardStringMetaplex standard, such as Fungible or FungibleAsset, when recorded
Pool_Market_BaseCurrency_UriStringLink to the base asset's off-chain metadata file, often on IPFS or Arweave
Pool_Market_BaseCurrency_UpdateAuthorityStringAccount that can change the base asset's metadata unless it is immutable; NativeLoader1111111111111111111111111111111 for SOL
Pool_Market_BaseCurrency_VerifiedCollectionBoolWhether the NFT collection is verified; false for fungible tokens
Pool_Market_MarketAddressStringAddress of the pool, bonding curve or order-book market
Pool_Market_QuoteCurrency_CollectionAddressStringNFT collection of the quote asset; empty for fungible tokens
Pool_Market_QuoteCurrency_DecimalsUInt64Decimal places of the quote token, as its mint sets them
Pool_Market_QuoteCurrency_EditionNonceUInt64Metaplex edition bump seed; a technical value, 0 when unset
Pool_Market_QuoteCurrency_FungibleBoolWhether the quote asset is fungible; false for NFTs
Pool_Market_QuoteCurrency_MetadataAddressStringMetaplex metadata account of the quote asset, when recorded
Pool_Market_QuoteCurrency_MintAddressStringMint address of the quote token and the key for joins; SOL shows as 11111111111111111111111111111111 (native) or So11111111111111111111111111111111111111112 (wrapped)
Pool_Market_QuoteCurrency_NameStringName from the quote token's metadata; lookalikes copy real names
Pool_Market_QuoteCurrency_ProgramAddressStringProgram that owns the quote mint, SPL Token or Token-2022, when recorded
Pool_Market_QuoteCurrency_SellerFeeBasisPointsUInt64Creator royalty in basis points (100 = 1%); 0 for nearly all fungible coins
Pool_Market_QuoteCurrency_SymbolStringTicker of the quote token; not unique, so join on the mint address
Pool_Market_QuoteCurrency_TokenCreators_AddressArrayCreator wallets from the quote asset's metadata; often empty
Pool_Market_QuoteCurrency_TokenStandardStringMetaplex standard, such as Fungible or FungibleAsset, when recorded
Pool_Market_QuoteCurrency_UriStringLink to the quote asset's off-chain metadata file, often on IPFS or Arweave
Pool_Market_QuoteCurrency_UpdateAuthorityStringAccount that can change the quote asset's metadata unless it is immutable; NativeLoader1111111111111111111111111111111 for SOL
Pool_Market_QuoteCurrency_VerifiedCollectionBoolWhether the NFT collection is verified; false for fungible tokens
Pool_QuoteCurrency6
Pool_QuoteCurrency_ChangeAmountDecimalQuote-token amount the event added to the pool (positive) or took out (negative), decimal adjusted
Pool_QuoteCurrency_ChangeAmountInUSDFloat64Quote-token change in USD; 0 when unpriced or when only the base side was valued
Pool_QuoteCurrency_PostAmountDecimalQuote-token reserve left in the pool after the event, decimal adjusted
Pool_QuoteCurrency_PostAmountInUSDFloat64Quote-token reserve after the event, in USD; 0 when unpriced or when only the base side was valued
Pool_QuoteCurrency_PriceFloat64Base-token reserve divided by quote-token reserve after the event; a fair price only on constant-product pools
Pool_QuoteCurrency_PriceInUSDFloat64Quote-token USD price from the reserve ratio, so off on order books and concentrated liquidity; Pool_QuoteCurrency_PostAmountInUSD ÷ Pool_QuoteCurrency_PostAmount matches trade prices
PoolEvent1
PoolEvent_IndexUInt64Position of the pool event within its instruction
Transaction7
Transaction_FeeDecimalNetwork fee paid, in SOL
Transaction_FeeInUSDFloat64Network fee, in USD
Transaction_FeePayerStringWallet that paid the network fee; Solana makes it the first signer
Transaction_IndexUInt64Position of the transaction within the block
Transaction_Result_SuccessBoolWhether the transaction succeeded
Transaction_SignatureStringTransaction signature, base58
Transaction_SignerStringWallet that signed the transaction and paid its fee
Sample file

Ask an AI about this data

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.

Start with

Opens a new chat with the question filled in. Nothing about you is sent to Bitquery, and the assistant sees only the public brief.

Delivery

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:

# orca_whirlpool_liquidity_changes
datashare/solana/orca_whirlpool_liquidity/dex_pools<start_slot>_<end_slot>.parquet
  1. Download a free sampleNo email needed.
  2. Pay nowName, work email and licence check.
  3. Pay the invoiceBy card or bank transfer.
  4. Download from S3 or R2The team prepares the export and emails the bucket path, plus a read-only API key for R2 orders.

Time windows

Every window includes 64 columns. Only the time range changes.

30 days
Latest month
Sep 12, 2026 → Oct 12, 2026
$50
Pay now
365 days
Last 12 months
Oct 12, 2025 → Oct 12, 2026
$500
Pay now
In every window
  • The orca_whirlpool_liquidity_changes table, 64 columns
  • Parquet files in the layout under Delivery
  • S3 or R2 download, chosen at checkout
  • Licensed under the Data License

FAQ

9 questions
What is included in Orca Whirlpool Liquidity Changes?

One Parquet table, orca_whirlpool_liquidity_changes, with 64 columns in the standard Solana pools schema. A row is one instruction on Orca Whirlpool whose method name contains the word liquidity or starts with collectFees. Data starts on 29 October 2025.

How big is it?

About 4,900,000 rows and 1.3 GB of ZSTD Parquet from 29 October 2025 to 1 October 2026. Both figures are estimates from four sampled days. On 1 October 2026 the table had 16,480 rows.

How do I tell an add from a remove?

Instruction_Program_Method names the action, for example increaseLiquidityV2, decreaseLiquidity or collectFeesV2. Pool_BaseCurrency_ChangeAmount and Pool_QuoteCurrency_ChangeAmount are positive when tokens enter the pool and negative when they leave.

What is left out?

Swaps and pool creations are left out. The table has no position account, tick or bin range, and no rows for opening or closing a position, because the pools table does not carry them. The V2 methods (increaseLiquidityV2, decreaseLiquidityV2, collectFeesV2) have no rows from about 8 June 2026 until a date between 15 August and 15 September 2026. The older method names are present throughout. Missing rows can be re-processed for an order, so ask before you buy if you need them.

How does this differ from the Orca Whirlpool dataset?

Orca Whirlpool has the swaps table and the full pools table, including a row for each swap's effect on the pool. This dataset is the liquidity rows of that pools table only, so it is smaller and costs less.

How are the USD values produced?

Each amount is multiplied by the token's USD price in the 10-minute window of the block. About 4,400 tokens have a price; others get 0. In the sample file 295 of 295 rows have at least one side priced. We checked the method against our published Meteora DLMM pools file for 1 June 2026 and the values matched.

How do I load it?

With DuckDB: SELECT Instruction_Program_Method, count(*) FROM read_parquet('dex_pools/*.parquet') GROUP BY 1. pandas, Polars, Spark and ClickHouse read the same files.

How is the data delivered?

As flat Parquet files under a stable layout, 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.

Can I try before I buy?

Yes. The table links to a public sample file with 295 real rows from 1 October 2026, slots 452,119,504 to 452,125,503. No email address required.