Methodology

How Vugol Me aggregates polls

The polling average is intentionally simple and fully documented below. Every published number is versioned, checksummed and reproducible from a stored input snapshot.

What is validated, and when

Five things on this site are easy to mix up. They are separate.

  • The Vugol Vector is our call for every race, if today’s polls hold. Where a race has a verified polling average, the Vector follows it. Elsewhere it comes from our proprietary ensemble model, which weighs a multi-signal input matrix (verified polling, past results, campaign finance and the national environment) and is recalculated nightly. Every call carries a model version and a checksum. It is a snapshot of today, not a win probability or a vote share. Today's Vugol Vector.
  • Vugol Tensor is an experiment about uncertainty, not a better guess. It starts from the Vector's margin in each race, applies no partisan shift, and adds the polling error measured over 14 election cycles (a shared national error and a race-level error) to give ranges and chamber-control odds. The model, its backtest including what did not work, and its pre-registered 2026 scoring are in the methodology paper. Vugol Tensor.
  • Vugol Attention measures noise, not support. It counts how much news and online activity a race gets. A high score means people are paying attention; it says nothing about who is ahead. How Vugol Attention is built.
  • Verified polls are separate. Poll averages use only polls from pollsters staff have verified, and they are shown as polls. The Vugol Vector follows them where they exist.
  • Vugol race polls never feed any number. Answers from site visitors are shown for interest only. They do not enter a poll average, the Vugol Vector, Vugol Tensor, Vugol Pulse or Vugol Attention.

Milestones

  • Roster accuracy, ongoing, nightly. Integrity checks run every night and send roster mismatches (retirements, primary losers still listed, missing incumbent flags) to staff. See race data.
  • Calibration check, by October 20, 2026. Where a race has both a verified poll average and a Vugol Vector model call, we publish how often they point the same way, and where they disagree. Read the check. It is a consistency check between two inputs, not an accuracy test.
  • Results check, published by December 15, 2026. After the November 3 election we compare every Vugol Vector call with the official results and publish the full list, misses included.

What is published, and what is not

We do not call the model open. Here is exactly what you can check yourself, and the one part you cannot.

  • Published: the inputs. Every verified-poll average is a release with its stored input snapshot and a SHA-256 checksum. You can recompute it from the manifest alone. How to verify a release.
  • Published: model versions. Every number carries the version that produced it (vector-1.1.0, tensor-1.0.0), and old versions stay traceable.
  • Published: the Vugol Tensor method. The model, its 14-cycle backtest (including what did not work) and its pre-registered scoring are in the methodology paper.
  • Published: the polls API. Every verified poll is available as JSON or CSV with its source, under CC BY 4.0. Data & API.
  • Not published: the Vugol Vector weighting. For races with no verified poll, the Vector comes from our proprietary ensemble. Its input types are listed here and every call is stored with its inputs and a checksum, so it is auditable, but the weights are ours. Where a verified poll exists, the call follows the poll average, which is fully reproducible.

Four words, used precisely

  • Verified, staff have confirmed the pollster’s identity (the organization exists and answers for its work) and that it publishes its methodology. It is a statement about the source, not an accuracy score. Only verified pollsters enter aggregates. A verified poll also needs a public link to the pollster’s own release; a poll from a verified pollster without one is shown as “No source on file” and is not averaged. Who verifies: Vugol Me staff, following the written editorial process. New pollsters start quarantined: shown, never averaged.
  • Checksummed, a release carries a SHA-256 over its inputs, model version and outputs; pages recompute it at render time, and a changed byte anywhere shows up as a mismatch.
  • Reproducible, the release manifest stores every input and the model version, so anyone can rerun the published function and obtain the same numbers.
  • Audited, we do not use this word for our own work. It applies only once an independent third party has examined the ledger and published its findings; none has yet.

