Ballot Image Audit Report

San Francisco, California, 2024 General Election

AuditEngine version:'v2.32.X'

Run Date: 2026-11-10 21:56:29.053735 Copyright (c) Citizens' Oversight


Return to Master Report Index


Summary

This report gives the results of an audit of the ballot images of the San Francisco, California, 2024 General Election. Citizens' Oversight Projects (COPs) performed the audit with AuditEngine, its ballot image auditing system.

AuditEngine reads each ballot image on its own. It then compares its reading with the cast vote record (CVR), the voting system's record of each ballot, one ballot at a time. In this report, CVR always means cast vote record, never Conditional Voter Registration.

Comparing two independent readings can expose errors in either one that would be very hard to find otherwise. Voting systems are usually accurate. Still, a mistake, a software update, a change in the election definition or malicious activity can change a result.

The report is meant for election officials and for the public. It shows how far the official result can be checked from the ballot images.

This report is produced from a fixed template. Its text was written and reviewed in advance. The numbers are filled in from the audit's own tables, which are published in the Reconciliation Report. Terms such as Non-Variant Sheets and Contest Variants are defined there.

Key findings

About this election

San Francisco is a consolidated city and county in California. Its Department of Elections runs its elections, and uses a voting system from Dominion Voting Systems. Voters may mark a paper ballot by hand, or use a ballot marking device (BMD), which prints a sheet with the voter's choices. Ballots cast by mail and in person are scanned, and the scanners save an image of each sheet.

These facts come from public sources, not from the audit.

The table gives the profile of the ballot images provided and, for a partial audit, of the part audited.

Profile Ballot images provided Audited
Voting system Dominion Dominion
Ballots cast 412,231
Sheets per ballot 1 1
Ballot sheet images 1,604,380 412,351
Sheets printed by BMDs 12,617 12,617
Precincts 510 510
Ballot styles 1,382 1,382
Contests 53

The map shows the precincts of the jurisdiction. The precincts audited are colored. The boundaries come from a public source, given in the job settings.

What the ballots look like

The figure shows both sides of each sheet of a hand-marked ballot, and a sheet printed by a BMD. The sheets shown are from ballots of one precinct. The ballot images do not say which sheets belong to the same voter's ballot. Each sheet is labeled Audited or Not audited. Click an image to see it full size.

Sheet 1
Audited
00001_00008_000001
00001_00008_000001-0.png page 100001_00008_000001-1.png page 2
BMD sheet
Audited
00001_01322_000011
00001_01322_000011-0.png page 100001_01322_000011-1.png page 2

This audit was a demonstration of AuditEngine on part of the election. To choose a subset of the ballots for this pilot study, we used a 'profile' to reduce the number of images processed. The results apply only to those ballot sheets selected.

The audit processed 412,351 ballot sheet images, with one image for each side of that sheet in one image file. 120 sheets had no CVR record, and 0 CVR records had no sheet image. These cannot be compared, and are left out of the results below.

12,617 of the sheets were printed by ballot marking devices (BMDs). AuditEngine read the printed text of each one, not its barcode.

What the audit found

AuditEngine compared 412,187 Sheets, holding 3,878,114 Ballot-Contests. A Ballot-Contest is a contest provided on one ballot.

The charts show the Sheets and the Ballot-Contests, as in the Reconciliation Report.

Contest Variants by kind

Contest Variants are the Ballot-Contests set aside for a closer look. Most of them are not errors. A write-in, an overvote or a mark flagged gray as ambiguous makes a Ballot-Contest a Contest Variant, even when AuditEngine and the CVR agree. A disagreement between AuditEngine and the CVR makes one too. Of the 14,002 Contest Variants:

AuditEngine flags a mark gray when it is faint or unclear. A gray flag is not a disagreement with the CVR. It is a hint that a review could help, if the contest is close.

The chart shows them by kind, as in the Contest Variants Breakdown of the Reconciliation Report.

The Other Contest Variants

Other is 30.7% of the Contest Variants, so the table below breaks it down by pattern. Each row gives what AuditEngine read, the CVR original record, and the CVR modified record if the Ballot-Contest was adjudicated. Votes A is the set of votes AuditEngine read. Votes B and Votes C are different sets. Undervote means fewer votes than the contest allows, often none. The Comparison column says whether AuditEngine and the CVR agree. AuditEngine is compared with the CVR modified record if there is one, else with the original. The Groups column names each pattern's groups in the Reconciliation Report.

