No API wrangling. Download historical data as clean CSV files or query on BigQuery. Currently in beta. No sign-up required. Last 30 days of data available for free.
Every day, usually by 03:00 UTC, we refresh the CSV contents of all series, events, markets files. Plus we add a trade file for the previous UTC calendar day.
Log into your Google Cloud Platform account and simply run queries against our public dataset. Every day by 03:00 UTC we refresh all metadata tables (series, events, markets) and upload trades for the previous UTC calendar day.
SELECT * FROM `pmdsproject.pmdsbeta.kalshi_trades` WHERE DATE(DT) = DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY) ORDER BY DT LIMIT 100;
SELECT * FROM `pmdsproject.pmdsbeta.polymarket_block_trades` WHERE DATE(BLOCK_DT) = DATE_SUB(CURRENT_DATE('UTC'), INTERVAL 1 DAY) ORDER BY BLOCK_NUMBER, TX_INDEX, LOG_INDEX LIMIT 100;
SERIES_ID, EVENT_ID, MARKET_ID.SERIES_TICKER, EVENT_TICKER, MARKET_TICKER.PRICE fields in trades datasets are stored in decimal format. A value of 0.55 corresponds to a visual price of 55 cents on the platform, i.e. the price you would see displayed on the website.BLOCK_DT timestamp reflects when the trade was finalized on-chain, typically a few seconds after off-chain matching._TAGS fields, store multiple values wrapped individually in square brackets rather than using comma separation, e.g. [crypto][memecoins][solana]. This format makes it easy to filter with LIKE without ambiguity: WHERE EVENT_TAGS LIKE '%[crypto]%'.Everything you need to know about the datasets, schemas, and how to work with the data.
https://beta.kingsets.com/manifest.json. It includes every CSV download path and updated timestamp. Scripts and AI agents can fetch this manifest to programmatically discover and download all available datasets.kingsets.com/ai/bigquery_skill.md and attach it to a conversation in ChatGPT, Claude, or any AI assistant that supports file uploads. It'll get you writing queries quickly without needing to study the schema first. That said, Kalshi and Polymarket each have their own data structures and naming conventions that are worth understanding as your queries grow in complexity.START_DT — when the market became available for trading. Maps to Kalshi's open_time and Polymarket's startDate.END_DT — when trading is scheduled to stop. Maps to Kalshi's close_time and Polymarket's endDate.CLOSED_DT — the final administrative resolution after outcome verification. Maps to Kalshi's settlement_ts and Polymarket's closedTime. This is the source of truth for when contracts were officially settled.BLOCK_NUMBER, TX_INDEX, and LOG_INDEX. Since trades are ingested from the blockchain, there is no single standalone sequence number.TAKER_ADDRESS field. To identify a specific trader's address, view one of their "Buy" trades on a Polygon blockchain explorer; the first address in the "From" section of "ERC-20 Tokens Transferred" is the proxy address.WHERE LOWER(taker_address) = LOWER('0xABC123...').REDEEM or MERGE. Track a specific user's history by filtering TAKER_ADDRESS with their proxy wallet address.