# Uniswap V4 Liquidity on Polygon | Bitquery Data Store Decoded Uniswap V4 liquidity events on Polygon since January 2025: Initialize, ModifyLiquidity and Donate, one row per event, in the standard events schema. Dataset page: https://bitquery.io/datastore/datasets/polygon-uniswap-v4-liquidity Network: Polygon Category: Liquidity, Pools, Events Tables: 1 Columns: 44 Coverage: 2025-01-31 to 2026-10-14 Rows: about 2.0M Size: about 434 MB Format: Apache Parquet, ZSTD compression, one prefix per table Licence: https://bitquery.io/datastore/legal/data-license ## What this is We decode Uniswap V4 liquidity from Polygon's event logs ourselves and keep only the events emitted by the Uniswap V4 PoolManager (0x67366782805870060151383f4bbff9dab53e5cd6). Forks that deploy the same PoolManager code are left out, because only the canonical contract is included. The table uses the same 44 columns as the events table of our Ethereum dataset, with nothing renamed or derived: Log_Signature_Name is the event, Call_Signature_Name is the method that ran, and Arguments holds the decoded values. A row is one event. Initialize(id, currency0, currency1, fee, tickSpacing, hooks, sqrtPriceX96, tick) marks a new pool. ModifyLiquidity(id, sender, tickLower, tickUpper, liquidityDelta, salt) is an add when liquidityDelta is positive and a remove when it is negative. Donate(id, sender, amount0, amount1) gives tokens to in-range liquidity. V4 has no per-pool contract: the id argument is the pool and Log_SmartContract is always the PoolManager. Swaps are not in this dataset; they are in the Polygon DEX Trades export, which joins on the transaction hash. ## What people use it for - Liquidity depth by tick for one pool id, rebuilt from ModifyLiquidity deltas - Pool launches by fee, tick spacing and hook contract, from Initialize - Hook adoption: liquidity added to pools with and without hooks - Donations to in-range liquidity, by pool and sender ## Tables (1) ### univ4_liquidity_events: 44 columns One row per Initialize, ModifyLiquidity or Donate event emitted by the Uniswap V4 PoolManager (0x67366782805870060151383f4bbff9dab53e5cd6), in the standard events schema. Bucket prefix: polygon/uniswap_v4_liquidity/univ4_liquidity_events File naming: _.parquet Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/polygon/uniswap_v4_liquidity/univ4_liquidity_events/94750000_94759999.parquet Sample updated: Oct 15, 2026 | column | type | description | | --- | --- | --- | | Arguments | String | Decoded event arguments as a JSON array, when the signature resolved; empty otherwise | | Block_Date | Date | UTC date of the block | | Block_Number | UInt64 | Block height | | Block_Time | DateTime | Block timestamp, UTC | | Call_CallPath | Array | Path of call indexes from the transaction root down to the emitting frame | | Call_CallerIndex | Int32 | Call_Index of the frame that called the emitting frame; -1 at the top level | | Call_Create | String | Whether the emitting frame deployed a contract; true or false | | Call_Error | String | Error the emitting frame returned; empty on success | | Call_From | String | Caller of the emitting frame, 0x-prefixed | | Call_Gas | UInt64 | Gas supplied to the emitting frame | | Call_GasUsed | UInt64 | Gas consumed by the emitting frame and everything beneath it | | Call_Index | UInt32 | Position of the emitting frame within the transaction; join to calls on this plus Transaction_Hash | | Call_InternalCalls | UInt32 | Number of calls made beneath the emitting frame | | Call_Reverted | String | Whether the emitting frame reverted; true or false | | Call_SelfDestruct | String | Whether the emitting contract self-destructed; true or false | | Call_Signature_Abi | String | ABI fragment of the function the emitting frame ran | | Call_Signature_Name | String | Name of that function, when resolved | | Call_Signature_Signature | String | Canonical signature of that function | | Call_Signature_SignatureHash | String | Four-byte selector of that function, hex | | Call_Signature_SignatureType | String | How that function signature was resolved | | Call_To | String | Address the emitting frame called, 0x-prefixed | | Call_Value | String | Native POL sent with the emitting frame, decimal adjusted | | ChainId | UInt64 | EVM chain id; 137 for Polygon | | Fee_SenderFee | String | Network fee the sender paid for the whole transaction, in POL. It repeats on every log of the transaction, so count it once per transaction | | Log_EnterIndex | UInt32 | Enter index of the emitting frame | | Log_ExitIndex | UInt32 | Exit index of the emitting frame | | Log_Index | UInt32 | Position of the log within the transaction | | Log_LogAfterCallIndex | UInt32 | Index of the last call frame entered before this log, for ordering logs against calls | | Log_Signature_Abi | String | ABI fragment for the resolved event; empty when the topic is unknown | | Log_Signature_Name | String | Event name: Initialize, ModifyLiquidity or Donate | | Log_Signature_Signature | String | Canonical event signature, for example Transfer(address,address,uint256) | | Log_Signature_SignatureHash | String | Keccak hash of the event signature, hex; the same value as topic 0 | | Log_Signature_SignatureType | String | How the event signature was resolved | | Log_SmartContract | String | Contract that emitted the event, lowercase 0x hex: the PoolManager on every row | | LogHeader_Address | String | Address recorded in the log header, 0x-prefixed | | LogHeader_Data | String | Raw non-indexed log data, hex | | LogHeader_Index | UInt64 | Index of the log within the block, as the receipt records it | | LogHeader_Removed | String | Whether the log was removed by a reorg; true or false | | Topics_Hash | Array | Indexed topics of the log, as an array of hex strings; the first is the event signature hash | | Transaction_From | String | Address that signed the transaction, 0x-prefixed | | Transaction_Hash | String | Hash of the containing transaction, 0x-prefixed. The join key | | Transaction_Index | UInt64 | Position of the transaction within the block | | Transaction_To | String | Address the transaction called, 0x-prefixed | | TransactionStatus_Success | String | Whether the transaction succeeded; true or false | ## Price - Latest month (Sep 14, 2026 → Oct 14, 2026): $100 one-time, USD - Last 12 months (Oct 14, 2025 → Oct 14, 2026): $1,000 one-time, USD Every window includes all 44 columns. Only the time range changes. ## Questions buyers ask Q: What is in the Uniswap V4 Liquidity on Polygon dataset? A: One Parquet table, univ4_liquidity_events, with 44 columns in the standard Ethereum events schema. A row is one Initialize, ModifyLiquidity or Donate event emitted by the Uniswap V4 PoolManager (0x67366782805870060151383f4bbff9dab53e5cd6), from successful transactions and non-reverted calls only. Data starts on 31 January 2025. Q: How big is it? A: About 2,000,000 rows and 0.4 GB of ZSTD Parquet from 31 January 2025 to 1 October 2026, estimated from sampled days. On 1 October 2026 the table had about 909 rows. Volume is uneven: 2,057 events on 1 April 2025, 24,082 on 1 October 2025 and 2,645 on 1 April 2026, so the total is a rough estimate. Q: How do I read the amounts and addresses? A: Arguments is a JSON array with one entry per decoded argument: index, name, path, type and the value slots. Addresses and bytes are hex strings; uint128 and uint256 amounts are decimal strings in raw token units, so divide by the token's decimals yourself; small integers such as ticks sit in the integer slots. Call_Value and Fee_SenderFee are already in ETH or POL. Q: Are swaps included? A: No. Swaps are in the Polygon DEX Trades dataset. Join on Transaction_Hash and the pool to see a swap next to the liquidity change around it. Q: What was left out, and why? A: Forks that deploy the same PoolManager code are left out, because only the canonical contract is included. Events from failed transactions and reverted calls are left out, so each row is a change that took effect. Q: How does this differ from the Uniswap V3 Liquidity on Polygon dataset? A: Different protocol version, same schema and the same production method, so the two load side by side with one query. Q: How are these produced, and how were they checked? A: The export is one ClickHouse query over our decoded Polygon events, filtered to the contracts above. We checked the sample's row count against the independent count by event signature, confirmed each row has a decoded Arguments array and no duplicate (Transaction_Hash, Call_Index, Log_Index) key, and verified the Parquet schema matches the published Uniswap V3 Liquidity files column for column. Q: How do I load it? A: With DuckDB: SELECT Log_Signature_Name, count(*) FROM read_parquet('univ4_liquidity_events/*.parquet') GROUP BY 1. pandas, Polars, Spark and ClickHouse read the same files. Q: How is the data delivered? A: As flat Parquet files under a stable layout, one prefix per table, with a JSON manifest listing each 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. Q: Can I try before I buy? A: Yes. The table links to a public sample file with 193 real rows from 1 October 2026, blocks 94,750,000 to 94,759,999. 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.