> ## 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.

# polymarket_polygon.combo_trades

> Polymarket Combos trade fills — multi-leg parlay trades on the v3 Exchange with joint-probability prices, fees, and maker/taker addresses.

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 `polymarket_polygon.combo_trades` table contains trade-level activity for Polymarket **Combos** (multi-leg parlays) on the v3 Exchange. One row per fill, enriched with combo metadata from `combo_details`. A combo's YES token pays out only if every leg wins; its `price` is the joint probability of that outcome.

The exchange emits maker fills plus one aggregate taker fill per settlement — filter `WHERE is_taker_side` for single-counted volume.

## Table Schema

| Column | Type | Description |
| - | - | - |
| `block_month` | `DATE` | UTC month of the event block time (partition key) |
| `block_time` | `TIMESTAMP` | UTC event block time |
| `block_number` | `BIGINT` | Block number in which the trade was executed |
| `action` | `VARCHAR` | Type of trade (RFQ trade) |
| `combo_condition_id` | `VARBINARY` | Combo condition ID (bytes31), shared by the combo's YES and NO tokens; for combo detail join `combo_details` on `token_id = asset_id` |
| `asset_id` | `UINT256` | v3 PositionManager token ID of the combo side traded; joins `combo_details.token_id` |
| `outcome_index` | `INTEGER` | Combo side traded: 0 = YES, 1 = NO |
| `outcome` | `VARCHAR` | Combo side traded as label; Yes pays out only if every leg wins |
| `amount` | `DOUBLE` | Amount in USD (pUSD treated 1:1 as USD) |
| `shares` | `DOUBLE` | Amount of combo shares transferred |
| `price` | `DOUBLE` | Price of the combo side traded = its joint probability (0–1) |
| `fee` | `DOUBLE` | Per-fill fee in USD (reconciles exactly with the Exchange `FeeCharged` events) |
| `maker` | `VARBINARY` | Address whose order was filled. On the aggregate taker fill this is the trader who took liquidity |
| `taker` | `VARBINARY` | Address filling the order. On the aggregate taker fill this is the v3 Exchange itself |
| `is_taker_side` | `BOOLEAN` | TRUE on the aggregate taker fill (one per settlement). Filter `WHERE is_taker_side` for single-counted volume |
| `maker_side` | `VARCHAR` | `BUY` = maker acquiring combo tokens, `SELL` = releasing them |
| `taker_side` | `VARCHAR` | Side of the taker's leg: always the inverse of `maker_side`. On the aggregate taker fill the taker is the exchange, so the trader's own side is `maker_side` |
| `event_id` | `VARCHAR` | Always NULL: a combo has no parent event. Present so `combo_trades` and `market_trades` share the same columns |
| `maker_amount_raw` | `UINT256` | Raw `makerAmountFilled` (6 decimals) |
| `taker_amount_raw` | `UINT256` | Raw `takerAmountFilled` (6 decimals) |
| `order_hash` | `VARBINARY` | EIP-712 hash of the filled order |
| `builder` | `VARBINARY` | Builder attribution field (bytes32) from the signed order |
| `metadata` | `VARBINARY` | Order metadata field (bytes32) |
| `combo_name` | `VARCHAR` | Generated combo name (`question: outcome AND ...`); NULL unless every leg is labeled |
| `token_outcome_name` | `VARCHAR` | Combination of the side traded and the combo name (`Yes-...` / `No-...`); NULL when `combo_name` is NULL |
| `leg_count` | `BIGINT` | Number of legs in the combo |
| `settlement_value` | `DOUBLE` | What the side traded settled at per share (0–1). Realized PnL of a buy = `(settlement_value - price) * shares`. NULL while the combo is undecided |
| `contract_address` | `VARBINARY` | v3 Exchange proxy that emitted the fill |
| `evt_index` | `INTEGER` | Index of the event within the transaction |
| `tx_hash` | `VARBINARY` | Transaction hash |
| `_updated_at` | `TIMESTAMP` | When this row was last inserted or updated by the dbt pipeline |

## Table sample

<TableSample tableSchema="polymarket_polygon" tableName="combo_trades" />

## Example query

```sql theme={null}
-- Combo volume and fees by day (single-counted)
SELECT
  DATE_TRUNC('day', block_time) AS day,
  SUM(amount) AS volume_usd,
  SUM(fee) AS fees_usd,
  COUNT(*) AS num_fills
FROM polymarket_polygon.combo_trades
WHERE is_taker_side
  AND block_time >= NOW() - INTERVAL '30' DAY
GROUP BY 1
ORDER BY 1
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.