Skip to content

Methodology

Where our numbers are wrong

Every North Carolina 2024 down-ballot result on this site is checked against the state's own certified canvass. This page publishes what that check finds — including the races where we don't match. Presidential county returns come from the MIT Election Data and Science Lab and are not independently reconciled; that check does not exist yet, and saying so is the point of this page.

Contests checked

719

Exact, vote for vote

79.0%

568 of 719 match the certified canvass to the individual vote.

Vote surplus

0.027%

13,403 votes more than the certified canvass, across 48,753,425 counted.

Source of truth

NCSBE

The state's certified precinct canvass.

The four states we published wrong

For as long as this site has been live, the national map showed Texas at R+6.8 on 22.8 million votes. Texas cast 11.4 million votes in 2024 and voted R+13.7. The same error doubled Wisconsin, South Carolina and West Virginia — West Virginia was published at R+20.9 against a true R+41.9.

The cause: our source files a pseudo-candidate literally named TOTAL VOTES CAST with an empty party field. Our parser treated an empty party as “other”, so in the 427 county-cycles carrying that row we added each county's own total to itself. A separate 796 rows record undervotes, overvotes and spoiled ballots — ballots with no presidential selection, the opposite of a vote — and those were being counted as third-party support in 151 more cycles.

Both are fixed. Every state now reconciles against the certified statewide result. The uncomfortable part is how long it stood: the doubled figure was on the front page, and Texas at R+6.8 is checkable by anyone who followed the election. It was found while adding per-candidate vote counts to county pages — which is to say, by finally publishing the underlying numbers rather than only the margin derived from them.

The check that now runs every build

County-years checked

21,221

Reconcile

21,219

99.991%

Unexplained

2

Caught by it, pre-fix

429

Every county-year is now compared against the source file's own declared ballot total — a number we never derive. Two conventions are both legitimate and both present: some states count undervotes in that total and some do not, so a county passes if it matches either reading. Anything else is an anomaly and gets named.

It runs as part of the data build and exits non-zero on failure, so the four doubled states could not be published again without the build stopping. Re-running it against the old aggregation flags 429 county-years — the bug it was written for.

What it does not do: the control is the same publisher's own column, so it catches our errors and not theirs. An independent statewide cross-check would catch more.

The 2 we cannot explain

  • FEDERAL PRECINCT, RI 2016 — declared 3,986, candidates sum to 7,330 (-3,344)
  • FEDERAL PRECINCT, RI 2012 — declared 3,054, candidates sum to 4,305 (-1,251)

The race we got wrong

North Carolina's 2024 Supreme Court race between Allison Riggs and Jefferson Griffin was decided by 734 votes in the certified canvass. Summing the precinct file we build from gives 66. The precinct breakdown is missing 910 ballots that the state canvass includes.

CandidateOur totalCertifiedGap
ALLISON RIGGS2,769,6232,770,412+789
JEFFERSON G GRIFFIN2,769,5572,769,678+121

This is why the race page carries a warning instead of a result. A 66-vote margin and a 734-vote margin are different facts, and only one of them is the law.

See the race page →

Every discrepancy

All 151 contests where our total differs from the certified canvass, largest gap first — the whole list, not a selection. “Several races merged” means the source file gave no way to separate distinct contests, so the comparison isn't like-for-like — those are excluded from the headline figure above.