AuditEngine CVR original CVR modified Gray-flagged Comparison Ballot-Contests % of Contest Variants Groups
Votes A Undervote Votes A Agreed 1,482 10.6 x_uv_x
Votes A Votes A Not adjudicated Yes Agreed, gray-flagged 708 5.1 x_x_gry
Votes A Votes A Votes A Yes Agreed, gray-flagged 483 3.4 x_x_x_gry
Votes A Overvote Votes A Agreed 477 3.4 x_ov_x
Votes A Votes B Votes A Agreed 337 2.4 x_y_x
Votes A Undervote Undervote Disagreed 170 1.2 x_uv_uv
Undervote Votes A Not adjudicated Disagreed 97 0.69 bmd_uv_x
Undervote Undervote Votes A Disagreed 82 0.59 uv_uv_x
Votes A Overvote Overvote Disagreed 80 0.57 x_ov_ov
Votes A Votes B Votes B Disagreed 75 0.54 x_y_y, bmd_x_y_y
Undervote Undervote Not adjudicated Yes Agreed, gray-flagged 64 0.46 uv_uv_gry
Undervote Undervote Undervote Yes Agreed, gray-flagged 53 0.38 uv_uv_uv_gry
Votes A Votes A Undervote Disagreed 50 0.36 x_x_uv
Votes A Votes B Not adjudicated Disagreed 40 0.29 x_y, bmd_x_y
Votes A Overvote Votes B Disagreed 27 0.19 x_ov_y
Votes A Undervote Not adjudicated Disagreed 21 0.15 x_uv, bmd_x_uv
Undervote Votes A Votes A Disagreed 21 0.15 uv_x_x
Votes A Votes B Votes C Disagreed 11 0.079 x_y_z
Votes A Undervote Votes B Disagreed 7 0.05 x_uv_y
Undervote Votes A Votes B Disagreed 4 0.029 uv_x_y
Votes A Votes B Undervote Disagreed 3 0.021 x_y_uv
Votes A Votes A Overvote Disagreed 3 0.021 x_x_ov
Undervote Votes A Undervote Agreed 3 0.021 uv_x_uv
Votes A Votes B Overvote Disagreed 2 0.014 x_y_ov
Votes A Undervote Overvote Disagreed 1 0.0071 x_uv_ov
Votes A Votes A Votes B Disagreed 1 0.0071 x_x_y
Undervote Votes A Overvote Disagreed 1 0.0071 uv_x_ov

The CVR has an 'original' evaluation of each ballot, and if adjudicated, the CVR has a 'modified' record after adjudication. In adjudication, election staff review ballots and may change how a contest is counted. AuditEngine compared its reading with both. In 2,299 Ballot-Contests, adjudication changed the original evaluation to agree with AuditEngine.

Contest outcomes

A disagreement can at most move one vote from the winner to the runner-up, which changes the margin by two. An overvote that AuditEngine and the CVR agree on is not a disagreement. Still, a review could find the voter's intent in it, a vote that can narrow the margin by one. So a contest is compared with its margin by twice its Disagreed Ballot-Contests, plus its agreed overvotes. In 1 of the contests audited, this is equal to or more than the margin of victory. In every other contest, the disagreements and overvotes found could not change the outcome.

The margins are among the ballots audited. Since the audit covered part of the election, they are not the margins of the whole contest.

Major contests

The table below always lists the major contests on the ballot, such as President, United States Senator, United States Representative and Governor. Each contest links to its section of the Reconciliation Report.

Contest Disagreed Involving a write-in Remaining Disagreed Agreed overvotes Margin of victory Could narrow the margin by As % of margin
PRESIDENT AND VICE PRESIDENT 113 21 92 992 261,125 1,176 0.45
UNITED STATES SENATOR 44 0 44 253 244,511 341 0.14
UNITED STATES SENATOR PARTIAL TERM 34 0 34 166 241,964 234 0.097
UNITED STATES REPRESENTATIVE, DISTRICT 11 40 0 40 121 210,481 201 0.095
UNITED STATES REPRESENTATIVE, DISTRICT 15 6 0 6 21 14,424 33 0.23
STATE SENATOR, DISTRICT 11 53 0 53 189 213,179 295 0.14

The table below lists the contests where the Disagreed Ballot-Contests that do not involve a write-in, and the agreed overvotes, could narrow the margin the most, compared with it. Each contest links to its section of the Reconciliation Report.

