35 contests on the ballot
Waiting for results…
A small, transparent election-night forecast. Federal races start from a frozen snapshot of polls and market prices; live county results are compared with past elections as votes arrive.
Waiting for results…
Waiting for results…
The chamber bars show forecast confidence across all seats. They are not race calls. Senate seats outside this election are counted as held. Race probabilities are exploratory estimates and can move sharply as different kinds of ballots are counted.
House and Senate records from civicAPI. Race cards show whether a result has actually been posted.
Each box is one new race-results batch. Higher means stronger Democratic control odds; lower means stronger Republican control odds. Older cars move left as new cars arrive on the right. Hover, focus, or tap a car for its votes and local detail.
Only the 15 newest cars per chamber remain visible. The feed publishes cumulative totals, so a car can include several counties reported together. When county detail is absent, it is labeled as a race-wide batch. Cars show the change in the shared national model; county adjustments on race pages are separate. If several races update in one feed pull, their individual odds changes depend on processing order; their combined change matches the model.
Eight statewide offices, statewide ballot measures, and Supreme Court retention votes. Polls close at 8 p.m. Pacific; early returns can be skewed by ballot type.
Measures A through J, plus San Francisco’s votes on Regional Transit Measure RTM. RTM needs a majority across five Bay Area counties; its San Francisco tally alone cannot determine passage.
For each federal race, a one-time Nov 3 snapshot stores the race polling average, available Kalshi and Polymarket winner prices, and a fundamentals estimate. Polling Forecast supplies the poll averages and fundamentals. Poll odds come from a logistic curve: a tied poll means 50/50; a 20-point margin gives about 98%. We blend poll and market odds on a log-odds scale, giving market prices 55% weight. If one input is missing, we use the other. If both are missing, we use the fundamentals estimate. Inputs are shown on each race card and never refresh.
A saved county baseline combines presidential results from 2016, 2020, and 2024, weighting recent elections more heavily. When civicAPI supplies county vote totals, we compare the reporting counties' historical partisan lean with the historical lean of the whole state or House district. That difference adjusts the observed race margin before it enters the forecast. The adjustment is capped and smaller for House districts, where county lines may cross district lines. It activates only when at least two counties report enough votes and their totals agree with the race total. The race card identifies an active county adjustment.
House and Senate vote totals come from civicAPI, with Open America as a secondary feed. As reporting rises, the forecast moves from its saved prior toward the observed two-candidate margin, corrected for county mix when the data support it. Without usable county detail, the existing race-level calculation applies; without a reporting figure, the saved prior holds. Reporting percentages are not shares of votes counted, and ballots within a county may arrive in a skewed order. This remains an experimental model without calibrated uncertainty. Chamber-control odds and their timeline are calculated on the server from national race totals and stored for all visitors; county refinements remain on race cards. A new history point is recorded when someone opens the site and official totals have changed. San Francisco measures show counts without a forecast; RTM requires a five-county majority.