What enters an aggregate

  • Only polls from verified pollsters. New pollsters are quarantined until reviewed.
  • Each poll is weighted by sample precision (effective sample size), recency (older polls decay), and a reduced weight for partisan-sponsored polls, which are down-weighted, never silently dropped.
  • Syndicated polls that share an underlying sample are collapsed to a single measurement, so one poll re-reported by several outlets is not counted several times.
  • Anonymous or self-selected “community” responses never enter a scientific aggregate, regardless of volume.

What triggers human review

Rather than a single fixed rule, a newly-arrived poll is held for a human when it does any of the following:

  • changes which option is leading;
  • moves a statewide average by more than 2 points;
  • moves a national average by more than 1.5 points;
  • accounts for more than 25% of the aggregate's weight; or
  • lands more than 2.5 standard deviations from the model's expectation.

These thresholds are starting points, to be calibrated against past elections before any confidence labels are published. A held poll is decided within 24 hours on business days; see the editorial process.

National trackers and issue polls

Presidential approval, the generic ballot, approval of Congress, the Supreme Court and cabinet members, favorability, and issue polls load automatically every night.

  • Sources, licence first. The VoteHub polls API (CC BY 4.0), which links every poll to the pollster’s own release, and Wikipedia’s poll tables (CC BY-SA 4.0), linked to the exact revision read. We never copy another site’s average, and we never read sites whose terms forbid it.
  • Provenance. Every fetch is hashed (SHA-256) and stored with its URL, retrieval time and licence; every poll records the parser version that read it and links to its source. Parsing is deterministic code, with no language model involved.
  • Automatic publishing. A poll publishes without a person only when it passes every check: field dates in order, not in the future and at most 45 days long; a stated sample of 200 to 60,000; a stated population (adults, registered or likely voters); toplines between 0 and 100 that sum to about 100; not a duplicate of a poll already on file (from either source); and its lead number within 12 points of the median of other pollsters’ polls of the same question in the surrounding month. Anything else waits for staff, with the reason shown. The operator can pause loading, turn automatic publishing off, or change the outlier distance at any time.
  • Our averages. Only verified pollsters count. Each counts once (its latest poll in the last 60 days), weighted by sample size, recency (14-day half-life) and half weight for partisan sponsors: the same weights as our race averages. We show the weighted share as polled, so undecided respondents are not reallocated. At least three verified pollsters, or no number.
  • Question wording. The sources give toplines, not always the verbatim question, so each tracker stores a standard wording marked as such; the source link has the pollster’s exact text.
  • Unverified pollsters. Polls from pollsters not yet verified by staff are listed and labelled on each tracker but never counted in its average (since October 24, 2026); national trackers never enter a checksummed release.

Corrections

Published releases are immutable. When a pollster corrects a number, we publish a new release that supersedes the old one and records what changed; the earlier release stays accessible, marked superseded. How to report an error is on the corrections page.

Economy snapshot (November 2024 vs. now)

  • The economy page shows a fixed list of official statistics (everyday prices such as gas, milk and eggs; inflation; jobs and pay; household finances, poverty and inequality; borrowing; growth), plus unemployment and jobs in each state, for the period that included Election Day 2024 and for the latest release. The list is set in code and changes only with a new published version, never day to day.
  • Sources are U.S. government agencies (BLS, BEA, EIA, the Labor Department, the Federal Reserve, Treasury, FHFA) and Freddie Mac for the mortgage rate, read each morning from FRED (Federal Reserve Bank of St. Louis), which republishes them unchanged, plus the Census Bureau’s own historical tables for poverty and household income brackets. Each file’s SHA-256 checksum is stored, and a series with an implausible value is held back.
  • The page shows direction only, with no grades and no good-or-bad colors, and makes no claim about causes. These figures never enter a polling average or a race rating.

