Polymarket table reference
Full schema for the Supanode Polymarket Historical Data Indexer - 1.82 billion on-chain fills plus 261 columns of event and market metadata, with types, partition key and join keys.
// updated 2026-08-22
The polymarket database pairs decoded Polygon fill events with the event and market metadata needed to make sense of them. This page documents every table, column, type, and description. For runnable patterns see Query examples; for connection details see Indexer overview.
Schema snapshot: 16 August 2026. Both metadata tables grew substantially over the summer - raw_market_meta went from 2.3M rows to 12.1M and raw_event_meta from 42K to 2.48M, as Polymarket expanded into sports and recurring markets.
Summary
| Table | Rows | Size | History | Partition key |
|---|---|---|---|---|
polymarket_order_filled_v3 | 1,823,755,392 | 299.16 GB | 2022-11-21 → 2026-08-16 | toYYYYMMDD(block_timestamp) |
raw_market_meta | 12,097,579 | 13.27 GB | snapshots | none |
raw_event_meta | 2,484,405 | 10.83 GB | snapshots | none |
How the three tables join
| From | Column | To | Column |
|---|---|---|---|
polymarket_order_filled_v3 | asset | raw_market_meta | clob_token_id |
polymarket_order_filled_v3 | event_id | raw_event_meta | event_id |
raw_market_meta | condition_id | - | groups the outcomes of one market |
asset is the outcome token: one market has one row per outcome in raw_market_meta, each with its own clob_token_id. Joining on it is how a fill becomes "someone bought YES on this question".
The metadata tables are append-style snapshots. They have no partition key and carry inserted_at, so a market or event can appear more than once as its state changes. Always reduce to the latest row per key with argMax(..., inserted_at) before joining - otherwise a join multiplies your fill rows.
Amounts are raw base units with 6 decimals. amount_usdc, amount_token and fee are UInt256. Divide by 1e6 for a human number. Because both sides carry 6 decimals, amount_usdc / amount_token is the executed probability directly, on a 0 to 1 scale - no scaling needed.
polymarket_order_filled_v3
On-chain order-fill events from the Polymarket CTF Exchange on Polygon, one row per fill leg. Maker and taker legs are separate rows, distinguished by is_maker.
Rows: 1,823,755,392 · Size: 299.16 GB · Columns: 29
Partition key: toYYYYMMDD(block_timestamp)
History: 2022-11-21 → 2026-08-16
| Column | Type | Description |
|---|---|---|
event_id | String | Unique event identifier |
order_hash | String | Hash of the order |
wallet | String | Wallet address that placed the order |
asset | String | Outcome token (condition ID + outcome index) |
amount_token | UInt256 | Token amount filled |
amount_usdc | UInt256 | USDC amount filled |
is_maker | Bool | Whether this was the maker side |
side | FixedString(1) | Order side (B=buy, S=sell) |
fee | UInt256 | Fee amount in USDC |
block_number | UInt64 | Polygon block number |
log_index | UInt32 | Log index within the transaction |
transaction_index | UInt32 | Transaction index in block |
contract_address | String | CTF Exchange contract address |
block_hash | String | Block hash |
block_timestamp | DateTime | UTC timestamp of the block |
gas_used | UInt64 | Gas used by transaction |
gas_limit | UInt64 | Gas limit set for transaction |
base_fee_per_gas | UInt256 | Base fee per gas (EIP-1559) |
transaction_hash | String | Transaction hash |
transaction_from | String | Transaction sender |
transaction_to | String | Transaction recipient |
transaction_value | UInt256 | ETH value transferred |
transaction_gas | UInt64 | Gas provided for transaction |
transaction_nonce | UInt64 | Transaction nonce |
max_fee_per_gas | UInt256 | Maximum fee per gas (EIP-1559) |
max_priority_fee_per_gas | UInt256 | Maximum priority fee (EIP-1559) |
inserted_at | DateTime | Record insertion timestamp |
builder | String | Default: '' |
metadata | String | Default: '' |
raw_market_meta
Market-level metadata: the question, its outcomes and CLOB token ids, current pricing and liquidity, resolution status, and the sports and reward fields Polymarket added along the way. This is the table you join a fill to.
Rows: 12,097,579 · Size: 13.27 GB · Columns: 140
Partition key: none - the table is small enough to scan, but filter on a key column anyway
| Column | Type | Description |
|---|---|---|
market_id | String | Unique market identifier |
question | Nullable(String) | Market question text |
condition_id | String | Gnosis conditional token condition ID |
slug | Nullable(String) | URL-friendly market slug |
twitter_card_image | Nullable(String) | Twitter card image URL |
resolution_source | Nullable(String) | Source for market resolution |
market_end_dttm | Nullable(DateTime64(3)) | Market end datetime |
market_start_dttm | Nullable(DateTime64(3)) | Market start datetime |
category | Nullable(String) | Market category |
amm_type | Nullable(String) | AMM type used |
sponsor_name | Nullable(String) | Market sponsor name |
sponsor_image | Nullable(String) | Sponsor image URL |
x_axis_value | Nullable(String) | X-axis label for charts |
y_axis_value | Nullable(String) | Y-axis label for charts |
denomination_token | Nullable(String) | Token used for denomination |
fee | Nullable(Float64) | Market fee percentage |
lower_bound | Nullable(String) | Lower bound for scalar markets |
upper_bound | Nullable(String) | Upper bound for scalar markets |
description | Nullable(String) | Market description |
outcome | Nullable(String) | Outcome name |
outcome_price | Nullable(Float64) | Current outcome price (0-1) |
clob_token_id | String | CLOB token identifier |
volume | Nullable(Float64) | Total trading volume |
volume_num | Nullable(Float64) | Numeric trading volume |
is_active | Nullable(Bool) | Whether market is active |
market_type | Nullable(String) | Type of market |
format_type | Nullable(String) | Display format type |
lower_bound_dttm | Nullable(String) | Lower bound datetime for time-based markets |
upper_bound_dttm | Nullable(String) | Upper bound datetime for time-based markets |
is_closed | Nullable(Bool) | Whether market is closed |
market_maker_address | Nullable(String) | Market maker address |
created_by | Nullable(Int64) | User ID who created the market |
updated_by | Nullable(Int64) | User ID who last updated the market |
created_dttm | Nullable(DateTime64(3)) | Market creation datetime |
updated_dttm | Nullable(DateTime64(3)) | Market last update datetime |
closed_dttm | Nullable(DateTime64(3)) | Market close datetime |
is_wide_format | Nullable(Bool) | Whether market uses wide display format |
is_new | Nullable(Bool) | Whether market is flagged as new |
mailchimp_tag | Nullable(String) | Mailchimp tag for notifications |
is_featured | Nullable(Bool) | Whether market is featured |
is_archived | Nullable(Bool) | Whether market is archived |
resolved_by | Nullable(String) | Resolution source or resolver |
is_restricted | Nullable(Bool) | Whether market has access restrictions |
market_group | Nullable(Int64) | Market group identifier |
group_item_title | Nullable(String) | Title within market group |
group_item_threshold | Nullable(String) | Threshold for group item |
question_id | Nullable(String) | Question identifier |
uma_end_dttm | Nullable(String) | UMA oracle end datetime |
is_enable_order_book | Nullable(Bool) | Whether order book is enabled |
order_price_min_tick_size | Nullable(Float64) | Minimum price tick size |
order_min_size | Nullable(Float64) | Minimum order size |
uma_resolution_status | Nullable(String) | UMA resolution status |
curation_order | Nullable(Int64) | Curation display order |
liquidity_num | Nullable(Float64) | Numeric liquidity value |
end_date_iso_dt_str | Nullable(String) | ISO format end date string |
start_date_iso_dt_str | Nullable(String) | ISO format start date string |
uma_end_date_iso_dt_str | Nullable(String) | UMA end date ISO string |
is_having_reviewed_dates | Nullable(Bool) | Whether dates have been reviewed |
is_ready_for_cron | Nullable(Bool) | Whether ready for cron processing |
is_comments_enabled | Nullable(Bool) | Whether comments are enabled |
volume_24hr | Nullable(Float64) | 24-hour trading volume |
volume_1wk | Nullable(Float64) | 7-day trading volume |
volume_1mo | Nullable(Float64) | 30-day trading volume |
volume_1yr | Nullable(Float64) | 1-year trading volume |
game_start_time | Nullable(String) | Game/event start time |
seconds_delay | Nullable(Int64) | Delay in seconds |
disqus_thread | Nullable(String) | Disqus comment thread ID |
short_outcome | Nullable(String) | Short outcome label |
team_a_id | Nullable(String) | Team A identifier (sports) |
team_b_id | Nullable(String) | Team B identifier (sports) |
uma_bond | Nullable(String) | UMA oracle bond amount |
uma_reward | Nullable(String) | UMA oracle reward amount |
is_fpmm_live | Nullable(Bool) | Whether FPMM is live |
volume_24hr_amm | Nullable(Float64) | 24-hour AMM volume |
volume_1wk_amm | Nullable(Float64) | 7-day AMM volume |
volume_1mo_amm | Nullable(Float64) | 30-day AMM volume |
volume_1yr_amm | Nullable(Float64) | 1-year AMM volume |
volume_24hr_clob | Nullable(Float64) | 24-hour CLOB volume |
volume_1wk_clob | Nullable(Float64) | 7-day CLOB volume |
volume_1mo_clob | Nullable(Float64) | 30-day CLOB volume |
volume_1yr_clob | Nullable(Float64) | 1-year CLOB volume |
volume_amm | Nullable(Float64) | Total AMM volume |
volume_clob | Nullable(Float64) | Total CLOB volume |
liquidity | Nullable(Float64) | Total liquidity |
liquidity_amm | Nullable(Float64) | AMM liquidity |
liquidity_clob | Nullable(Float64) | CLOB liquidity |
maker_base_fee | Nullable(Int64) | Maker base fee |
taker_base_fee | Nullable(Int64) | Taker base fee |
custom_liveness | Nullable(Int64) | Custom liveness period |
is_accepting_orders | Nullable(Bool) | Whether accepting orders |
is_notifications_enabled | Nullable(Bool) | Whether notifications enabled |
score | Nullable(Int64) | Market score/ranking |
image_optimized | Nullable(String) | Optimized image URL |
icon_optimized | Nullable(String) | Optimized icon URL |
event | Nullable(String) | Associated event |
tag | Nullable(String) | Market tag |
category_meta | Nullable(String) | Category metadata |
creator | Nullable(String) | Creator information |
is_ready | Nullable(Bool) | Whether market is ready |
is_funded | Nullable(Bool) | Whether market is funded |
past_slugs | Nullable(String) | Previous URL slugs |
ready_timestamp | Nullable(DateTime64(3)) | Ready status timestamp |
funded_timestamp | Nullable(DateTime64(3)) | Funded status timestamp |
accepting_orders_timestamp | Nullable(DateTime64(3)) | Orders acceptance timestamp |
competitive | Nullable(Float64) | Competitiveness score |
rewards_min_size | Nullable(Float64) | Minimum size for rewards |
rewards_max_spread | Nullable(Float64) | Maximum spread for rewards |
spread | Nullable(Float64) | Current bid-ask spread |
is_automatically_resolved | Nullable(Bool) | Whether auto-resolved |
one_day_price_change | Nullable(Float64) | 24-hour price change |
one_hour_price_change | Nullable(Float64) | 1-hour price change |
one_week_price_change | Nullable(Float64) | 7-day price change |
one_month_price_change | Nullable(Float64) | 30-day price change |
one_year_price_change | Nullable(Float64) | 1-year price change |
last_trade_price | Nullable(Float64) | Last trade price |
best_bid | Nullable(Float64) | Best bid price |
best_ask | Nullable(Float64) | Best ask price |
is_automatically_active | Nullable(Bool) | Whether auto-activated |
is_clear_book_on_start | Nullable(Bool) | Whether to clear order book on start |
chart_color | Nullable(String) | Chart display color |
series_color | Nullable(String) | Series display color |
is_showing_gmp_series | Nullable(Bool) | Whether showing GMP series |
is_showing_gmp_outcome | Nullable(Bool) | Whether showing GMP outcome |
is_manual_activation | Nullable(Bool) | Whether manual activation required |
is_neg_risk_other | Nullable(Bool) | Negative risk flag |
game_id | Nullable(String) | Game identifier |
group_item_range | Nullable(String) | Range for group item |
sports_market_type | Nullable(String) | Sports market type |
line | Nullable(Float64) | Betting line |
uma_resolution_statuses | Nullable(String) | UMA resolution statuses |
is_pending_deployment | Nullable(Bool) | Whether pending deployment |
is_deploying | Nullable(Bool) | Whether currently deploying |
deploying_timestamp | Nullable(DateTime64(3)) | Deployment timestamp |
scheduled_deployment_timestamp | Nullable(DateTime64(3)) | Scheduled deployment time |
is_rfq_enabled | Nullable(Bool) | Whether RFQ enabled |
event_start_time | Nullable(DateTime64(3)) | Event start datetime |
image | Nullable(String) | Market image URL |
icon | Nullable(String) | Market icon URL |
raw_json | String | Raw JSON response from API |
inserted_at | DateTime | Record insertion timestamp |
raw_event_meta
Event-level metadata: title, slug, category, dates, aggregate volume and liquidity across the event's markets. An event groups several markets - a game, an election, a recurring series.
Rows: 2,484,405 · Size: 10.83 GB · Columns: 92
Partition key: none - the table is small enough to scan, but filter on a key column anyway
| Column | Type | Description |
|---|---|---|
event_id | String | Unique event identifier |
ticker | Nullable(String) | Event ticker symbol (URL-safe) |
slug | Nullable(String) | URL-friendly event slug |
title | Nullable(String) | Event title |
subtitle | Nullable(String) | Event subtitle |
description | Nullable(String) | Event description / resolution rules text |
resolution_source | Nullable(String) | Source URL/reference used for event resolution |
start_dttm | Nullable(DateTime64(3)) | Event start datetime |
creation_dttm | Nullable(DateTime64(3)) | Event creation datetime |
end_dttm | Nullable(DateTime64(3)) | Event end datetime |
image | Nullable(String) | Event image URL |
icon | Nullable(String) | Event icon URL |
is_active | Nullable(Bool) | Whether event is active |
is_closed | Nullable(Bool) | Whether event is closed |
is_archived | Nullable(Bool) | Whether event is archived |
is_new | Nullable(Bool) | Whether event is flagged as new |
is_featured | Nullable(Bool) | Whether event is featured |
is_restricted | Nullable(Bool) | Whether event has access restrictions (e.g., geo-blocked) |
liquidity | Nullable(Float64) | Total event liquidity (aggregated across markets) |
volume | Nullable(Float64) | Total event trading volume |
open_interest | Nullable(Float64) | Open interest for the event |
sort_by | Nullable(String) | Sort key used for event ordering |
category | Nullable(String) | Event category |
subcategory | Nullable(String) | Event subcategory |
is_template | Nullable(Bool) | Whether event is a template |
template_variables | Nullable(String) | Template variables for templated events (JSON) |
published_at | Nullable(String) | Publication timestamp |
created_by | Nullable(String) | User ID who created the event |
updated_by | Nullable(String) | User ID who last updated the event |
created_dttm | Nullable(DateTime64(3)) | Event record creation datetime |
updated_dttm | Nullable(DateTime64(3)) | Event record last update datetime |
is_comments_enabled | Nullable(Bool) | Whether comments are enabled |
competitive | Nullable(Float64) | Event competitiveness score |
volume_24hr | Nullable(Float64) | 24-hour event trading volume |
volume_1wk | Nullable(Float64) | 7-day event trading volume |
volume_1mo | Nullable(Float64) | 30-day event trading volume |
volume_1yr | Nullable(Float64) | 1-year event trading volume |
featured_image | Nullable(String) | Featured image URL |
disqus_thread | Nullable(String) | Disqus comment thread ID |
parent_event | Nullable(String) | Parent event identifier (for nested events) |
is_enable_order_book | Nullable(Bool) | Whether order book is enabled |
liquidity_amm | Nullable(Float64) | AMM liquidity for the event |
liquidity_clob | Nullable(Float64) | CLOB liquidity for the event |
is_neg_risk | Nullable(Bool) | Whether event uses negative risk markets |
neg_risk_market_id | Nullable(String) | Negative risk market identifier |
neg_risk_fee_bips | Nullable(Int64) | Negative risk fee in basis points |
comment_count | Nullable(Int64) | Number of comments on the event |
image_optimized | Nullable(String) | Optimized image URL |
icon_optimized | Nullable(String) | Optimized icon URL |
featured_image_optimized | Nullable(String) | Optimized featured image URL |
sub_events | Nullable(String) | JSON array of sub-events |
markets | Nullable(String) | JSON array of markets belonging to this event |
series | Nullable(String) | JSON array of series the event belongs to |
categories | Nullable(String) | JSON array of categories |
collections | Nullable(String) | JSON array of collections |
tags | Nullable(String) | JSON array of tags |
is_cyom | Nullable(Bool) | Whether event is 'create your own market' (CYOM) |
closed_dttm | Nullable(DateTime64(3)) | Event closing datetime |
is_show_all_outcomes | Nullable(Bool) | Whether to show all outcomes in UI |
is_show_market_images | Nullable(Bool) | Whether to show market images in UI |
is_automatically_resolved | Nullable(Bool) | Whether event is auto-resolved |
is_enable_neg_risk | Nullable(Bool) | Whether negative risk is enabled |
is_automatically_active | Nullable(Bool) | Whether event is auto-activated |
event_date | Nullable(String) | Event date string (display format) |
start_time | Nullable(DateTime64(3)) | Event start time |
event_week | Nullable(Int64) | Week number of event (for recurring events) |
series_slug | Nullable(String) | Slug of the series the event belongs to |
score | Nullable(String) | Event score (sports events) |
elapsed | Nullable(String) | Elapsed time string (sports events) |
period | Nullable(String) | Period indicator (sports events, e.g., Q1, H2) |
is_live | Nullable(Bool) | Whether event is currently live (sports events) |
is_ended | Nullable(Bool) | Whether event has ended (sports events) |
finished_timestamp | Nullable(DateTime64(3)) | Timestamp the event finished |
gmp_chart_mode | Nullable(String) | GMP chart display mode |
event_creators | Nullable(String) | Event creators metadata |
tweet_count | Nullable(Int64) | Number of associated tweets |
chats | Nullable(String) | Chat metadata |
featured_order | Nullable(Int64) | Display order when featured |
is_estimate_value | Nullable(Bool) | Whether value is estimated |
is_cant_estimate | Nullable(Bool) | Whether value cannot be estimated |
estimated_value | Nullable(String) | Estimated value (free-form string) |
templates | Nullable(String) | Templates associated with the event |
spreads_main_line | Nullable(Float64) | Main spread line (sports betting) |
totals_main_line | Nullable(Float64) | Main totals line (sports betting) |
carousel_map | Nullable(String) | Carousel display metadata |
is_pending_deployment | Nullable(Bool) | Whether event is pending deployment |
is_deploying | Nullable(Bool) | Whether event is currently deploying |
deploying_timestamp | Nullable(DateTime64(3)) | Deployment timestamp |
scheduled_deployment_timestamp | Nullable(DateTime64(3)) | Scheduled deployment time |
game_status | Nullable(String) | Game status (sports events) |
raw_json | String | Raw JSON response from Polymarket API |
inserted_at | DateTime | Record insertion timestamp |
raw_json is the escape hatch. Both metadata tables keep the untouched API payload in raw_json. If Polymarket ships a field before we have typed it, JSONExtract it out of there rather than waiting on a schema change.
What is not in the database
Order-book depth is not in ClickHouse. Full book snapshots, price-level changes and best-bid/ask transitions live in a separate CLOB capture archive - see Order-book archive.
Get started
Provision access or start a trial: @supanode_tgs.