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.