Vugol Pulse (the daily question)

  • Vugol Pulse asks one thumbs-up or thumbs-down question a day about the previous day’s news, on topics national pollsters are unlikely to ask. Anyone can answer, so the results describe Vugol Pulse readers, not the public: they are self-selected, kept in separate tables, and never enter an average, a tracker or a race rating.
  • An AI model drafts three questions each morning from news reports it finds by web search. Fixed code rejects drafts with loaded wording, topics pollsters already track, subjects involving deaths, victims or minors, opinion pieces as sources, or any link the search did not return. Staff review the drafts; if none is approved by 8:20 am Eastern the top draft is published and labeled as unreviewed.
  • Visitors may answer 3 questions without an account, then sign in. One answer per person per question; results appear after you answer and stay open for 7 days.

Vugol Me reader approval (thumbs on a profile)

  • What it is. A thumbs up or thumbs down on a person’s profile page. It is called Vugol Me reader approval, not a scientific poll: anyone who visits can vote, so the number describes the readers who chose to vote, not voters or the public.
  • One vote per person. Each reader has one vote per politician and can change it or take it back; the latest vote is the one counted. A browser can vote on one politician with no sign-in, on a second after a skippable sign-in offer, and needs a Google sign-in from the third. When a browser later signs in, its votes move to the account, the account’s own vote wins where both voted, and nothing counts twice. This limits casual repeat voting; it does not stop a determined person with several accounts, which is one more reason the number is not a poll.
  • What is shown. The share who approve, always next to the number of votes, starting from the first vote, so a small count is visible as small. A state is broken out only once it has 30 votes; smaller groups are never shown.
  • Kept apart. These votes live in their own tables and pages. They are never combined with a poll, never enter an average, the Vector, the Tensor or any rating, and never count toward a pollster’s record.
  • Optional details. A reader may give a ZIP code (looked up in their browser and not stored; we keep only the state and congressional district) and, one question at a time on later votes, an age band, party identification and 2024 vote. All are optional and used only for group totals. See the privacy policy.

Vugol Attention, Pulse, Vector, Tensor, Bench

Polls cover a few dozen races. In-house signals give every race a brief. None of them is a poll, and every page that shows one says so.

  • Vugol Attention score (0–100) measures attention: Wikipedia pageviews, GDELT news volume and tone, and Bluesky posts for each candidate, log-scaled per source and summed. Vugol Attention (50%) is the race's percentile among all rated races that day; momentum (30%) compares the trailing 7 days to the 21 days before; breadth (20%) is the share of tracked sources with activity. News tone is reported separately and never folded into intensity. Model attention-1.0.0 (renamed on October 19, 2026 from pulse-1.0.0, because “Pulse” now means only the daily reader question. Same model, same maths; rows stored before that date keep the earlier id so they stay traceable).
  • Vugol Vector, our call for each race if today’s polls hold, with a band for how firm it is: Anchored, Held, Tilting or Open (a toss-up, called for whichever side is ahead by any margin). Where verified polls exist, the call follows their average. Elsewhere it comes from a proprietary ensemble model: a multi-signal input matrix of verified polling, the seat's past results, campaign finance and the national environment, with proprietary weighting, recalculated nightly. A race without enough stored inputs is left unrated rather than guessed. Every call is stored with its model version (vector-1.1.0), its inputs and a checksum, so any published number can be audited. Subscribers on Ultra Pro plans see each race's input breakdown.
  • Bench is an index of disclosed campaign expenditures, built from FEC Schedule B operating expenditures: payees normalized, purposes categorized by keyword, operational spend (payroll, rent, travel, refunds, taxes) excluded, ranked by clients then dollars, every row linked to the filings. Only organizations are indexed: payments to individuals (FEC entity type individual or candidate, or a payee named as a person) are never stored or shown. Bench is paused until after November 3 while the index is rebuilt with amendment and memo-entry handling. Model bench-1.1.0.
  • Race briefs are written by a language model from the stored numbers only; the generator may not add facts, and any number in the text that is absent from its inputs rejects the brief. The model id, prompt version and input hash are stored with each one. Brief generation is paused until after November 3.
  • After the November 2026 election we publish a backtest of every Vector, misses included, by December 15, 2026. Dates for every check are under what is validated, and when.

