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

# Trades

> Kalshi trade executions

## Overview

Individual trade executions from Kalshi's websocket feed. Each row represents a single trade. Available as both **CSV** (gzip-compressed) and **Parquet** (zstd-compressed).

## Columns

| <div style={{minWidth: '240px'}}>Column</div> | CSV type | Parquet type                 | Description                                 |
| --------------------------------------------- | -------- | ---------------------------- | ------------------------------------------- |
| `exchange`                                    | string   | string                       | Always `kalshi`                             |
| `ticker`                                      | string   | string                       | Market ticker                               |
| `local_timestamp`                             | integer  | int64                        | Capture timestamp (nanoseconds since epoch) |
| `exchange_timestamp`                          | string   | timestamp\_micros (nullable) | Exchange timestamp                          |
| `price`                                       | decimal  | float64                      | Execution price                             |
| `quantity`                                    | decimal  | float64                      | Number of contracts                         |
| `taker_side`                                  | string   | string                       | `bid` or `ask`                              |

## Fetching Data

Use the `path` from the [list response](/datasets/kalshi/available-files#finding-exports-for-a-ticker). The download endpoint returns a **302 redirect** to a signed URL; follow it with `curl -L` or equivalent.

<CodeGroup>
  ```python Python theme={null}
  import requests

  def download_trades(path, api_key):
      url = f"https://api.predictiondata.dev/v2/datasets{path}"
      headers = {"x-auth-token": api_key}

      response = requests.get(url, headers=headers, allow_redirects=True)
      response.raise_for_status()

      filename = path.split("/")[-1]
      with open(filename, "wb") as f:
          f.write(response.content)

      print(f"Downloaded to {filename}")

  if __name__ == "__main__":
      api_key = "YOUR_API_KEY"
      path = "/kalshi/KXSB-26-NE/trades/2026-02-03.csv.gz"

      download_trades(path, api_key)
  ```

  ```javascript Node.js theme={null}
  const axios = require('axios');
  const fs = require('fs');

  async function downloadTrades(path, apiKey) {
      const url = `https://api.predictiondata.dev/v2/datasets${path}`;

      const response = await axios.get(url, {
          headers: { 'x-auth-token': apiKey },
          responseType: 'arraybuffer'
      });

      const filename = path.split('/').pop();
      fs.writeFileSync(filename, response.data);
      console.log(`Downloaded to ${filename}`);
  }

  (async () => {
      const apiKey = "YOUR_API_KEY";
      const path = "/kalshi/KXSB-26-NE/trades/2026-02-03.csv.gz";

      try {
          await downloadTrades(path, apiKey);
      } catch (error) {
          console.error("Error downloading data:", error.message);
      }
  })();
  ```

  ```bash cURL theme={null}
  curl -L -H "x-auth-token: YOUR_API_KEY" \
    "https://api.predictiondata.dev/v2/datasets/kalshi/KXSB-26-NE/trades/2026-02-03.csv.gz" \
    --output trades.csv.gz
  ```
</CodeGroup>

## Notes

* All prices are in the **YES contract** frame. Prices are calculated as `1 - price` for NO-side trades.
* `taker_side` indicates whether the taker was buying (`bid`) or selling (`ask`).
* Prices and quantities are rounded to 4 decimal places.
* `local_timestamp` is nanoseconds since Unix epoch (when our servers captured the message).
* `exchange_timestamp` is when the event occurred on Kalshi. In CSV it is an RFC 3339 string; in Parquet it is stored as `TimestampMicros`.
* Each export covers one UTC day (00:00:00 to 23:59:59).
