Georgia decided the 2020 presidential election by 12,670 votes out of 4,998,482 — about a quarter of one percent. Then it counted the ballots again, twice: a full hand-count audit, and after that a machine recount.1 Three official counts of the same five million ballots exist, and the state published the first and the last as public data archives.
You have heard what came next as two opposite claims. One side says the recounts confirmed the result, so the count can be trusted. The other side says the numbers changed between counts, so it cannot. Both are claims about numbers Georgia itself published. Do the counts agree — and what does the difference between them measure?
The record that can answer is built from precincts. A precinct is the small area served by one polling place, a few hundred to a few thousand voters, and it is where ballots are physically counted before anything is added up. Georgia’s 2020 precinct file has 2,656 rows, and this brief reads all of them.
The data is the Georgia Secretary of State’s own publication of the November 2020 general election. That is one tabulation export — the results file a county’s counting equipment writes — per county, all 159 of them, plus a separate archive for the recount, from the state’s historical results page (https://sos.ga.gov/page/historical-elections-results). The state’s export of the 2024 general election appears once below, to show what four years does to a format. These are the counties’ own tabulation exports, published by the state — the primary source, not anybody’s reconstruction of one.
Why this source, of all sources: a certified return is the official record of an election’s outcome, and the returns chapter explains what that record can and cannot bear. A question about whether counts agree has to be asked of the counts as the state published them, not of a national compilation assembled from them later. Georgia’s exports also carry a column almost no other precinct data anywhere has: how each ballot was cast. In 2020 that column is half the story.
Thirteen tables from this chapter’s build are worth analyzing on their own: the four the figures and numbers above are drawn from, and the boundary crosswalks between 2020 and 2024 precincts, in both directions – by shared area and by population. Sizes are rows by columns, read off the files.
| Table | What it holds | Size |
|---|---|---|
precincts.csv |
One row per precinct: 2020 presidential returns, registered voters and ballots cast. | 2,656 × 9 |
counties.csv |
County totals, precinct counts and size spread, rolled up from precincts.csv. | 159 × 7 |
structure.csv |
What the 2020 and 2024 source files contain – the inventory the Vintages table is built from. | 7 × 2 |
recount.csv |
Every county’s original count, its recount, and the change between them, by candidate. | 318 × 6 |
ga2020_vote_methods.csv |
Each 2020 precinct repeated once per candidate per vote method (election day, advance, absentee, provisional). | 31,872 × 7 |
crosswalk.csv |
Every 2020 precinct’s correspondence to 2024 precincts, by areal share of the old boundary. | 7,522 × 3 |
assign_point.csv |
The same 2020-to-2024 correspondence, one-to-one, by each precinct’s interior point instead of shared area. | 2,684 × 2 |
precincts_2024_est.csv |
2020 votes re-expressed on 2024 precinct boundaries, carried by areal weight. | 2,696 × 12 |
crosswalk_check.csv |
What survived carrying 2020 votes onto 2024 boundaries – the reconciliation check on the areal crosswalk. | 7 × 2 |
block_assign.csv |
Every 2020 census block assigned to its 2020 precinct and its 2024 precinct, with population. | 232,717 × 4 |
crosswalk_pop.csv |
The 2020-to-2024 precinct correspondence, weighted by population instead of area. | 3,408 × 4 |
precincts_2024_pop.csv |
2020 votes re-expressed on 2024 boundaries, carried by population weight instead of area. | 2,692 × 8 |
crosswalk_compare.csv |
Areal weights and population weights, side by side, for every precinct pair. | 3,437 × 5 |
Seventeen more tables come out of the same build; they are not in that table because they are not data to analyze so much as the working material behind it, and listing them beside precincts.csv would suggest otherwise.
Eleven are the parser’s raw per-vintage output – what
parse-ga-sos.py reads straight out of each archive, before
this script reconciles the three vintages into the tables above. Kept
for anyone who wants to see what went into precincts.csv,
counties.csv and structure.csv without redoing
the parse themselves: ga2020_counties.csv,
ga2020_precincts.csv,
ga2020_structure.csv,
ga2020rc_counties.csv,
ga2020rc_precincts.csv,
ga2020rc_structure.csv,
ga2020rc_vote_methods.csv,
ga2024_counties.csv,
ga2024_precincts.csv,
ga2024_structure.csv,
ga2024_vote_methods.csv.
Six more are geometry for a Forsyth County precinct-boundary map –
2020 and 2024 outlines, block interiors and label points around one
changed precinct pair in Windermere – that this brief does not currently
draw. Built, and real data if you want to draw that map yourself, but no
figure here reads them: fig_forsyth.csv, fig_forsyth_lab.csv,
fig_wind_blocks.csv,
fig_wind_pts.csv,
fig_wind_outline.csv,
fig_wind_meta.csv.
One row of precincts.csv is one precinct in one county —
registered, ballots_cast, one column of votes
per candidate, total, and dem_two_party_pct,
the Democratic two-party share: Biden’s votes as a percentage of the
votes cast for Biden or Trump, leaving the Libertarian aside:
| County | Precinct | Registered | Ballots cast | Biden | Trump | Presidential votes | Dem two-party % |
|---|---|---|---|---|---|---|---|
| Appling | 1B | 1,309 | 995 | 116 | 870 | 993 | 11.76 |
| Appling | 1C | 848 | 642 | 44 | 594 | 640 | 6.90 |
| Appling | 2 | 2,251 | 1,457 | 908 | 531 | 1,448 | 63.10 |
ga2020_vote_methods.csv repeats each precinct once per
candidate per method, across the 4 categories
Georgia’s counties tabulate in. recount.csv holds each
county’s original count, its recount, and the
change between them, per candidate.
counties.csv and structure.csv carry the
county totals and the file’s own inventory:
| What the source contains | Value |
|---|---|
| counties | 159 |
| precincts | 2656 |
| contest | President of the United States |
| candidates | 3 |
| vote methods | Absentee by Mail Votes | Advanced Voting Votes | Election Day Votes | Provisional Votes |
| contests in the source (median county) | 23 |
| rows in vote_methods.csv | 31872 |
One caution about the format itself. The same state published the same election under different names four years apart, with no version note anywhere:
| The same thing | In 2020 | In 2024 |
|---|---|---|
| the county | Baker | Baker County |
| the office | President of the United States | President of the US |
| how a ballot was cast | Election Day Votes | Election Day |
| the candidate | Donald J. Trump (I) (Rep) | Donald J. Trump (Rep) |
| registration per precinct | reported | absent |
Nothing in either file says the method categories are the same four things. Declaring them identical is a decision a reader has to make, and that decision is what makes any comparison across the two years possible at all.
Before you read on, predict. You are holding a complete precinct-level count of a presidential election decided by 12,670 votes, and Georgia then counted the same ballots again. Write down two numbers: how many of the 159 counties you expect returned a different total the second time, and how far you expect the statewide margin to have moved.
Start with what agrees. Sum the 2,656 precincts and Georgia’s 2020 result appears:
| Candidate | Votes |
|---|---|
| Joseph R. Biden | 2,474,507 |
| Donald J. Trump | 2,461,837 |
| Jo Jorgensen | 62,138 |
| Total presidential votes | 4,998,482 |
| Two-party margin | 12,670 |
The precincts also sum to their published county totals exactly, with no residue. Hold onto that agreement, because the recount below is surprising only against it.
Now the column no other state’s precinct file carries. Only 19.5% of Georgia’s 2020 presidential votes were cast in person on election day. More than half arrived through Advanced Voting, Georgia’s in-person early voting, and roughly a quarter by mail:
| How the ballot was cast | Votes | % of all votes |
|---|---|---|
| Advanced Voting | 2,694,879 | 53.9% |
| Absentee by Mail | 1,316,943 | 26.3% |
| Election Day | 975,540 | 19.5% |
| Provisional | 11,120 | 0.2% |
Hover a pair of dots for the exact counts and the two-party split.
Figure 1. One electorate, four routes to the ballot box, and they do not agree. Each vote method gets a pair of dots on one scale, Biden’s votes and Trump’s, because the claim has two parts: how many ballots each route carried, and how differently the two routes voted. The line joining a pair is the disagreement. Biden won mail ballots 65.3% to 34.7% while Trump won election-day ballots 61.5% to 38.5%, a gap of roughly 27 points between channels, in a state decided by 12,670 votes.
| How the ballot was cast | Joseph | Donald | Dem two-party % |
|---|---|---|---|
| Advanced Voting | 1,250,509 | 1,419,161 | 46.8% |
| Absentee by Mail | 849,729 | 451,157 | 65.3% |
| Election Day | 367,205 | 587,697 | 38.5% |
| Provisional | 7,064 | 3,822 | 64.9% |
This is the arithmetic behind the “red mirage”:2 counties that report election-day ballots first show one result, and the same counties reporting mail ballots later show another. Nothing in that sequence is irregular. It is the same voters, sorted by the route their ballot took, and this file is where you can see it directly.
Then the recount. Georgia published its November 2020 count and its recount as two separate archives. Compare them:
| Candidate | Original count | Recount | Change |
|---|---|---|---|
| Donald J. Trump | 2,461,837 | 2,461,854 | +17 |
| Joseph R. Biden | 2,474,507 | 2,473,633 | -874 |
| Quantity | Value |
|---|---|
| Counties in the comparison | 159 |
| Counties where the count changed | 104 |
| Share of counties | 65.4% |
| Total votes moved (absolute) | 2,753 |
| Margin, original count | 12,670 |
| Margin, recount | 11,779 |
| Change in the margin | -891 |
104 of 159 counties returned a different number the second time — 65.4% of them. 2,753 votes moved in total, and the statewide margin narrowed by 891, from 12,670 to 11,779. That second figure, 11,779, is Georgia’s certified margin: the number that was litigated and repeated in every account of the election. The precinct file is the count that does not match it.
Whether that movement is alarming depends on the denominator, the bottom number you divide by. 2,753 votes moved out of 4,998,482 counted is 0.055%. Recounts move numbers; that is what they are for. And the counties that moved most tell an ordinary story:
| County | Candidate | Original | Recount | Change | % change |
|---|---|---|---|---|---|
| Fulton | Joseph R. Biden | 381,144 | 380,212 | -932 | -0.245 |
| Floyd | Donald J. Trump | 29,123 | 28,906 | -217 | -0.745 |
| Gwinnett | Joseph R. Biden | 241,827 | 241,994 | +167 | 0.069 |
| Henry | Joseph R. Biden | 73,276 | 73,443 | +167 | 0.228 |
| Floyd | Joseph R. Biden | 12,008 | 11,917 | -91 | -0.758 |
| Muscogee | Joseph R. Biden | 49,529 | 49,446 | -83 | -0.168 |
Fulton County alone accounts for 47.9% of all the change in Joseph’s vote. The largest movements sit in the largest counties, which is what a roughly constant rate of ordinary handling error per ballot looks like, and the opposite of what a concentrated problem would look like.
So the answer to the opening question is precise. The counts agree to within about a thousandth of the electorate, they disagree in documented detail, and the state itself published the disagreement. “The count” is not a fact the data carries. It is a procedure the state performed, and it performed more than one. One consequence reaches far past Georgia: the recount archive carries precinct detail for exactly one county, so the certified result exists only at county resolution. Every precinct-level analysis of this election, including the racially polarized voting estimates that courts read — estimates of whether white and Black voters chose different candidates, the subject of their own chapter — rests on the superseded count, because it is the only count published at that grain.
It cannot say which count is right. The recount is certified and the precinct file is finer, and nobody reconciles them at precinct level, because the state never published a precinct-level recount to reconcile.
It cannot tell you anything about fraud, and nothing here suggests any. These are among the most audited numbers in American public life. The differences shown are between counting procedures, of the size ordinary ballot handling produces across five million pieces of paper.
It carries no boundaries and no demographics. Precincts are identified by the names counties typed, not by stable codes, so comparing a precinct with itself across elections is its own problem — the subject of the precinct-geography brief. And census blocks — the smallest areas the Census Bureau reports, often a single city block — do not nest inside precincts, so joining these returns to census demographics requires a splitting rule the data does not contain (Amos, McDonald and Watkins 2017).3
It cannot separate preference from access. Mail and election-day electorates differed by about 27 points, and nothing in a tabulation export distinguishes who chose to vote by mail from who was unable to vote in person.
And it is one state and one election. Georgia publishes vote method per precinct; most states do not, and nothing here licenses assuming the pattern travels.
None of these is answered above, and every one can be answered from the tables the Sources section hands over.
recount.csv has original,
recount and change for every county and
candidate. Sort by pct_change. Did the recount move votes
in one direction, or scatter them around zero?recount.csv again: add up change across
all counties for each candidate. Did the recount ever threaten to change
who won?ga2020_vote_methods.csv breaks every precinct’s votes
down by method. Pick one county and compute each
candidate’s share by method. Is your county’s mail-versus-election-day
gap bigger or smaller than the state’s?precincts.csv has registered and
ballots_cast. Compute turnout per precinct and sort it. Are
the extremes plausible places, or artifacts of how a county keeps its
lists?counties.csv has a precincts column. How
many counties report the whole county as a single precinct, and how many
votes do those counties carry between them?Two stretch ideas point past the spreadsheet. The state’s 2024 export sits on the same historical-results page; download it and compute the 2024 method split, and see whether the mail gap survived four years and a rules change. And find another state’s published 2020 recount, such as Wisconsin’s two recounted counties, and compare its rate of movement per ballot with Georgia’s.
Data
The data itself
The thirteen tables worth analyzing on their own are described in The data at the top of this brief. They are plain
CSV, they open in a spreadsheet, and they are yours to take further: precincts.csv, counties.csv, structure.csv, recount.csv, ga2020_vote_methods.csv,
crosswalk.csv, assign_point.csv,
precincts_2024_est.csv,
crosswalk_check.csv,
block_assign.csv,
crosswalk_pop.csv,
precincts_2024_pop.csv,
crosswalk_compare.csv.
The parser’s raw per-vintage output and the unused Forsyth map geometry
are linked there too, described as what they are.
Academic literature
Part of the data behind this chapter comes from a source no assistant can download for you -- though you can download it yourself, once, in a browser. WHY NOT. Georgia's Secretary of State publishes one archive per election, covering all 159 counties down to the precinct, at https://sos.ga.gov/page/historical-elections-results The address is stable and public and a browser downloads it fine, but the site sits behind bot protection: a script is turned away even with browser headers. The November 2020 general election and its recount are two separate archives there, and each is one manual browser download. Everything after that download is automatic. The finest-grained public record of American voting is served from behind a bot check, and that fact is part of the subject. WHAT EXISTS INSTEAD. Download the two 2020 archives yourself from the page above. The 2024 general election needs no browser at all: the state's JSON export, https://results.sos.ga.gov/cdn/results/Georgia/export-2024NovGen.json (about 34 MB), downloads cleanly by script. One more fact about what the state published: the recount archive carries county summaries for all 159 counties but precinct detail for exactly one county, Lanier -- so the original count and the recount can only be compared county by county. WHAT YOU CAN STILL CHECK. These numbers say whether you are holding the same objects: - the 2020 archive yields 2,656 precincts across 159 counties - the recount reproduces Georgia's certified 2020 totals exactly -- Biden 2,473,633, Trump 2,461,854 -- while the original precinct archive gives Biden 2,474,507 and Trump 2,461,837: the same election counted twice, 874 Biden votes apart - the 2024 export sums to Trump 2,663,117 and Harris 2,548,017, matching the certified statewide figures
The hand count was the state’s first statewide audit of paper ballots, finished 19 November 2020: NPR, “Georgia Releases Hand Recount Results Affirming Biden’s Lead,” https://www.npr.org/2020/11/19/936647882/georgia-releases-hand-recount-results-affirming-bidens-lead. The machine recount, requested by the Trump campaign, ended with the state recertifying the result on 7 December 2020: CNN, “Georgia reaffirms Biden’s victory for 3rd time after recount,” https://www.cnn.com/2020/12/07/politics/georgia-recount-recertification-biden.↩︎
The phrase came from the Democratic data firm Hawkfish in the weeks before the 2020 election; NBC News, “Beware the ‘blue mirage’ and the ‘red mirage’ on election night,” November 2020, https://www.nbcnews.com/politics/2020-election/beware-blue-mirage-red-mirage-election-night-n1245925.↩︎
Brian Amos, Michael P. McDonald and Russell Watkins, “When Boundaries Collide: Constructing a National Database of Demographic and Voting Statistics,” Public Opinion Quarterly 81, no. S1 (2017): 385–400, doi:10.1093/poq/nfx001; the authors’ copy is at https://election.lab.ufl.edu/data-downloads/census-crosswalk/2020/when_boundaries_collide.pdf.↩︎