How we score races
Every race gets a score from 0 to 1000 based on seven weighted components. A score of 700 or more means the race is close, it matters for control of Congress, and extra money or volunteers could change the result. Those are the races where your time and money will do the most.
Formula
score = (poll_closeness × 0.30
+ expert_ratings × 0.15
+ endorsements × 0.12
+ fundraising × 0.17
+ chamber_proximity × 0.10
+ c1_voting × 0.08
+ c2_voting × 0.08)
× urgency_multiplier × 1000urgency_multiplier = 1.0 for November general elections; up to 1.5× for special elections approaching sooner; 0 for completed races.
C1 is the candidate leading in the polls. When there are no polls, it's the first progressive candidate (Democrat first, then others). C2 is the second-highest poller. In most races C1 = Democrat and C2 = Republican. In multi-candidate races or races where an independent is polling strongly (e.g. Bernie Sanders in Vermont or a third-party candidate in a top-two primary), the C1/C2 slots reflect polling position rather than party affiliation. A minor-party or independent candidate needs at least 15% in the polls to rank above a Democratic or Republican nominee who hasn't been polled.
The most important factor. Races within 5 points score highest. Uses a bell-curve so a 1-point race scores far higher than a 10-point race. Polls older than 100 days are excluded. A poll paid for by a campaign, party or allied group counts as half a poll, because campaigns release the polls that look good for them; the race page says who paid. Most House races have no recent public poll, so for those we estimate closeness from the forecasters (a toss-up counts as about a 2-point race, Lean as 5, Likely as 10, Safe as 20) and count that estimate at 60%. When the only polls are campaign-paid, we average them with the forecaster estimate. A race needs at least one independent poll to be rated URGENT; without one it tops out at IMPORTANT.
Consensus of Cook Political Report, Sabato's Crystal Ball, and Inside Elections. Tossup races score 1.0; safe seats score 0.05. The average of available ratings is used. Defaults to neutral when no ratings are available.
Combines two signals, each half of this component. Cash parity scores higher when the Republican has more cash on hand than the Democrat, because that's where a donation does the most. Momentum scores higher when the Democrat raised more in the latest 90 days of FEC reports than in the 90 days before (doubling or more counts as the maximum; flat is neutral). Defaults to neutral when a candidate has no FEC filings or hasn't been filing long enough to compare.
How close Democrats are to winning the chamber majority. When Dems need to win a large share of competitive races, every seat matters more. Scales with the ratio of seats needed to competitive races available (races whose consensus expert rating is Lean D, Toss-up or Lean R).
The Progressive Punch score of the C1 candidate (poll leader). A candidate with a 95% progressive voting record scores higher than one at 40%. Candidates with no voting record (challengers, open-seat nominees) are scored on the other components instead. This weight is spread across them, so a race isn't ranked lower just because nobody in it has served in Congress.
Same methodology applied to the C2 candidate (second poller). An opponent with a low progressive score raises this component, since replacing a bad vote is worth more.
Endorsements from major progressive organizations including Justice Democrats, Bold Progressives, EMILY's List, Sunrise Movement, and others. Scores the best-endorsed candidate in the race, so a well-endorsed Democrat scores the same whether they're polling first or second. Score scales with the number of endorsing orgs (out of 5 tracked for Senate, 5 for House).
This race is extremely close and the office is powerful. Prioritize here first.
Competitive race worth watching. Contribute after covering URGENT races.
Likely safe or lacks current polling. Check back as election approaches.
Special elections fill seats that were vacated mid-term, before the November general. They get an urgency boost because there's less time left, so help has to arrive sooner to make a difference.
Urgency Multiplier
fraction_early = 1 − (days_to_election / days_to_general)
multiplier = 1.0 + 0.5 × fraction_early
// max 1.5× on election eve; 1.0× for Nov 3 concurrent specialsThe multiplier scales from 1.0 (just inside the 90% threshold) up to 1.5× (election day). Special elections held on November 3 with the general election, like the Florida and Ohio Senate seats vacated by Rubio and Vance, get no boost because their deadline is the same as every other race's. Once a special election's date passes, its score is set to 0 and it moves to the “Completed” filter.
Expert ratings tell you what forecasters think today, but they're slow to update when the political environment shifts. The wave model captures real-time momentum using two live signals and applies them as a logit-space shift to every race projection.
The D–R margin on national generic congressional ballot polling averages (538 avg). A D+7 generic ballot means Democrats are outperforming neutral on every seat. Updated manually as the polling average changes over the cycle.
How much Democrats are outperforming their 2024 baselines in 2025–26 special elections. For each completed special election, we record the actual Democratic vote share and the 2024 general election result for that same seat. The difference is the overperformance for that race.
The weighted average across all special elections uses two decay factors: federal elections (U.S. House/Senate) are weighted 1.0 and state legislative races are weighted 0.7, since federal specials more directly predict federal general election results. Older elections decay linearly over 365 days (minimum weight 0.2) so recent results carry more signal. This average is updated weekly from Ballotpedia.
Because special elections have lower turnout and attract motivated base voters, they historically overstate the eventual general election shift by about 50%. A 0.5 discount factor is applied before incorporating this signal.
Wave Formula
effective_wave = (generic_ballot × 0.6)
+ (weighted_avg_overperformance × 0.5 × 0.4)
logit_shift = effective_wave / 12
// each point ≈ 1/12 logit unit
// +8 pts shifts 50/50 → ~66% DemThe logit shift is applied to every seat's structural win probability (derived from its expert rating). Safe seats barely move, while toss-ups and lean seats shift the most. The result is a probabilistic seat total that reflects the current environment, not just which party historically holds each seat.