Skip to content
JACK BAILEY

Cleaning Up CLEA

Hand-coded corrections to errors in the Constituency-Level Elections Archive

A closer look at an imaginary ballot A magnifying glass moves across one stationary ballot paper, enlarging the coloured party symbols, straight lines, and voting boxes beneath its lens. A black X marks the leaf party's box. The ballot is illustrative and contains no real candidates or election results.

To understand electoral systems, we have to compare what happens when people vote under different rules and in different contexts. We also have to look beyond national-level results, since electoral rules affect results at the constituency level. Otherwise, we risk confusing the impact of the electoral system from the impact of aggregating results.

This is what makes the Constituency-Level Elections Archive, or CLEA, such a valuable resource. Its most recent release brings together data from 2,304 elections in 189 countries and territories, giving researchers access to detailed returns that would otherwise take them years to collect. I used these data in my recent paper on effective electoral thresholds, which asks how many votes a party needs to have an even chance of winning a seat in its district. As I explained in the accompanying post, the answer depends on both the number of seats available and how voters divide their support.

While working on that paper, however, I found a number of errors and impossible results in the CLEA data. Some parties had incorrect vote totals; others had the wrong number of seats. Some districts had the wrong district magnitude, some results were assigned to the wrong constituency, there were duplicated rows, and other similar issues. Most looked like simple transcription errors, but they were far from isolated: In total, I found errors in 446 elections. Obviously, these errors affect our ability to understand electoral systems.

Take the district of Leiria, in Portugal’s 2015 election. CLEA records 120,700 votes for the Democratic Unity Coalition (CDU). However, it also records the party as winning no seats, despite the fact that this many votes would have put it in first place. The reason why is that its support is ten times too large: the CDU actually won 12,070 votes, as the official returns make clear. Switch between the original and corrected figures below to see how this errant zero changes the apparent result.

Ten seats · One extra zero

Leiria, Portugal · 2015

Leiria, Portugal · 2015: original and corrected party votes and seats. Highlighted cells are those affected by the correction.
PartyVotesSeats
Portugal à Frente 114,829 6
Socialist Party 58,878 3
Left Bloc 22,946 1
CDUDemocratic Unity Coalition 120,700 0
Other parties11 smaller parties combined 16,904 0

CDU appears to have the most votes, yet wins no seats.

Highlighted cells change when you switch versions. All 15 party lists are included; 11 are grouped. Blank ballots are excluded. Rows keep the same order for comparison.

Source: CLEA, October 2025 release. Correction code · Official Portuguese returns.

A similar error appears in Coventry South East in the 1992 UK general election. Dave Nellist, an Independent Labour candidate, won 10,551 votes and finished third, just 40 votes behind the Conservative candidate. However, CLEA includes his vote total twice. Aggregating the data to the party level therefore gives Nellist 21,102 votes, well ahead of Labour’s winning 11,902 votes. Removing the duplicate restores the actual result.

One seat · The same votes counted twice

Coventry South East, UK · 1992

Coventry South East, UK · 1992: original and corrected party votes and seats. Highlighted cells are those affected by the correction.
PartyVotesSeats
Labour 11,902 1
Conservative 10,591 0
Independent LabourDave Nellist 21,102 0
Liberal Democrats 3,318 0
National Front 173 0

Nellist appears to come first. Party votes total 47,086, exceeding the 36,535 valid votes cast.

Highlighted cells change when you switch versions. All five parties shown. Votes and seats are summed by party: the original contains two Independent Labour rows, each with 10,551 party votes and no seat. Clean CLEA removes one of them.

Source: CLEA, October 2025 release. Correction code · UK Parliament: constituency history.

My GitHub repository Clean CLEA documents all of the errors I found with the CLEA data, together with the code and source references needed to inspect and reproduce them. The repository contains the cleaned archive and a separate dataset restricted to simple electoral systems, both available as R files (.rds) and zipped Stata files (.dta.zip). I have also contacted the CLEA team to make them aware of the issues. If you inspect the data and find further issues, or can complement the data in any way, please let me know.

Explore Clean CLEA on GitHub