This dataset contains anonymized, individual-level Cast Vote Records (CVR) from the historic November 7, 2000 United States General Election in Florida. The data covers 10 selected counties (Broward, Highlands, Hillsborough, Lee, Marion, Miami-Dade, Palm Beach, Pasco, Pinellas, and Sarasota), capturing the complete ballot profile (the “long ballot”) for each individual voter across concurrent federal, state, county, district, and local elections, as well as referendums.
Because each observation maps the exact combination of choices made by a single voter across multiple offices on a single ballot, this dataset offers rare, high-resolution insights into historical voting behavior. A level of detail that is typically unavailable to researchers working with aggregated precinct returns.
Individual-Level Voting Behavior and Ticket Splitting. Ideal for analyzing cross-party voting patterns and candidate-valence effects down the ballot, aligning with foundational literature on electoral behavior such as the study of ticket splitting in nationalized electoral eras.
Ecological Inference Benchmarking. Provides a ground-truth individual dataset to validate, test, and benchmark statistical models of ecological inference that typically rely on aggregate precinct data. Researchers can directly compare individual-level voting patterns with the estimates produced by ecological inference methods such as lphom, eiPack, or ecolRxC. Beyond general validation, the dataset enables systematic comparison of competing EI methods under real-world conditions, since the true individual-level distributions are known. This includes studying how precinct size—which varies substantially across Florida counties — affects estimation precision.
Ballot Design and Voting Irregularities. Enables investigation of the structural impact of ballot design on overvotes, undervotes, and residual votes during the highly contested 2000 Florida presidential race—one of the most studied elections in American political history. The Palm Beach microdata offer a unique opportunity to analyze empirically the impact of the infamous butterfly ballot design on observed voting patterns, going beyond the aggregate-level analyses that were possible at the time of the recount controversy.
Roll-off and Ballot Fatigue. Allows researchers to analyze how and where voters stop casting votes as they move from top-of-ticket races (President) to down-ballot local contests, and how this pattern varies across counties and demographic contexts.
Intra-ballot Vote Consistency and Ideological Coherence. The full ballot profile enables analysis of the degree to which voters are ideologically consistent across races (for example, voting Republican for President but Democrat for Sheriff), a research question that is simply impossible to address with aggregate precinct data.
Sub-county Electoral Geography and Polarization. Combined with geographic boundary files for Florida precincts (available from the Florida Division of Elections or the U.S. Census Bureau’s TIGER/Line shapefiles), this dataset enables mapping of electoral polarization at the precinct level within each county — a finer spatial resolution than is typically available from county-level returns.
Local Electoral Competition and Turnout. When merged with candidate-level data on the competitiveness of local races (available from official Florida election results), the dataset allows researchers to test whether the presence of competitive down-ballot contests (sheriff, county commissioner) affects participation rates in federal races within the same precinct.
| County | File | Voters | Precincts | Races |
|---|---|---|---|---|
| Broward | Broward.RData |
588,007 | 747 | 59 |
| Highlands | Highlands.RData |
22,237 | 20 | 23 |
| Hillsborough | Hillsborough.RData |
355,027 | 366 | 52 |
| Lee | Lee.RData |
188,857 | 194 | 35 |
| Marion | Marion.RData |
105,185 | 115 | 28 |
| Miami-Dade | Miami_Dade.RData |
651,650 | 762 | 53 |
| Palm Beach | Palm_Beach.RData |
447,466 | 592 | 43 |
| Pasco | Pasco.RData |
146,648 | 148 | 27 |
| Pinellas | Pinellas.RData |
406,956 | 377 | 42 |
| Sarasota | Sarasota.RData |
163,750 | 159 | 38 |
| Total | 3,075,783 | 3,480 | 247 distinct |
Precinct counts include absentee and early-voting precincts, which pool ballots from several districts and are not geographic units. The 400 county-race columns correspond to 247 distinct races (statewide races appear in every county file).
Coverage. In six counties (Broward, Lee, Miami-Dade, Pasco, Pinellas and Sarasota) the data reproduce the certified results almost exactly (median absolute difference below 0.5%). In Marion the file of one absentee precinct (A008) is not in the source (98.9% of the certified presidential vote). In Palm Beach and Hillsborough some precinct files of the source were overwritten by test decks or survive only as fragments and could not be used: coverage is about 96% of the certified votes, and lower for some district races. Highlands is a partial sample: about 62% of the certified votes. A few local races placed at the end of the ballot are not recorded in the source files (e.g. Tampa amendment 6; fire-district and municipal races in Lee).
Each .RData file contains a single
data.frame object with the same name as the file (e.g.,
Lee in Lee.RData, Miami_Dade in
Miami_Dade.RData). The structure is:
COUNTY: County identifier
(character).PRECINCT: Precinct identifier
within the county (character).PRE for President, USS for US Senator). See
the codebook for the full list of race codes and the offices they
represent.Vote codes in each race column:
| Code | Meaning |
|---|---|
Candidate code (e.g. R,
D, BauDuf) |
Valid vote for that candidate or combination |
A |
Abstention (Undervote): the voter was eligible but made no choice in this race |
I |
Invalid vote (Overvote): the voter’s mark was not counted, more marks than allowed |
NA |
The voter was not eligible to vote in this race (structural non-participation) |
The distinction between A, I, and
NA is critical for statistical analysis: only
NA values indicate that a voter was outside the eligible
universe for a given race.
The meaning of race-specific codes is provided in codebook. In
particular, codes such as D, R, and
O typically denote Democratic, Republican, and other party
affiliation candidates, respectively. However, their specific
interpretation depends on the coding of the corresponding race and
should not be assumed to have the exact same meaning across all
races.
Some races allowed voters to select more than one candidate (e.g.,
hospital board seats). In these cases, each observed combination of
candidates is recorded as an atomic string (e.g., BauDuf
for a voter who selected both Bauchert and Duff). The codebook lists the
individual candidates for each multi-member race.
images_county_ballots/Contains scanned images of the official ballots used in each county
during the November 2000 general election. These images document the
physical layout of each ballot, showing the ballot positions: the
physical locations on the paper ballot that the optical scanner (or the
visual inspection) reads as marked (1) or unmarked (0). Researchers can
use (with significant amount of work) these images to cross-reference
the raw scanner data in raw_data/ with the race codes used
in the processed .RData files, and to study the effect of
ballot layout on voter behavior (e.g., the butterfly ballot in Palm
Beach County).
package/Contains the source package eiballots for R, which
provides documented accessor functions for the processed
.RData files, a catalog of races and counties, and tools
for computing marginal distributions and joint contingency arrays for
ecological inference. The package can be installed directly in R:
install.packages("path/to/package/eiballots_0.2.0-1.tar.gz",
repos = NULL, type = "source")Alternatively, it can be installed from CRAN with
install.packages("eiballots").
raw_data/Contains the raw scanner (visual inspected) data files in
semicolon-delimited CSV format (.csv), one file per county.
Each row represents one voter; each column corresponds to a
ballot position: a physical location on the optical
scan ballot that the voting machine reads. Values are binary:
| Value | Meaning |
|---|---|
1 |
That ballot position was marked (identified as marked) by the voter |
0 |
That ballot position was not marked |
These files reflect the original machine-read data before any
processing or recoding. The ballot images in
images_county_ballots/ document which ballot position
corresponds to which candidate or option in each race, allowing
researchers to reconstruct the full voting record from the raw scanner
output. The processed .RData files in the root of this
deposit are derived (with significant amount of work) from these raw
files.
The easiest way to access this dataset is through the companion R
package eiballots, which provides documented accessor
functions, catalog objects, and tools for computing ecological inference
summaries.
The codebook.pdf included in this deposit provides a
printable reference of all race codes, offices, candidates, and county
coverage. This is equivalent to the information returned by
list_elections() and election_catalog in the
eiballots package.
# Install the package
# install.packages("eiballots")
# Set the data directory to a local folder if you have downloaded the files
options(data_dir = "/path/to/downloaded/files/")
# Or leave unset to download directly from this OSF repository
if (is.null(getOption("data_dir"))) {
message(
"\n[Performance Note]: You are loading data directly from OSF.\n",
"To speed up execution, avoid download wait times, and remove dependency\n",
"on OSF server availability, it is highly recommended to:\n",
" 1. Download the .RData files from https://osf.io/np73b/overview to a local folder.\n",
" 2. Set your local path by running: options(data_dir = '/path/to/files/')\n"
)
}
# Load a single county
library(eiballots)
lee <- get_county_data("Lee")
dim(lee) # rows = voters, columns = COUNTY + PRECINCT + races
head(lee[, 1:6])
# List available races
list_elections()
list_elections(level = "federal")
# Compute ecological inference summaries for two races
obj <- ei_summary(c("PRE", "USS"))
print(obj)
summary(obj)For users who prefer to work directly with the .RData
files without the package:
# Load a county file directly
load("Lee.RData") # loads the object 'Lee' into the workspace
dim(Lee)The raw Cast Vote Records were originally collected by Dan Keating (data reporter, The Washington Post) in connection with The Media Consortium Florida Ballot Project, and made available through personal communication and the American National Election Studies (ANES, University of Michigan) following the 2000 Florida recount controversy.
The present dataset is an elaboration of those raw records: vote
codes were standardized across counties, multi-member race combinations
were encoded consistently, structural non-participation was
distinguished from blank and invalid votes, test decks and duplicated
tabulation runs were removed, and ballot positions that conflated votes
from distinct races were disentangled where possible. Eligibility for
district races was inferred from the share of voters of each precinct
marking the race and refined at the voter level for split precincts.
Where official precinct-level returns or ballot-position worksheets were
available (Lee, Palm Beach, Miami-Dade), they were used to assign
districts or to check the position mapping; elsewhere the assignment
relies on the observed voting patterns. County totals were validated
against the certified results of the Florida Division of Elections. All
processing steps are documented in the companion data paper (see
Citation: to be published); the changes between versions are listed in
NEWS.md.
The data is organized by county. Each race is classified by level following the types of government of the U.S. Census of Governments (federal, state, county, municipal and special district) and by type (single-member, multi-member and referendum).
This dataset is natively anonymous at the source. It contains no personally identifiable information (PII): no voter names, addresses, registration numbers, or any other personal identifying information. The data retains full statistical integrity while preserving complete compliance with research data ethics standards.
This dataset is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0). https://creativecommons.org/licenses/by/4.0/
The raw Cast Vote Records on which this dataset is based were made available to the authors through personal communication by Dan Keating (The Washington Post) and the American National Election Studies (ANES, University of Michigan).
If you use this dataset in your research, please cite it as:
Cristina Aybar and Jose M. Pavía. (2026). Florida 2000 General Election — Ballot-Level Microdata [Dataset]. OSF. https://doi.org/10.17605/OSF.IO/NP73B
A BibTeX entry is available via the OSF project page. If you use the
eiballots R package, please also cite:
Cristina Aybar and Jose M. Pavía. (2026). eiballots: Ballot-Level Microdata and Tools for Ecological Inference (Florida 2000). R package, version 0.2.0-1. https://doi.org/10.32614/CRAN.package.eiballots
Own elaboration from raw ballot data from the Florida general election, November 7, 2000, made available to the authors through personal communication by Dan Keating (data reporter, The Washington Post) and the American National Election Studies (ANES, University of Michigan).
We thank Jaime Ventura (ANES, University of Michigan) and Dan Keating (The Washington Post) for providing the raw data that serve as the starting point for the construction of this package. We also acknowledge funding from the Conselleria de Educación, Cultura y Universidades (grant CIACIO/2023/031).
For questions about the data or the companion package, please contact pavia@uv.es.