Skip to main content
Prediction markets turn event outcomes into tradable instruments. Dune provides curated prediction market data combining onchain activity from Polymarket (the largest onchain prediction market) with regulated event-contract reporting from Kalshi.
Maintained by: Dune (Polymarket = project spell, Kalshi = partner data) · Refresh: ~24 hours · Chains: Polygon (Polymarket), Off-chain (Kalshi)

Get This Data

Access prediction market data via API, Datashare, or the Dune App.

Available Protocols

When to Use These Tables

Use prediction market tables when you need to:
  • Track trading volumes, market activity, and implied probabilities on Polymarket
  • Analyze event-contract pricing and settlement on Kalshi
  • Monitor user positions and portfolio composition across prediction markets
  • Research market resolution outcomes and pricing efficiency
  • Compare prediction market activity across venues

Query Performance

Polymarket tables are views. Always filter on block_time ranges for market_trades, and use condition_id or question for market-specific queries.
-- ✅ Good: time-bounded with market filter
SELECT * FROM polymarket_polygon.market_trades
WHERE block_time >= NOW() - INTERVAL '7' DAY
  AND question LIKE '%election%'

Methodology

Polymarket tables are maintained by Dune (source code). They combine decoded on-chain events from Polymarket’s CTF Exchange and NegRisk contracts on Polygon with market metadata from the Polymarket API (stored in dune.polymarket_markets). Trading data includes three matching types: complementary (buyer matches seller), MINT (system mints new outcome tokens), and MERGE (system redeems YES+NO tokens for collateral). Kalshi data is sourced from Kalshi’s public reporting. market_report contains market-level metadata; trade_report contains daily aggregated trade data (not individual fills — a single date and ticker can have multiple rows at different price points).

Example Queries

Top Polymarket markets by volume (last 7 days):
SELECT
  event_market_name,
  question,
  SUM(amount) AS total_volume_usd,
  COUNT(*) AS num_trades
FROM polymarket_polygon.market_trades
WHERE block_time >= NOW() - INTERVAL '7' DAY
GROUP BY 1, 2
ORDER BY 3 DESC
LIMIT 20
Price history for a specific Polymarket outcome:
SELECT
  d.day,
  d.token_outcome,
  d.price
FROM polymarket_polygon.market_prices_daily d
JOIN polymarket_polygon.market_details m
  ON d.condition_id = m.condition_id
  AND d.token_id = m.token_id
WHERE m.question = 'Will Trump win the 2024 US Presidential Election?'
ORDER BY d.day
  • dex.trades — DEX trading data (Polymarket uses Polygon DEX infrastructure)
  • prices.day / prices.hour — Token pricing feeds