Source

Query Kalshi, Polymarket, and Manifold markets with SQL

One folded row per prediction market across Kalshi, Polymarket, and Manifold — title, category, status, resolution, open/close/settle times, volume, liquidity, and probability — queryable with read-only SQL.

Surface

  • Recordsmarkets
  • Canonicalmarkets.catalog
  • FreshnessFrozen— rebuilt as a recorded batch fold; freshness advances when the fold re-runs, not on a continuous cadence
  • Extentbuilt_at 2026-08-13 to 2026-08-13
  • Cadencerecorded batch fold; advances when the fold re-runs (Manifold’s own relations stay minutes-fresh)
  • MethodPublic venue APIs (Kalshi, Polymarket, Manifold); latest observation per market wins.
  • StatsLast stats snapshot: 2026-08-27T12:09:14Z

Query surfaces

  • markets.catalog
  • manifold.markets
  • manifold.bets

Public venue APIs (Kalshi, Polymarket, Manifold); latest observation per market wins.

Best for

the highest-volume open questions on each venue
resolution and settle times for finalized markets
cross-venue lookup by market_key = <source>/<native id>

Fields

  • market_key
  • source
  • market_native_id
  • event_native_id
  • canonical_uri
  • title
  • description
  • category
  • outcomes
  • status
  • resolution
  • open_time
  • close_time
  • resolve_time
  • volume
  • volume_24h
  • liquidity
  • open_interest
  • probability
  • unique_traders
  • extras
  • built_at

Read live from the schema registry for markets.catalog — 22 columns. Every relation's full contract is served by /v1/scry/schema.

Indexed predicates

  • Prunesmarket_key = '<source>/<native id>'
  • Prunessource = 'kalshi' AND market_native_id = '<ticker>'

Queries

Highest-volume open Polymarket questions

Scope source and status, then rank by volume.

SELECT market_key, title, volume, close_time
FROM markets.catalog
WHERE source = 'polymarket'
  AND status = 'active'
ORDER BY volume DESC
LIMIT 20;

Markets by venue and status

One aggregate shows how each venue’s catalog splits across lifecycle states.

SELECT source, status, count() AS markets
FROM markets.catalog
GROUP BY source, status
ORDER BY markets DESC
LIMIT 20;

Gaps

  • HolesNone declared on the live schema entry for markets.catalog (declared holes are curation, not a measurement of completeness).
  • NoteKalshi is ~188.8M of ~191.4M rows, largely auto-minted financial-range series — filter source, category, or volume before a broad scan
  • Noteempty string or NULL means the venue did not supply the field; probability is NULL on many Polymarket rows
  • Noteper-bet price paths live in the venue relations (manifold.bets); this catalog is market-level state

Related proof pages