ContestOursCertifiedDifferenceStatus
North Carolina — Court of Appeals16,523,5085,507,502-11,016,006Several races merged in source
Wilkes County — Board of Commissioners100,79234,842-65,950Several races merged in source
Transylvania County — Board of Commissioners77,53820,311-57,227Several races merged in source
Pleasant Garden town — Abc Store Election2,85249,901+47,049Structural mismatch
Currituck County — Board of Education41,42114,077-27,344Several races merged in source
Stokes County — Abc Store Election26,53449,901+23,367Structural mismatch
Alamance-burlington Schools — Board of Education260,182250,237-9,945Above certified
Pasquotank County — Board of Commissioners29,29219,967-9,325Above certified
Hendersonville city — City Council19,94312,866-7,077Several races merged in source
Gates County — Board of Commissioners11,3895,698-5,691Several races merged in source
River Bend town — City Council4,8091,749-3,060Several races merged in source
Hickory Public Schools — Board of Education17,34915,253-2,096Above certified
Hickory Public Schools — Board of Education13,01211,494-1,518Above certified
North Carolina — District Court Judge192,432193,729+1,297Short of certified
Forsyth County — Board of Commissioners370,796372,052+1,256Short of certified
Forsyth County — Register of Deeds132,857133,908+1,051Short of certified
North Carolina — District Court Judge131,531132,573+1,042Short of certified
Forsyth County — Soil and Water Conservation District Supervisor148,047149,064+1,017Short of certified
North Carolina — District Court Judge129,585130,600+1,015Short of certified
North Carolina — District Court Judge129,266130,279+1,013Short of certified
North Carolina — District Court Judge129,014130,027+1,013Short of certified
North Carolina — District Court Judge128,971129,976+1,005Short of certified
North Carolina — Supreme Court5,539,1805,540,090+910Within 0.1%
Tryon town — Board of Commissioners2,2331,432-801Several races merged in source
North Carolina — District Court Judge113,575114,297+722Short of certified
Columbus County — Soil and Water Conservation District Supervisor20,42219,910-512Above certified
North Carolina — District Court Judge106,896106,416-480Above certified
Columbus County — Register of Deeds19,72219,248-474Above certified
North Carolina — District Court Judge103,204102,733-471Above certified
North Carolina — District Court Judge103,249102,779-470Above certified
Craven County — Register of Deeds53,23353,701+468Short of certified
North Carolina — District Court Judge102,889102,423-466Above certified
Columbus County — Board of Education17,91717,489-428Above certified
Columbus County — Board of Education17,28216,871-411Above certified
North Carolina — District Court Judge78,11778,449+332Short of certified
North Carolina — District Court Judge77,53777,869+332Short of certified
North Carolina — District Court Judge77,04277,372+330Short of certified
North Carolina — District Court Judge76,35776,682+325Short of certified
North Carolina — District Court Judge76,50876,831+323Short of certified
North Carolina — District Court Judge75,81876,135+317Short of certified
Hyde County — Sanitary District Trustee1,142899-243Above certified
Havelock city — Commissioner11,43411,538+104Short of certified
Columbus County — Board of Commissioners3,5193,423-96Above certified
Columbus County — Board of Commissioners3,3923,299-93Above certified
Craven County — Board of Education9,2049,287+83Short of certified
Columbus County — Board of Commissioners3,3083,231-77Above certified
Columbus County — Board of Commissioners2,9702,897-73Above certified
Winston-Salem city — Council17,59617,663+67Short of certified
Craven County — Board of Education5,6605,718+58Short of certified
Winston-Salem city — Council20,00020,051+51Short of certified
Mecklenburg County — Board of Commissioners1,233,3641,233,316-48Within 0.1%
Craven County — Board of Education6,2906,334+44Short of certified
Whiteville city — Board of Education1,8981,854-44Above certified
Hertford County — Board of Education15,10015,138+38Short of certified
Trent Woods town — Commissioner6,6036,639+36Short of certified
New Hanover County — Board of Education365,595365,564-31Within 0.1%
Whiteville city — Board of Education1,6711,640-31Above certified
Montgomery County — Register of Deeds9,0559,077+22Short of certified
Moore County — Board of Education53,80353,782-21Within 0.1%
North Carolina — District Court Judge57,39157,371-20Within 0.1%
Moore County — Board of Commissioners42,95142,931-20Within 0.1%
Mecklenburg County — Soil and Water Conservation District Supervisor463,719463,700-19Within 0.1%
North Carolina — District Attorney57,24057,221-19Within 0.1%
North Carolina — District Court Judge56,21156,192-19Within 0.1%
Moore County — Board of Education53,39953,380-19Within 0.1%
Moore County — Board of Education52,48952,470-19Within 0.1%
Moore County — Board of Commissioners43,85743,838-19Within 0.1%
North Carolina — District Court Judge37,94637,965+19Within 0.1%
North Carolina — District Court Judge36,99137,010+19Within 0.1%
North Carolina — District Court Judge36,60636,625+19Within 0.1%
Hertford County — Board of Commissioners6,8626,881+19Short of certified
Hertford County — Board of Commissioners6,6196,638+19Short of certified
North Carolina — District Court Judge454,060454,042-18Within 0.1%
North Carolina — District Court Judge453,945453,927-18Within 0.1%
North Carolina — District Court Judge450,600450,582-18Within 0.1%
North Carolina — District Court Judge449,687449,669-18Within 0.1%
Mecklenburg County — Register of Deeds448,863448,845-18Within 0.1%
Moore County — Board of Education52,83752,819-18Within 0.1%
North Carolina — District Court Judge36,98337,001+18Within 0.1%
Hertford County — Board of Commissioners7,0507,068+18Short of certified
North Carolina — District Court Judge454,029454,012-17Within 0.1%
North Carolina — District Court Judge453,795453,778-17Within 0.1%
North Carolina — District Court Judge452,264452,247-17Within 0.1%
North Carolina — District Court Judge452,112452,095-17Within 0.1%
North Carolina — District Court Judge452,068452,051-17Within 0.1%
North Carolina — District Court Judge451,612451,595-17Within 0.1%
North Carolina — District Court Judge450,082450,065-17Within 0.1%
North Carolina — District Court Judge449,620449,603-17Within 0.1%
North Carolina — District Court Judge57,08657,069-17Within 0.1%
Hertford County — Register of Deeds5,2075,224+17Short of certified
Columbus County — Sanitary District Trustee592579-13Above certified
Montgomery County — Board of Commissioners3,0333,044+11Short of certified
Cumberland County — Board of Commissioners230,012230,021+9Within 0.1%
Mitchell County — Board of Commissioners21,43021,421-9Within 0.1%
Cove City town — City Council734743+9Short of certified
Mecklenburg County — Board of Commissioners72,19972,191-8Within 0.1%
Montgomery County — Board of Commissioners4,6924,700+8Short of certified
River Bend town — Mayor1,8071,815+8Short of certified
Trinity city — City Council3,8053,798-7Above certified
New Hanover County — Board of Commissioners364,955364,949-6Within 0.1%
Mecklenburg County — Board of Commissioners107,658107,652-6Within 0.1%
Montgomery County — Board of Commissioners3,6573,663+6Short of certified
Dover town — Board of Commissioners827832+5Short of certified
Cabarrus County — Board of Commissioners197,068197,071+3Within 0.1%
North Carolina — District Court Judge113,122113,119-3Within 0.1%
North Carolina — District Court Judge65,94565,942-3Within 0.1%
North Carolina — District Court Judge64,73364,730-3Within 0.1%
Rowan-salisbury Schools — Board of Education56,86556,868+3Within 0.1%
North Carolina — District Court Judge53,37453,371-3Within 0.1%
North Carolina — District Court Judge41,52841,525-3Within 0.1%
Granville County — Register of Deeds21,61521,612-3Within 0.1%
Mitchell County — Board of Education10,64810,645-3Within 0.1%
Mecklenburg County — Board of Commissioners107,002107,000-2Within 0.1%
Mecklenburg County — Board of Commissioners99,13999,137-2Within 0.1%
North Carolina — District Court Judge93,93593,933-2Within 0.1%
North Carolina — District Court Judge92,78392,781-2Within 0.1%
North Carolina — District Court Judge91,84091,838-2Within 0.1%
North Carolina — District Court Judge91,53391,531-2Within 0.1%
North Carolina — District Court Judge91,15491,152-2Within 0.1%
North Carolina — District Court Judge91,14291,140-2Within 0.1%
North Carolina — District Court Judge90,92590,923-2Within 0.1%
North Carolina — District Court Judge90,84090,838-2Within 0.1%
North Carolina — District Court Judge82,62482,622-2Within 0.1%
North Carolina — District Court Judge82,03982,037-2Within 0.1%
North Carolina — District Court Judge80,89080,888-2Within 0.1%
North Carolina — District Court Judge80,88180,879-2Within 0.1%
Mecklenburg County — Board of Commissioners71,74971,747-2Within 0.1%
North Carolina — District Court Judge66,38266,380-2Within 0.1%
North Carolina — District Court Judge49,61149,609-2Within 0.1%
Edgecombe County — Register of Deeds18,68618,684-2Within 0.1%
Duplin County — Register of Deeds14,19414,192-2Within 0.1%
Mitchell County — Register of Deeds7,3167,314-2Within 0.1%
Troy town — Board of Commissioners1,3901,392+2Short of certified
Mecklenburg County — Board of Commissioners85,20085,199-1Within 0.1%
North Carolina — District Court Judge69,10369,102-1Within 0.1%
North Carolina — District Court Judge66,74566,744-1Within 0.1%
Pitt County — Register of Deeds59,49959,498-1Within 0.1%
North Carolina — District Court Judge58,68758,686-1Within 0.1%
North Carolina — District Court Judge58,06458,063-1Within 0.1%
North Carolina — District Court Judge57,70957,708-1Within 0.1%
North Carolina — District Court Judge48,68248,681-1Within 0.1%
Pitt County — Board of Commissioners31,27931,280+1Within 0.1%
Yancey County — Board of Education30,56430,563-1Within 0.1%
Yancey County — Board of Commissioners29,69629,695-1Within 0.1%
Bladen County — Board of Commissioners16,22116,222+1Within 0.1%
Yancey County — Register of Deeds7,8357,834-1Within 0.1%
Wilson County — Board of Education4,6554,656+1Within 0.1%
Duplin County — Board of Education3,0613,060-1Within 0.1%
Duplin County — Board of Commissioners3,0173,016-1Within 0.1%
Vanceboro town — City Council1,2661,267+1Within 0.1%
Dover town — Mayor217218+1Short of certified

Method

We build contests by summing precinct-level returns from the MIT Election Data and Science Lab, then match each one to the corresponding contest in the certified NCSBE canvass by candidate name. A pair is accepted when two candidate names agree — one, where our contest has only a single candidate. Names are the only thing compared: jurisdiction and office labels never enter the match, so a name overlap between two genuinely different contests is enough to produce a false pair, and four in the table above are known to be false. Both Hickory Public Schools rows are matched to Iredell-Statesville Schools board districts, and two ABC-store referendums are matched to the City of Asheville transportation bond referendum, where the two agreeing “candidates” are YES and NO. Those four are left in rather than quietly dropped. Totals are aggregated only across like-for-like contests — summing across structurally mismatched pairs produced a fake 20% shortfall driven almost entirely by one merged contest, which is exactly the kind of error this page exists to catch.