Local Elections

Show page descriptions

This site is primarily concerned with the next general election, but it's hard to resist including information about local elections as well, where interesting data can be displayed. Only the main local elections each year are included here; no local by-elections, and no mayoral elections.

See the methodology at the end of the page for details on how the Sankey diagrams are constructed.

Hide page descriptions


May 7, 2026 (England only)

Results as per Wikipedia, with others/independents from BBC News:

Party Seats Won Change
Labour 1068 -1496
Conservative 801 -563
Liberal Democrats 844 +155
Green 587 +441
Reform 1453 +1451
Other/Independent 311 +12

Note: "Other/Independent" includes Aspire and Residents' Association.

Sankey diagrams (partial information)

Select one of the options below to see a Sankey diagram of how seat counts flowed between parties.

Represented seat counts

Missing data reasons

May 1, 2025

Results as per Wikipedia:

Party Seats Won Total Seats Change
Labour 99 6132 -186
Conservative 316 4358 -676
Liberal Democrats 370 3179 +163
Green 80 895 +45
Reform 677 805 +677
Other/Independent 94 2602 -23

Sankey diagrams (partial information)

Select one of the options below to see a Sankey diagram of how seat counts flowed between parties.

Represented seat counts

Missing data reasons

Methodology

Many web sites provide overall numbers of how many seats a party has won or lost compared with the previous time those seats were contested. That information is included here, but additionally, there's an attempt - as far as possible - to show the flow of seats from one party to another, via Sankey diagrams. These diagrams show fewer seats than the total number contested, for various different reasons:

(In the future, I may represent ambiguities with an intervening "unknown" node.)

Multi-seat algorithm

When multiple seats are filled in an electoral district, and when the previous election had the same number of seats available, the following algorithm is used to construct transitions from "party before" to "party after":

When the "previous" and "current" seat counts are not the same, the results are still attributed if there were at least as many "previous" seats as "current" seats, and the "previous" seats were all elected to the same party. This could be the case when the matched "previous" election was a whole-council re-election (e.g. following boundary changes) followed by multiple years where a single councillor would be elected. If all the councillors who were elected at the same time were all from the same party, it doesn't matter which of them had their term come to an end at the "current" election.

Algorithm examples

Simple (no left-overs to consider): (Con, Lab, Con) => (Con, Con, Lab):

All "unused current winners" are in the same party: (Con, Lab, LibDem, Green) => (Ref, Con, Lab, Ref):

All "previous" entries are in the same party: (Con, Lab, Lab, Lab) => (Ref, Con, Lab, LibDem):

Both remaining pools have multiple parties: (Con, Lab, Green) => (Lab, Ref, LibDem):

(In this case, only two of the seats count as being "missing".)