How it works
There's no server — every dataset is a static file served from this site (GitHub Pages), refreshed every ~10 minutes (~2 min for results on Election Day). All files are CORS-enabled, so you can fetch() them directly from the browser. Please cache politely and credit "2026 Turnout & Results Tracker."
Endpoints
| What | Path |
|---|---|
| State registry | assets/states.json |
| Status manifest (all states + results) | data/status.json |
| State turnout (per state) | data/<st>/latest.json |
| State turnout history | data/<st>/history.jsonl (one JSON per line) |
| County result margins (per state) | data/<st>/results_county.json |
| Final archive (after certification) | data/<st>/final_2026_general.json |
| Results (by office) | data/results/{senate,governor,house,measures}.json |
| Race slate + chambers | config/results_races.json, config/chambers.json |
| County geometry | assets/<st>-counties.geojson (AK: -boroughs, LA: -parishes) |
| National states geometry | assets/us-states.geojson |
| Town→county crosswalks | assets/crosswalks/<st>-town-county.json |
Turnout schema (latest.json)
{
"state": "fl", "state_name": "Florida",
"election": { "date": "2026-11-03", "name": "2026 General" },
"source_compiled": "...", "generated_at": "2026-..Z",
"methods_present": ["mail_voted","early_voted","election_day",...],
"statewide": { "cast": {"rep","dem","oth","npa","total","margin"},
"mail_voted": {...}, "registered": N, "turnout_pct": P },
"counties": { "Miami-Dade": { "fips":"12086",
"cast": {"rep","dem","oth","npa","total","margin"},
"<method>": {...}, "registered": N, "turnout_pct": P } },
"partisan": true, "data_hash": "..."
}
Turnout-only states set partisan:false and use party-less blocks (total only). Margin > 0 = Republican registration lean; < 0 = Democratic.
Examples
// national early-vote totals fetch(BASE + "data/status.json").then(r => r.json()) // Florida county turnout fetch(BASE + "data/fl/latest.json").then(r => r.json()) // live Senate results + balance of power fetch(BASE + "data/results/senate.json").then(r => r.json())
Embeds
Drop-in iframes: embed.html?w=balance&chamber=senate, embed.html?w=state&state=fl, embed.html?w=national.
Downloads
Per-state turnout JSON + history, and results files:
Loading…