Polymarket position lifecycle actions — splits, merges, redemptions, neg-risk converts, and Protocol V2 migrations with market context.
The polymarket_polygon.market_actions table contains position lifecycle actions on single markets — splits, merges, redemptions, and neg-risk converts on the CTF stack, plus the same actions, migrations from the CTF, and neg-risk horizontal splits/merges on the contract suite Polymarket calls Protocol V2 — enriched with condition-level market context from market_details. One row per user-level action; trade fills live in market_trades. Settlement-internal splits/merges are excluded by construction — those are the mint/merge legs of CLOB fills and live in market_trades.
condition_id and event_market_id are never both populated on the same row: split/merge/redemption/migration rows key on condition_id; convert and horizontal split/merge rows key on event_market_id. To get a market’s full action history, filter on condition_id and separately on event_market_id.
Lifecycle action type (split, merge, redemption, convert, migration, horizontal_split, horizontal_merge)
condition_id
VARBINARY
Condition ID (bytes32) the action operates on. A migrated position keeps the CTF condition ID it came from. NULL on convert and horizontal rows (keyed by event_market_id instead)
event_market_id
VARBINARY
ID of the overarching multi-outcome event (convert and horizontal rows only); joins market_details.event_market_id (varchar there) — not a CTF condition ID
question
VARCHAR
Concrete outcome being bet on (from market_details)
event_market_name
VARCHAR
Overarching question for negRisk markets
polymarket_link
VARCHAR
Link to the Polymarket site (may be broken for archived markets)
neg_risk
VARCHAR
Whether the condition belongs to a neg-risk market
index_sets
ARRAY(UINT256)
Outcome index sets of the action: the partition of CTF splits/merges, the redeemed index sets of CTF redemptions, the converted outcome bitmask of converts; NULL for adapter actions (full YES/NO set implied)
stakeholder
VARBINARY
Address whose position is acted on; may be a Polymarket router/proxy contract — see tx_from for the sender
amount
DOUBLE
Share/set quantity (= USDC collateral moved 1:1 for splits/merges). NULL for CTF and auto redemptions (not emitted)
payout
DOUBLE
Collateral returned by redemptions in USD; NULL otherwise
is_auto_redeemed
BOOLEAN
On redemptions: TRUE when executed by the AutoRedeemer on the user’s behalf; NULL for non-redemption actions
collateral_token
VARBINARY
Collateral token of CTF events; NULL for adapter/AutoRedeemer events
parent_collection_id
VARBINARY
CTF parent collection ID (0x00 for Polymarket’s flat binary positions); NULL for adapter/AutoRedeemer events
contract_address
VARBINARY
Contract that emitted the event (CTF, NegRiskAdapter, AutoRedeemer proxy, or a Protocol V2 module)
evt_index
INTEGER
Index of the event within the transaction
tx_hash
VARBINARY
Transaction hash
tx_from
VARBINARY
Transaction sender — useful when stakeholder is a router/operator contract
_updated_at
TIMESTAMP
When this row was last inserted or updated by the dbt pipeline
-- Redemption payouts by market over the last 30 daysSELECT question, SUM(payout) AS payout_usd, COUNT(*) AS num_redemptionsFROM polymarket_polygon.market_actionsWHERE action = 'redemption' AND block_time >= NOW() - INTERVAL '30' DAYGROUP BY 1ORDER BY 2 DESCLIMIT 20