How the Oracle actually works
No black boxes. Here is every step between a raw poll and the numbers on this site.
What this is
A work in progress from the team at Policy y Peaches. Its foundation is a set of weighted polling averages — polls are weighted by a hybrid pollster-quality score and recency, as of the date stamped on each page. On top of that foundation, the Senate Forecast page runs a probabilistic simulation of chamber control and compares the result against prediction-market prices. The shaded bands on the charts are confidence intervals around the polling average.
The three trackers
- Presidential approval — weighted average of job-approval polls, with a daily trend and CI band.
- Generic ballot — weighted average of the national D-vs-R congressional preference, reported as a margin. The “estimated seats” figure is a directional translation from a historical slope.
- Senate — per-race weighted polling averages. Click any race card to chart how our win probability for that race has moved over time. Chamber-wide win probabilities live on the Senate Forecast page.
Comparison & nowcast layers
- Model comparison (homepage) — our approval average shown alongside Silver Bulletin’s published model, an unweighted VoteHub poll average, and 50+1 when available. Each line is that source’s own output; we don’t blend them.
- NYT vibes adjustment (Senate) — an experimental, bounded (±3 pt) overlay on the base race average derived from sentiment-scored New York Times coverage. Full explainer on the Senate page. Off by default.
- Senate control simulation — 50,000 Monte Carlo simulations of the key races with correlated national polling error, optionally blending Polymarket/Kalshi implied odds at a tunable weight. It shows where the chamber stands today given current polling and market prices.
Data & refresh
Polling data is refreshed by a scheduled job that runs the model pipeline twice a day and publishes static JSON — including the hierarchical state-space estimates (house-effect-corrected approval and generic ballot). If a primary feed stops delivering new polls for more than 72 hours, the pipeline tops it up from Wikipedia’s national polling tables and flags the feed below.
| Feed | Polls in average | Most recent poll |
|---|---|---|
| Presidential approval | 1,833 | Jul 31, 2026stale |
| Generic ballot | 395 | Jun 28, 2026stale |
| Senate races | 112 | Jul 30, 2026stale |
Pipeline last run Aug 4, 2026, 11:07 PM. “Most recent poll” is the newest survey in each feed — if those dates start drifting behind today, the upstream polling sources need a refresh. Reminder to the team: keep the source CSVs current.
A work in progress from the team at Policy y Peaches. Learn more here.
Last updated: Aug 4, 2026, 11:07 PM
