Midterm Pulse2026US Electionsby Jorge Garcelán
Election nightENES

HOW IT WORKS · MP-26

From every poll to one probability.From every poll to one probability.

MP-26 turns public polls (VoteHub and Wikipedia) and its own race-level baseline into House and Senate odds in seven auditable steps. Every chart below runs on the live model, its data and its engine.

Loading the live model…

The short version

Five steps, no math.

  1. 01

    Start from the 2024 map

    Each of the 435 House districts and 35 Senate races starts from how it voted for president in 2024 against the country, plus the edge of the party defending the seat: who is ahead, and by how much.

    —e.g. one Senate race
  2. 02

    Take the country's temperature

    Average the national polls that ask which party people will vote for in Congress, newer, bigger and likely-voter polls counting more, and check it against what the Senate polls imply: few national polls have come out since the summer.

    —weighted average of all two-party polls
  3. 03

    Add the race's own polls

    Every race moves with the national average. Where a race has its own polls, they are blended in, weighted by how precise they are; how much each piece counts was fitted on past midterms.

    2014–2022the midterms the weights are fitted on
  4. 04

    Admit what we don't know

    Any race can miss by around 7.5 points. Part of that miss hits every race at once, because polls tend to be wrong in the same direction everywhere.

    ±7.5points per race, ±2.9 of it shared nationally
  5. 05

    Play the election 50,000 times

    Each run rolls the dice for the country and for every race, then counts the seats. The odds are simply how often each party wins a majority.

    —House and Senate odds

Want the math? The seven steps below run on the live model. Unsure about a word? Read the glossary →

01 Inputs

Public polls and the 2024 map feed the model. Everything else is context.

MP-26 does not collect polls or rate races itself. It reads public polls from VoteHub (CC BY 4.0), national and race by race, and Wikipedia's Senate polls (CC BY-SA 4.0), builds each race's starting margin from the 2024 presidential results and the party defending the seat, adds the current Senate composition, and keeps other data strictly out of the probabilities.

  • Refresh every 15 minutes, with a dated fallback snapshot
  • Model run —

Feeds the model

VoteHub pollsGeneric-ballot polls→ weighting
2024 presidential leanEvery race against the country→ race margins
119th Congress47 D caucus · 53 R · 34 D and 31 R seats not up→ fixed Senate seats

Context only

Census boundariesMaps and district shapesnot an input
FEC filingsCandidates and finance on race pagesnot an input
PolymarketCompared against the model, never blendednot an input

02 Poll weighting

Recent, large, likely-voter polls count most.

Every poll gets a weight from three factors. Recency halves every 14 days, sample size counts by its square root, and likely-voter samples beat registered voters and adults. The weighted average of the national polls is the generic ballot; the next step blends it with what the Senate polls imply.

w = 0.5age/14 × √(n / 1,000) × pop
  • pop LV 1 · RV 0.86 · A 0.72
  • Result —
  • Partisan a poll paid for by one party counts ×0.5 and moves 4 points against it; real examples in step 03
Loading polls…

03 Movement

Each race starts from its own number, and you can take it apart.

There is no outside forecast to catch up with. Each race starts from today's national environment (the generic ballot blended with what the Senate polls imply once each state's fundamentals are taken out), plus its 2024 presidential lean and the incumbent's edge: in the House, part of how far the incumbent ran ahead of the 2024 presidential result where their party already held the seat. Weights are fitted on the 2014–2022 midterms. Where the race has its own polls, they are blended in by their precision; polls paid for by one party count half and are corrected 4 points.

margin = environment + a + b × lean2024 + c × incumbent + k × personal vote
Loading the races…

04 Race odds

Every race becomes a probability.

Each of the 470 races starts from its own baseline margin. A normal error of ±7.5 points turns that margin into a win probability.

  • Tipping point —
Loading races…

05 Error budget

Races miss together, not one by one.

Polls tend to miss in the same direction everywhere. So each race's error is split in two: a national error shared by all races, and local noise of its own.

outcome = margin + national + local
  • National ±4.1 ballot pts × 0.7 = ±2.87
  • Total per race ±7.5 pts
Loading…

06 Simulation

Run the election 50,000 times.

One simulation draws a national error, then a local error for every race, and counts the seats each party wins. Repeat 50,000 times per chamber and the share of runs with a majority is the control probability.

  • House 435 districts, 218 to win
  • Senate 35 races + 65 seats not up; a 50–50 tie goes to the GOP via the Vice President
Loading…

07 Outputs

One response feeds the whole site.

The API returns control odds, seat medians and 80% intervals, and a probability for every race. The home story, the Senate builder, the district map, race pages and the model page all read the same numbers.

  • Deterministic fixed seeds: same inputs, same output
  • Cached until the polls or date change
Loading…

08 Versions & limits

Versioned, documented, and backtested.

Every change to the method gets a new version and a changelog. MP-26 as it runs now has been replayed on the 2018 and 2022 midterms and scored; its coefficients are fitted on the 2014–2022 midterms, so that test is not independent and the model stays labelled experimental.

Model validation →Sources and methodology →
  1. v0.1Top-down chambers against a fixed D+7.4 baseline. The Senate read 69% while its own races implied 43%.
  2. v0.2Like-for-like movement, Senate simulated race by race, race error calibrated to the benchmark.
  3. v0.3House simulated race by race too; national error sized to the benchmark's correlated error.
  4. v0.4Race margins read as the benchmark's expected D−R vote, not its expected winning margin; race error refitted to ±7.5.
  5. v0.5 · currentOwn baseline instead of an outside benchmark: 2024 presidential lean, incumbency and the incumbent's 2024 personal vote, moved by the national environment and blended with each race's polls (party-sponsored polls corrected), fitted on the 2014–2022 midterms. Polls from VoteHub and, for the Senate, Wikipedia, with a 14-day half-life.

Known limits

  • Normal errors; real misses can have fatter tails.
  • One national factor; no regional correlation.
  • No pollster house effects beyond a correction for party-sponsored polls; incumbency and the incumbent's personal vote are the only candidate factors.
  • The baseline is fitted on the 2014–2022 midterms, the ones it is replayed on, so that test is not independent.