> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dune.com/llms.txt
> Use this file to discover all available pages before exploring further.

# prediction_markets.markets

> Unified market dimension table across Polymarket and Kalshi, one row per binary market with normalized status, category, and resolution fields.

export const TableSample = ({tableName, tableSchema}) => <>
    <div className="hidden dark:block">
      <iframe src={`https://dune.com/embeds/3419983/5785629?table_schema_t6f0df=${tableSchema}&table_name_t6f0df=${tableName}&darkMode=true`} style={{
  width: '100%',
  height: '500px',
  border: 'none',
  marginTop: '10px'
}} />
    </div>
    <div className="dark:hidden">
      <iframe src={`https://dune.com/embeds/3419983/5785629?table_schema_t6f0df=${tableSchema}&table_name_t6f0df=${tableName}`} style={{
  width: '100%',
  height: '500px',
  border: 'none',
  marginTop: '10px'
}} />
    </div>
  </>;

The `prediction_markets.markets` table is the cross-venue market dimension. Grain: one row per binary market (Polymarket `condition_id` or Kalshi `ticker`). Every row carries a `venue` column and uses venue-neutral column names so you can query both venues with a single statement.

## Table Schema

| Column                  | Type        | Description                                                                                                                         |
| ----------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `venue`                 | `VARCHAR`   | Venue identifier (`polymarket` or `kalshi`)                                                                                         |
| `market_id`             | `VARCHAR`   | Unique market identifier within a venue (Polymarket `condition_id` in 0x-hex, Kalshi `ticker`)                                      |
| `event_id`              | `VARCHAR`   | Parent event grouping. NULL for standalone Polymarket markets; always populated for Kalshi                                          |
| `series_id`             | `VARCHAR`   | Recurring template identifier. Kalshi only; NULL on Polymarket                                                                      |
| `event_id_or_market_id` | `VARCHAR`   | Universal grouping key: `event_id` when present, otherwise `market_id`                                                              |
| `yes_outcome_id`        | `VARCHAR`   | Identifier of the Yes side (Polymarket `token_id`, Kalshi `ticker`)                                                                 |
| `no_outcome_id`         | `VARCHAR`   | Identifier of the No side. NULL for Kalshi (No is implicit)                                                                         |
| `yes_outcome_name`      | `VARCHAR`   | Human-readable label of the Yes side                                                                                                |
| `no_outcome_name`       | `VARCHAR`   | Human-readable label of the No side                                                                                                 |
| `question`              | `VARCHAR`   | Market question text                                                                                                                |
| `event_name`            | `VARCHAR`   | Event title. NULL for standalone Polymarket markets                                                                                 |
| `category`              | `VARCHAR`   | Unified category. One of: `sports`, `crypto`, `politics`, `finance`, `technology`, `culture`, `weather`, `world`, `health`, `other` |
| `category_native`       | `VARCHAR`   | Original upstream category value before normalization                                                                               |
| `link`                  | `VARCHAR`   | URL to the market on the venue's web UI                                                                                             |
| `status`                | `VARCHAR`   | Unified lifecycle state (`active`, `closed`, `settled`)                                                                             |
| `is_resolved`           | `BOOLEAN`   | TRUE when the market has a final outcome                                                                                            |
| `is_mve`                | `BOOLEAN`   | TRUE when the market belongs to a multi-outcome event                                                                               |
| `is_parlay`             | `BOOLEAN`   | TRUE for Kalshi parlay markets. Filter `is_parlay = FALSE` for fair cross-venue comparisons                                         |
| `market_start_time`     | `TIMESTAMP` | When the market opened for trading                                                                                                  |
| `market_end_time`       | `TIMESTAMP` | When the market closes or expires                                                                                                   |
| `settlement_ts`         | `TIMESTAMP` | When the market was finalized. NULL until resolved                                                                                  |
| `resolved_outcome`      | `VARCHAR`   | Resolution side: `yes`, `no`, `void`, or `scalar`. NULL while unresolved                                                            |
| `settlement_value_usd`  | `DOUBLE`    | Per-share payout at settlement. 1.0 for Yes, 0.0 for No, 0.5 for void, fractional for scalar                                        |
| `strike_type`           | `VARCHAR`   | Scalar/range market structure (Kalshi only). NULL for Polymarket                                                                    |
| `floor_strike`          | `DOUBLE`    | Lower strike bound for range markets (Kalshi only)                                                                                  |
| `cap_strike`            | `DOUBLE`    | Upper strike bound for range markets (Kalshi only)                                                                                  |
| `neg_risk`              | `BOOLEAN`   | Polymarket NegRisk flag. FALSE for Kalshi                                                                                           |
| `source_updated_at`     | `TIMESTAMP` | When the upstream venue last refreshed this market record                                                                           |
| `_updated_at`           | `TIMESTAMP` | When this row was last written by the pipeline                                                                                      |

## Table sample

<TableSample tableSchema="prediction_markets" tableName="markets" />

## Example query

```sql theme={null}
-- Active markets by category across both venues
SELECT
  venue,
  category,
  COUNT(*) AS active_markets
FROM prediction_markets.markets
WHERE status = 'active'
  AND is_parlay = FALSE
GROUP BY 1, 2
ORDER BY 3 DESC
```