Contest Disagreed Involving a write-in Remaining Disagreed Agreed overvotes Margin of victory Could narrow the margin by As % of margin
MEMBER, BOARD OF EDUCATION 177 20 157 1,172 248 1,486 599
TRUSTEE, COMMUNITY COLLEGE BOARD 136 19 117 486 3,550 720 20.3
BART BOARD OF DIRECTORS, DISTRICT 7 4 1 3 39 1,856 45 2.4
BART BOARD OF DIRECTORS, DISTRICT 9 57 12 45 284 36,061 374 1
STATE ASSEMBLY MEMBER, DISTRICT 19 34 0 34 155 38,510 223 0.58
PRESIDENT AND VICE PRESIDENT 113 21 92 992 261,125 1,176 0.45
UNITED STATES REPRESENTATIVE, DISTRICT 15 6 0 6 21 14,424 33 0.23
UNITED STATES SENATOR 44 0 44 253 244,511 341 0.14
STATE SENATOR, DISTRICT 11 53 0 53 189 213,179 295 0.14
STATE ASSEMBLY MEMBER, DISTRICT 17 37 0 37 82 138,590 156 0.11
All contests, for reference
Contest Disagreed Involving a write-in Remaining Disagreed Agreed overvotes Margin of victory Could narrow the margin by As % of margin
MEMBER, BOARD OF EDUCATION 177 20 157 1,172 248 1,486 599
TRUSTEE, COMMUNITY COLLEGE BOARD 136 19 117 486 3,550 720 20.3
BART BOARD OF DIRECTORS, DISTRICT 7 4 1 3 39 1,856 45 2.4
BART BOARD OF DIRECTORS, DISTRICT 9 57 12 45 284 36,061 374 1
STATE ASSEMBLY MEMBER, DISTRICT 19 34 0 34 155 38,510 223 0.58
PRESIDENT AND VICE PRESIDENT 113 21 92 992 261,125 1,176 0.45
UNITED STATES REPRESENTATIVE, DISTRICT 15 6 0 6 21 14,424 33 0.23
UNITED STATES SENATOR 44 0 44 253 244,511 341 0.14
STATE SENATOR, DISTRICT 11 53 0 53 189 213,179 295 0.14
STATE ASSEMBLY MEMBER, DISTRICT 17 37 0 37 82 138,590 156 0.11
UNITED STATES SENATOR PARTIAL TERM 34 0 34 166 241,964 234 0.097
UNITED STATES REPRESENTATIVE, DISTRICT 11 40 0 40 121 210,481 201 0.095
MAYOR 158 154 4 0 N/A N/A N/A
MEMBER, BOARD OF SUPERVISORS, DISTRICT 1 3 3 0 0 N/A N/A N/A
MEMBER, BOARD OF SUPERVISORS, DISTRICT 3 4 4 0 0 N/A N/A N/A
MEMBER, BOARD OF SUPERVISORS, DISTRICT 5 10 10 0 0 N/A N/A N/A
MEMBER, BOARD OF SUPERVISORS, DISTRICT 7 3 3 0 0 N/A N/A N/A
MEMBER, BOARD OF SUPERVISORS, DISTRICT 9 4 4 0 0 N/A N/A N/A
MEMBER, BOARD OF SUPERVISORS, DISTRICT 11 4 4 0 0 N/A N/A N/A
CITY ATTORNEY 159 159 0 0 N/A N/A N/A
DISTRICT ATTORNEY 142 142 0 0 N/A N/A N/A
SHERIFF 115 115 0 0 N/A N/A N/A
TREASURER 105 105 0 0 N/A N/A N/A
PROPOSITION 2 0 0 0 0 N/A N/A N/A
PROPOSITION 3 0 0 0 0 N/A N/A N/A
PROPOSITION 4 0 0 0 0 N/A N/A N/A
PROPOSITION 5 0 0 0 0 N/A N/A N/A
PROPOSITION 6 0 0 0 0 N/A N/A N/A
PROPOSITION 32 1 0 1 0 N/A N/A N/A
PROPOSITION 33 0 0 0 0 N/A N/A N/A
PROPOSITION 34 1 0 1 0 N/A N/A N/A
PROPOSITION 35 1 0 1 0 N/A N/A N/A
PROPOSITION 36 4 0 4 0 N/A N/A N/A
MEASURE A 3 0 3 0 N/A N/A N/A
MEASURE B 4 0 4 0 N/A N/A N/A
MEASURE C 5 0 5 0 N/A N/A N/A
MEASURE D 4 0 4 0 N/A N/A N/A
MEASURE E 6 0 6 0 N/A N/A N/A
MEASURE F 10 0 10 0 N/A N/A N/A
MEASURE G 8 0 8 0 N/A N/A N/A
MEASURE H 8 0 8 0 N/A N/A N/A
MEASURE I 8 0 8 0 N/A N/A N/A
MEASURE J 10 0 10 0 N/A N/A N/A
MEASURE K 12 0 12 0 N/A N/A N/A
MEASURE L 12 0 12 0 N/A N/A N/A
MEASURE M 9 0 9 0 N/A N/A N/A
MEASURE N 13 0 13 0 N/A N/A N/A
MEASURE O 14 0 14 0 N/A N/A N/A

Ranked-choice contests were compared rank by rank on the ballots audited. Generating ranked-choice outcomes requires all the ballots. However, we can check the results for each rank.

RCV contests appeared only on the BMD ballots processed, while in hand-marked ballots, they were on sheet 2, which was not included.

Batches scanned twice

The audit compares the votes on the ballots of each batch with those of every other batch. 9 pairs of batches hold the same ballots. Each pair is one set of paper scanned twice. A reviewer compared the two images of sample ballots in each pair, and confirmed it. The Repeated Batch Report lists the pairs.

In 6 of these pairs, both batches have cast vote records. So 335 ballots are counted twice in the CVR. The audit counts each of these papers once. The Reconciliation Report shows the audit's totals with the repeats taken out.

In 3 pairs, one batch has no cast vote records. Its images are extra, but not counted.

Other findings

Conclusion

AuditEngine read each ballot sheet on its own and compared its reading with the CVR. 99.6% of the Ballot-Contests agreed, with no variation of any kind. In 1 contests, the disagreements and overvotes are large compared with the margin, even leaving out the disagreements that involve a write-in. These need a closer look, ballot by ballot, before their outcomes can be confirmed.

These results apply to the ballot sheets audited. An audit of every ballot sheet of an election can be done the same way, given the ballot images and the CVR.