Polls methodology
How every average is computed.
Exactly how the poll averages on this site are computed, so anyone can reproduce them from the published poll tables.
What the average is
The average is a weighted arithmetic mean of published polls. It is a summary of what polls reported on a date. It is not a forecast, a probability or a prediction of any result. Polls can differ from election results by several points.
The steps
- As-of date. Ages are counted from the date the snapshot was built, shown on every page.
- Window. Only polls whose last field date is within 60 days before the as-of date are used. Polls ending after the as-of date are not used.
- One count per pollster. When several polls from the same pollster have overlapping field dates, only the one with the latest last field date is kept. If those tie, the later start date wins, then the poll id. Polls from one pollster that do not overlap are all kept.
- Weights. Each poll gets weight = recency weight x sample weight.
- Average. For each option, the average is the sum of (weight x reported value) divided by the sum of weights, over the counted polls that report that option.
- Range. Next to each average we show the lowest and highest reported value among the counted polls, the number of polls, the number of pollsters and the date range.
- Minimum. With fewer than 3 counted polls, no average is shown. The polls are still listed.
The constants
- Recency half-life, presidential approval
- 14 days
- Recency half-life, generic ballot
- 21 days
- Recency half-life, race polls
- 21 days
- Window
- 60 days
- Sample weight reference size
- 1,000 respondents
- Sample weight cap
- 1.5 (reached at 2,250 respondents)
- Sample size assumed when not reported
- 1,000
- Minimum counted polls
- 3
Recency weight = 0.5 ^ (age in days / half-life), where age is the as-of date minus the poll's last field date. A poll that ended one half-life ago counts half as much as one that ended today.
Sample weight = the smaller of sqrt(n / 1,000) and 1.5. Larger polls count more, with diminishing returns.
Worked example with a 14-day half-life: poll A ended today, n = 1,000, so weight 1 x 1 = 1. Poll B ended 14 days ago, n = 4,000, so weight 0.5 x 1.5 = 0.75. If A reports 50 and B reports 40 for an option, the average is (50 x 1 + 40 x 0.75) / 1.75 = 45.7.
Polls that name different candidates
An average only makes sense within one matchup. On a race page, polls that name different sets of candidates are grouped and averaged separately. Groups are shown with the most polls first, then alphabetically. Candidates and options are always listed alphabetically by last name, never by their numbers.
What is not done
- No house-effect adjustment: a pollster's numbers are not shifted toward or away from other pollsters.
- No pollster quality ratings and no weighting by sponsor. Internal polls and sponsor affiliation are shown in the Disclosure column of every table, and the average counts them like any other poll.
- No likely-voter modeling. Populations (likely voters, registered voters, adults) are shown as reported and are mixed in the average.
- No forecast, probability or ranking of any candidate or party.
- No numbers are changed, rounded away or filled in. Rows missing a pollster, field dates, a source link or at least two numeric answers are left out of the snapshot.
Data, license and attribution
Poll data comes from VoteHub, which publishes it under the Creative Commons Attribution 4.0 license. VoteHub in turn collects polls from the pollsters and outlets named in each row. Every poll table has an Original source column that links to the page where the poll was published. We changed the data only by selecting fields and grouping rows. The averages are our own calculation from those rows.
The presidential approval series covers polls of Donald Trump's job approval. The generic ballot series covers national polls that ask about a generic Democratic or Republican candidate for Congress. Race polls cover 2026 general elections for U.S. Senate, governor and U.S. House; primary polls are left out.
The data is refreshed by a script that runs on a schedule. The fetch time is shown in the source note under each table and chart. VoteHub's interface is in beta, so a refresh can be late.