Geography

ZIP codes are used only for coarse discovery. A ZIP does not reliably determine a voter's ballot, some cross county and district lines, so district-level claims require address-level resolution, not a ZIP-to-ballot guess.

Public polls API

GET /api/public/polls, no auth, read-only, the same data /latest-polls shows. Query params, all optional:

  • office, senate | house | governor | statewide
  • state, two-letter state code
  • pollster, substring match against pollster name or poll title
  • contestKey, exact race key, e.g. US-NC (the same key in a race's URL)
  • format, json (default) or csv
  • limit, max polls returned, default 100, hard cap 500

Rate limit: 30 requests per 60 seconds per caller IP, fixed window; a caller over the limit gets 429 with a Retry-After header. Responses are cached 60 seconds at the edge. Every field mirrors v_poll_feed: pollster name and tier (verified/quarantined, see pollsters), field dates, sample size, computed margin of error, and topline shares per candidate. total is the number of polls matching the filters (not the rows under them). When totalAtLeast is true it is a lower bound (a broad pollster search is not counted exactly).

Race polls, results, money and dates

A nightly job reads the Wikipedia article for every Senate, Governor and House delegation race (licensed CC BY-SA 4.0; we link the exact revision) and the Federal Election Commission's public API (public domain). Parsing is fixed code, not a language model. Every stored row keeps its source URL, retrieval time, parser version and the SHA-256 of the exact bytes we read.

  • Polls. Only individual polls are read; poll averages published by other sites are never copied. Each poll links to the pollster's own release. General-election polls feed the race page; primary, runoff and hypothetical-matchup polls are kept on file and never averaged. Pollsters new to us start quarantined (shown, not averaged) until staff verify them. We do not copy proprietary race ratings; the rating shown is our own.
  • Automatic publication. A poll publishes without a reviewer only if all of these hold: sample size known and between 150 and 30,000; field period at most 60 days and ended after the 2024 election and not in the future; candidate shares at least 30% in total and all shares at most 103%; a link to the pollster's release; and, when the race has 3 or more recent polls, a margin within 15 points of their median. Anything else, and any poll whose numbers changed after we first read it, waits for staff review. Staff can tune every threshold (admin setting race_polls_rules).
  • “Within margin of error.” A poll's quoted ±MOE applies to each candidate's share. The uncertainty of the gap between the top two is larger, because when one share is high the other tends to be low. For a single poll we compute the 95% margin of error of the lead as 1.96 × √((p₁ + p₂ − (p₁ − p₂)²) / n) and flag the poll when the lead is smaller. That assumes simple random sampling; real polls are weighted, so the true interval is wider still. Polling averages are not flagged this way.
  • Same pollster and dates in two races. One survey often asks about several contests, for example a state's Senate and Governor races, and the pollster publishes a result for each. We store one entry per race, so the same pollster and field dates can appear twice. These are different questions, not duplicates. Repeat copies of the same result for the same race are collapsed to one entry.
  • Results. Primary and runoff vote counts are transcribed from the article's result tables, which cite the state's official results. A table publishes when its percentages add to 100 (±1.5) and its votes add to the stated total (±2%); otherwise it is held (race_results_rules). The general-election table lists who is on the November ballot; it drives “Incumbent running” / “Open seat” and the “Lost primary” tags. A nightly check sends roster mismatches (retiring incumbents, missing incumbent flags, primary losers still listed as running) to staff.
  • Money. Raised, spent and cash on hand per candidate committee from the FEC candidate totals, as of the committee's latest report.
  • Dates. Primary, runoff, special and general election dates by state from the FEC's official list. Registration deadlines and early-voting windows are not yet carried: no official national source allows automated reuse.