Kalshi lists a market for every US Senate, House and governor race, and for which party controls each chamber. Its API gives free candles and trades. Kalshi Eye adds every order book change and a minute-by-minute price for each: 984.6 million rows across 446 election series.
Checked against Kalshi's API and the files on November 2, 2026.
Where the markets are
| Race | Series | Markets |
|---|---|---|
| Senate control | CONTROLS | CONTROLS-2026-D, CONTROLS-2026-R (2028 has its own pair) |
| House control | CONTROLH | CONTROLH-2026-D, CONTROLH-2026-R |
| Senate race | SENATE + state: SENATETX, SENATEME; Ohio's special election is SENATEOHS | SENATETX-26-D, SENATETX-26-R |
| Governor | GOVPARTY + state: GOVPARTYMI | GOVPARTYMI-26-D, GOVPARTYMI-26-R, plus one per independent candidate |
| House race | HOUSE + state + district: HOUSECA22; a few newer ones start with KX, like KXHOUSEUT02 | HOUSECA22-26-D, HOUSECA22-26-R |
| Seats, margins, turnout | KXDSENATESEATS, RSENATESEATS, KXMIDTERMMOV, KXMIDTERMVOTETURN | One market per range or outcome |
Each race is a series with a market per side: -D pays if the Democrat wins, -R if the Republican does. Elections outside the US work the same way: KXISRAELPM, KXSPAINPARLI, KXCHICAGOMAYOR, KXTORONTOMAYOR.
From price to odds
A YES contract pays $1 if its side wins, so its price reads as the market's odds. At the end of November 1, 2026, SENATETX-26-D had a YES bid of 0.68 and an ask of 0.69: the market put Democrats' chance in Texas at about 68–69%. The mid, halfway between bid and ask, is the usual single number. The two sides of a race add up to a little more than 100% at the asks and a little less at the bids; the difference is the spread.
Daily odds for one race
bbo_1m has a row for every minute of every market, so a day's closing odds are its last minute:
SET TimeZone = 'UTC';
-- Each day's last minute: the YES mid for each side of the Texas Senate race.
SELECT date_trunc('day', minute::TIMESTAMPTZ) AS day,
arg_max(mid_close, minute) FILTER (WHERE ticker = 'SENATETX-26-D') AS dem,
arg_max(mid_close, minute) FILTER (WHERE ticker = 'SENATETX-26-R') AS rep
FROM read_parquet('kalshieye-data/bbo_1m/date=*/series=SENATETX/*.parquet')
GROUP BY day
ORDER BY day;Minute by minute on election night
Polls start closing at 6 PM Eastern on November 3 (11 PM UTC), and most results come after midnight UTC, so election night is in the November 3 and November 4 files. Each day is published the next morning.
from kalshieye import Client # pip install "kalshieye[pandas]"
kx = Client() # reads KALSHIEYE_API_KEY
bars = kx.load("bbo_1m", "2026-11-03", "2026-11-04", series="CONTROLS")
odds = bars.pivot(index="minute", columns="ticker", values="mid_close") # one column per partyFree hourly candles from Kalshi
For a quick look without downloading anything, Kalshi's candlesticks endpoint gives the hourly bid and ask for any market, without an API key. See How to get Kalshi historical data for the rest of the API.
import time
import requests
API = "https://external-api.kalshi.com/trade-api/v2"
now = int(time.time())
candles = requests.get(
f"{API}/series/SENATETX/markets/SENATETX-26-D/candlesticks",
params={"start_ts": now - 7 * 86400, "end_ts": now, "period_interval": 60},
timeout=30,
).json()["candlesticks"]
for c in candles:
print(c["end_period_ts"], c["yes_bid"]["close_dollars"], c["yes_ask"]["close_dollars"])Every path is under https:/.
Questions
Does Kalshi have historical election odds?
Its API returns candles (1-minute, hourly or daily bid, ask and traded price) and every trade for each market, free and without a key. It has no past order books. Kalshi Eye records every order book change and trade, with minute bars of the mid ready made.
What is the Kalshi ticker for control of the Senate?
The series is CONTROLS. Its 2026 markets are CONTROLS-2026-D and CONTROLS-2026-R; House control is CONTROLH.
How do I find the market for one House district?
Most are HOUSE plus the state and district, such as HOUSECA22 for California's 22nd; a few newer ones start with KX, such as KXHOUSEUT02. The list of every Kalshi series filters as you type, so a state's name finds its races.
What time zone are the files in?
Each file is one UTC day. Election night runs past midnight UTC, so it spans two files.
Next
- Every Kalshi series: search by race or state.
- Kalshi order book data: how the book works and how to rebuild it.
- Kalshi vs Polymarket data: reading both venues' election markets.