A primary — the election in which a party’s voters choose its nominee — is supposed to let those voters read the candidates and choose. Is there anything to read? In 2014, 1,662 people ran in a congressional primary, and a team at the Brookings Institution opened every one of their campaign websites. They wrote down where each candidate stood on fourteen issues of the day: immigration, the Affordable Care Act, guns, abortion, the minimum wage, climate change and eight more.
222 of those candidates said nothing about any of the fourteen. That is not a gap in the data; it is the data. The coders gave themselves four codes for each issue, and the fourth one is “Candidate Provides No Information.” Read across all fourteen issues, the fourth code is the most common answer in the file. So this brief asks the question the file was built to answer: how much of a platform does a primary candidate actually publish, where a voter can read it?
The data is the Primaries Project database, compiled at the Brookings Institution by Elaine Kamarck and Alexander Podkul, reported in 2014,1 and downloadable from Brookings. Their question was about factions: whether the Tea Party — the conservative movement that rose against the Republican leadership after 2009 — was really taking over the Republican Party. To answer it they needed to place every candidate, not just the famous ones, so they coded nearly everybody who filed — 1,662 candidates, the whole field rather than a sample of it.
This source fits the question because of one fact about how it was made. The coding was done from the candidates’ own websites. Nobody interviewed these candidates and nobody sent them a questionnaire; a researcher read what each campaign chose to publish, and coded it. A survey would have offered “no opinion” and a candidate would have picked something. Here nobody was asked, so silence survives as a recorded value, which makes this the rare file where not saying is measured.
This brief belongs to the cluster the roster chapter introduces: records of who ran and who won, which say nothing about what any candidate stood for. This file holds the missing half, what the candidates would say, read against the same 2014 field. The test: count the silence, per issue and per candidate, and see whether it looks like an accident or like a strategy.
The workbook holds one row per candidate and 48 columns. The ones
this brief reads, by name: fourteen issue columns, each coded 1 to 4;
party and party_side;
prim_result, whether the candidate won or lost; and
faction_code. A derived count, silent_on,
gives the number of issues coded 4 for each candidate. The four
codes:
| Code | What the codebook calls it |
|---|---|
| 1 | Candidate Supports |
| 2 | Candidate Opposes |
| 3 | Candidate Provides Complicated/Complex/Unclear Position |
| 4 | Candidate Provides No Information |
Codes 1 and 2 are positions. Code 3 is a position the coder could not resolve into a side. Code 4 is not a position at all: the researcher read the website and found the subject was not raised.
One row shows how the count is made. Dave Brat, the challenger who
beat Eric Cantor in Virginia’s seventh district (the opening case of the
primary-defeats
brief), is coded on 11 of the 14 issues, every one of them a 2,
opposes. On the other 3 — the Keystone pipeline, the minimum
wage, climate change — the coder found nothing on his site, and entered
a 4. His silent_on is therefore 3, and that number, not his
views, is what the rest of this brief counts.
| Quantity | Value |
|---|---|
| Candidates coded | 1,662 |
| House candidates | 1,443 |
| Senate candidates | 219 |
| Issues coded per candidate | 14 |
| Columns in the workbook | 48 |
| Primary election dates covered | 15, from 4 March to 9 September |
The cleaning is where two programs — R and Python, the languages most
of this kind of work is done in — disagree about the same file. The
party column holds 15 distinct strings for what are really about a dozen
parties — three candidates filed under D followed by a
space, one Republican as G.O.P., one lowercase
Libertarian.
| The string in the cell | Candidates | Characters |
|---|---|---|
| R | 896 | 1 |
| D | 716 | 1 |
| No Party Preference | 19 | 19 |
| Libertarian | 7 | 11 |
| Independent | 6 | 11 |
| Green | 4 | 5 |
| “D” <- ends in a space | 3 | 2 |
| Peace and Freedom | 3 | 17 |
| Alaskan Independence | 2 | 20 |
| G.O.P. | 1 | 6 |
| libertarian | 1 | 11 |
Whether that trailing space exists depends on which program opens the file. R’s reader trims whitespace by default, so the three dirty cells arrive clean and nothing warns you; Python’s reader leaves them alone.
| Reading the same file with | Distinct party strings | What happens to “D” |
|---|---|---|
| Python, pandas.read_excel() | 15 | kept |
| R, readxl::read_excel() | 14 | silently trimmed to “D” |
| R, readxl::read_excel(trim_ws = FALSE) | 15 | kept |
Neither program is wrong. But a student who counts parties in R and one who counts in Python will disagree, and neither will see why. This brief reads the column both ways on purpose: the clean version is what the tables use, and the 3 cells that differ are counted and printed rather than assumed.
One variable is used only with a warning attached. The faction variable has ten codes; the codebook prints four of them, under the heading examples, and for codes 11, 33, 55, 66 and 99 there is no published definition anywhere.
| Code | Candidates | Party | What the codebook says it means |
|---|---|---|---|
| 11 | 261 | Republican | — not defined — |
| 22 | 251 | Republican | Tea Party Republican |
| 33 | 9 | Republican | — not defined — |
| 44 | 246 | Republican | Conservative Republican |
| 55 | 40 | Republican | — not defined — |
| 66 | 175 | Democrat | — not defined — |
| 77 | 308 | Democrat | Establishment Democrat |
| 88 | 66 | Democrat | Moderate Democrat |
| 99 | 47 | Third party | — not defined — |
| 100 | 259 | Democrat and Republican | — not defined — |
Altogether 791 (47.6%) candidates carry a faction code with no published meaning, and this brief does not guess what the codes are. Getting the file costs nothing: no account, no key, no fee. What is missing is any promise of permanence — both files sit in the website’s upload folder and carry no DOI, the permanent identifier a published dataset is given so that it can always be found, which is why copies are kept beside this brief.
Before you read on, write a number down. The file codes 14 issues for each of 1,662 candidates. On how many of those 14 do you think the typical candidate said nothing? Pick a number between 0 and 14, and commit to it before you look at the figures.
Figure 1. Where 1,662 candidates stood on fourteen issues, sorted by how many stayed off the subject. Stacked bars because every row is the same 1,662 candidates split four ways, so the rows are directly comparable; the figure at the right of each row is the share coded “provides no information.”
The range is wide and it is not random. Benghazi is the quietest subject at 84.5 percent and the Affordable Care Act the loudest at 29.3 percent. Read the top and bottom rows together. Benghazi — the 2012 attack on the U.S. diplomatic mission in Benghazi, Libya, and the congressional investigations that followed — was the story conservative media ran hardest in 2014, and 1,405 of 1,662 candidates did not put it on their website. The Affordable Care Act, the 2010 health-insurance law, was the most-discussed subject in the file, and 487 candidates still said nothing about it.
Figure 2. How many of the 14 issues each candidate left unmentioned. 12 candidates addressed all 14, which is 0.7 percent of the field; 222 addressed none of them.
Most readers guess something between two and four, because the candidates they can picture are the ones with a full issues page. The median is 8. And the shape matters more than the middle: this is not a hump around a typical candidate who covers most subjects. The distribution leans heavily toward silence, and its single tallest bar sits at the far end, where a candidate’s website mentioned none of the fourteen. The 222 are not all fringe candidates, either — some are serious people whose sites were a biography and a donate button.
| Primary result | House candidates | Mean issues left unmentioned |
|---|---|---|
| won | 779 | 7.3 |
| lost | 638 | 9.2 |
| runoff | 26 | 8.5 |
House candidates who won their primary left 7.3 of the 14 issues unmentioned on average; the ones who lost left 9.2. Do not read that as a finding about what wins primaries. Winners include hundreds of incumbents running unopposed, who have the least to gain from a policy page and the most staff to build one. The comparison is here because it shows the variable is not noise: it moves with something. What it moves with, this file cannot say.
Why does the silence matter for democracy? There is a book about exactly this. Parties on the Ground (2026), by Kathleen Bawn, John Zaller and four colleagues, studies 55 winnable open-seat nominations — contests with no sitting member running, in districts the party could expect to win — from this same 2013–14 cycle through 346 interviews.2 Its argument is that primaries do not work the way the Progressive-era reformers who created the direct primary a century ago intended. Most voters pay too little attention to use them; the actors who matter are organised groups with intense policy demands, who vet candidates, vouch for them, and supply or withhold money.
Figure 1 is the public half of that argument. If a voter wanted to do the job the primary was designed to give them, the website is where they would start. On the median candidate they would find 6 of 14 subjects addressed, and on 222 candidates none. The groups in Bawn’s account are not reading websites — they meet candidates and get answers that are never published. So the fourth code is doing more than flagging missing values. It measures how much of a nomination contest happens where the public cannot see it.
It cannot tell you what candidates believed. It records published claims. A candidate who opposed the Affordable Care Act privately and never mentioned it is coded identically to one who had no view.
It cannot tell you why a subject was left out. Silence on immigration might be strategy in a district where the issue splits your coalition. It might be a website built in a weekend, or a candidate who talks about the subject constantly at events and never wrote it down. The code is the same in all three cases.
It cannot separate “no experience” from “we could not find out.” The prior-office variable is a 0/1 flag whose zero the codebook defines as “No or No information – never held office and not established are one code”. Two very different candidates share that number.
It is one election. 2014 was a midterm with an unpopular Democratic president and a Republican faction fight in progress. Nothing here establishes that campaign websites are usually this empty.
And the websites are gone. The coding was done in 2014 from live sites, and most of those domains now expire or redirect. The file is the only surviving record of what it describes, which means its coding decisions cannot be audited by anyone, including its authors.
None of these is answered above, and every one can be answered from the tables the Sources section hands over.
by_issue.csv gives silent_pct for every
issue. Sort it. Which issues do candidates most avoid, and is avoidance
a position?by_count.csv counts candidates by
silent_on. Find the typical candidate. How much of a
platform is actually stated?by_outcome.csv compares mean_silent for
winners and losers. Does saying less help you win a primary, or is
something else moving both?factions.csv has a documented flag and
codes with no label at all. Count the undocumented candidates. What do
you do with a variable whose codebook is incomplete?party_labels.csv records every raw party string with
its characters count. Find the labels that are really the
same party. How many candidates would a naive count misfile?Two stretch ideas point past the spreadsheet. Pick five candidates
from candidates.csv and look their 2014 campaign sites up
in the Internet Archive’s Wayback Machine. Check the coding of one issue
against what the archived page says, and note how many sites survive at
all. And read this file beside the nomination-anchors
brief, which rebuilds Bawn and Zaller’s 55 open-seat contests from the
same cycle. Do the candidates groups organised behind say more or less
on their websites than the field?
Data
Copies of both files are kept beside this brief, because Brookings
serves them from its website’s upload folder rather than an archive, and
neither carries a DOI. The party column is read twice, once with
whitespace trimming turned off, and the difference between the two reads
is reported rather than resolved silently; the validation results are
reproduced in checks.csv.
Academic literature
The data itself
Every figure above is drawn from these tables. They are plain CSV, they open in a spreadsheet, and they are yours to take further.
by_count.csv, by_issue.csv, by_outcome.csv, candidates.csv, factions.csv, party_labels.csv
One more file is not data about the subject – it is how this chapter
checked its own work: checks.csv, the
arithmetic verified before anything was drawn.
I want to rebuild a public dataset from its original source, without any starting files. Please do the following and show your work. THE SOURCE. Brookings Institution, The Primaries Project, compiled by Elaine Kamarck's team, who read the campaign website of every 2014 congressional primary candidate and coded what it said. One Excel workbook, about 640 KB, in the old .xls format: https://www.brookings.edu/wp-content/uploads/2016/06/PrimariesDatabase_Clean.xls and its codebook, a Word document in the same folder, PrimariesCodeBook_clean.docx. Each row is one candidate. No account or key is needed. The file was last saved in January 2015 and will never be updated; the address is a content-management system's uploads folder, so the risk is the link dying, not the data changing. HOW TO DOWNLOAD IT. Nothing blocks the download, but watch your reader: some tools silently trim whitespace from text cells. Read the party column exactly as stored at least once, because a few cells end in a space, and whether they exist depends on who is looking. WHAT TO BUILD. 1. A count of the rows and columns, and the distinct strings in the party column — first exactly as the file stores them, then after trimming — reporting how many the trim makes disappear. 2. From the fourteen issue columns, each coded 1 to 4, where 4 means the website never mentioned the issue: how many of the fourteen each candidate is silent on, its median, and how many candidates are silent on all fourteen and on none. CHECK YOUR WORK. The copy this book used was downloaded in August 2026. If your rebuild matches it, you should find: - 1,662 candidates and 48 columns - 15 distinct party strings exactly as stored; a whitespace-trimming reader sees only 14 - the median candidate is silent on 8 of the 14 issues - 222 candidates are silent on all fourteen, 12 on none The workbook has not changed since 2015 and should not change again; any difference means you are holding a different file.
Elaine C. Kamarck and Alexander R. Podkul, “The 2014 Congressional Primaries: Who Ran and Why,” Brookings Institution, 2014, https://www.brookings.edu/articles/the-2014-congressional-primaries-who-ran-and-why/.↩︎
Kathleen Bawn, Knox Brown, Angela X. Ocampo, Shawn
Patterson Jr., John L. Ray and John Zaller, Parties on the Ground: A
Study of Nominations for the House of Representatives (Chicago:
University of Chicago Press, 2026), https://doi.org/10.7208/chicago/9780226853314.001.0001;
the nomination-anchors
brief rebuilds its tables.↩︎