# City of Johannesburg elections

The City of Johannesburg Metropolitan Municipality council consists of 270 city councilors elected by mixed-member proportional representation. The councillors are divided into two kinds: (a) 135 Ward councillors who have been elected by first-past-the-post voting in 135 wards; and (b) 135 councillors elected from party lists (so that the total number of party representatives is proportional to the number of votes received).
Ward Councillors have more local responsibilities, including setting up Ward Committees in their wards to raise local issues, commenting on town planning and other local matters in their ward, and liaising with local ratepayers' and residents' associations. PR Councillors are usually allocated to more political tasks within their party structures and within the City.

## Results

The following table shows the composition of the council after past elections.
| Event | ANC | DA | ASA | EFF | PA | IFP | FF+ | NNP | Other | Total |
| 2000 election | 128 | 73 | — | — | — | 8 | 1 | — | 7 | 217 |
| 2002 floor-crossing | 133 | 59 | — | — | — | 7 | 0 | 8 | 10 | 217 |
| 2004 floor-crossing | 139 | 60 | — | — | — | 8 | 0 | 0 | 10 | 217 |
| 2006 election | 136 | 59 | — | — | — | 7 | 1 | — | 14 | 217 |
| 2007 floor-crossing | 137 | 59 | — | — | — | 9 | 1 | — | 11 | 217 |
| 2011 election | 153 | 90 | — | — | — | 4 | 1 | — | 12 | 260 |
| 2016 election | 121 | 104 | — | 30 | 1 | 5 | 1 | — | 8 | 270 |
| 2021 election | 91 | 71 | 44 | 29 | 8 | 7 | 4 | — | 16 | 270 |

## December 2000

The following table shows the results of the 2000 election.
| Party | Party | Ward | Ward | Ward | List | List | List | Total seats |
| Party | Party | Votes | % | Seats | Votes | % | Seats | Total seats |
| | African National Congress | 354,225 | 59.00 | 70 | 352,707 | 58.79 | 58 | 128 |
| | Democratic Alliance | 202,421 | 33.72 | 37 | 199,905 | 33.32 | 36 | 73 |
| | Inkatha Freedom Party | 20,924 | 3.49 | 2 | 21,730 | 3.62 | 6 | 8 |
| | Pan Africanist Congress of Azania | 7,088 | 1.18 | 0 | 7,713 | 1.29 | 3 | 3 |
| | United Democratic Movement | 2,443 | 0.41 | 0 | 4,836 | 0.81 | 1 | 1 |
| | Independent candidates | 6,397 | 1.07 | 0 | | | | 0 |
| | African Christian Democratic Party | 726 | 0.12 | 0 | 4,196 | 0.70 | 1 | 1 |
| | Christian Democratic Party | 1,752 | 0.29 | 0 | 2,506 | 0.42 | 1 | 1 |
| | Azanian People's Organisation | 1,455 | 0.24 | 0 | 1,943 | 0.32 | 1 | 1 |
| | Freedom Front Plus | 1,478 | 0.25 | 0 | 1,114 | 0.19 | 1 | 1 |
| | Gemini Movement | 716 | 0.12 | 0 | 1,086 | 0.18 | 0 | 0 |
| | Green Party of South Africa | 209 | 0.03 | 0 | 1,335 | 0.22 | 0 | 0 |
| | Workers Party | 208 | 0.03 | 0 | 866 | 0.14 | 0 | 0 |
| | Thembelihle Masibambane Civic Organisation | 330 | 0.05 | 0 | | | | 0 |
| Total | Total | 600,372 | 100.00 | 109 | 599,937 | 100.00 | 108 | 217 |
| Valid votes | Valid votes | 600,372 | 98.29 | | 599,937 | 98.25 | | |
| Invalid/blank votes | Invalid/blank votes | 10,458 | 1.71 | | 10,686 | 1.75 | | |
| Total votes | Total votes | 610,830 | 100.00 | | 610,623 | 100.00 | | |
| Registered voters/turnout | Registered voters/turnout | 1,552,791 | 39.34 | | 1,552,791 | 39.32 | | |

### By-elections (December 2000–October 2002)

The following by-elections were held to fill vacant ward seats in the period between the election in December 2000 and the floor crossing period in October 2002.
| Date | Ward | Party of the previous councillor | Party of the newly elected councillor |
| 15 September 2001 | 1 | African National Congress | African National Congress |
| 15 September 2001 | 93 | Democratic Alliance | Democratic Alliance |
| 17 April 2002 | 107 | African National Congress | African National Congress |
| 15 May 2002 | 47 | African National Congress | Independent |
| 25 September 2002 | 97 | Democratic Alliance | Democratic Alliance |

### October 2002 floor crossing

In terms of the Eighth Amendment of the Constitution and the judgment of the Constitutional Court in United Democratic Movement v President of the Republic of South Africa and Others, in the period from October 8 to 22, 2002 councillors had the opportunity to cross the floor to a different political party without losing their seats.
In the Johannesburg council, eight councillors crossed from the Democratic Alliance (DA) to the New National Party (NNP), which had formerly been part of the DA, and six councillors crossed from the DA to the African National Congress (ANC). One councillor each from the Inkatha Freedom Party and the Freedom Front Plus crossed to the Christian Democratic Party (CDP). The single councillor of the Azanian People's Organisation crossed to the Black Consciousness Forum.
| Party | Seats before | Net change | Seats after |
| African National Congress | 127 | 6 | 133 |
| Democratic Alliance | 73 | 14 | 59 |
| New National Party | – | 8 | 8 |
| Inkatha Freedom Party | 8 | 1 | 7 |
| Pan Africanist Congress of Azania | 3 | 0 | 3 |
| Christian Democratic Party | 1 | 2 | 3 |
| United Democratic Movement | 1 | 0 | 1 |
| African Christian Democratic Party | 1 | 0 | 1 |
| Independent | 1 | 0 | 1 |
| Black Consciousness Forum | — | 1 | 1 |
| Azanian People's Organisation | 1 | 1 | 0 |
| Freedom Front Plus | 1 | 1 | 0 |

### By-elections (October 2002–August 2004)

The following by-elections were held to fill vacant ward seats in the period between the floor crossing periods in October 2002 and September 2004.
| Date | Ward | Party of the previous councillor | Party of the newly elected councillor |
| 30 October 2002 | 75 | African National Congress | Inkatha Freedom Party |
| 22 January 2003 | 60 | African National Congress | African National Congress |
| 7 May 2003 | 57 | Democratic Alliance | Democratic Alliance |
| 15 October 2003 | 41 | African National Congress | African National Congress |
| 23 June 2004 | 70 | Democratic Alliance | Democratic Alliance |
| 23 June 2004 | 89 | Democratic Alliance | Democratic Alliance |

### September 2004 floor crossing

Another floor-crossing period occurred on 1–15 September 2004. Seven councillors crossed from the NNP to the ANC, one councillor crossed from the NNP to the Independent Democrats, and one crossed from the CDP to the DA.
| Party | Seats before | Net change | Seats after |
| African National Congress | 132 | 7 | 139 |
| Democratic Alliance | 59 | 1 | 60 |
| Inkatha Freedom Party | 8 | 0 | 8 |
| Pan Africanist Congress of Azania | 3 | 0 | 3 |
| Christian Democratic Party | 3 | 1 | 2 |
| United Democratic Movement | 1 | 0 | 1 |
| African Christian Democratic Party | 1 | 0 | 1 |
| Independent | 1 | 0 | 1 |
| Black Consciousness Forum | 1 | 0 | 1 |
| Independent Democrats | — | 1 | 1 |
| New National Party | 8 | 8 | 0 |

### By-elections (September 2004–February 2006)

The following by-elections were held to fill vacant ward seats in the period between the floor crossing periods in September 2004 and the election in March 2006.
| Date | Ward | Party of the previous councillor | Party of the previous councillor | Party of the newly elected councillor | Party of the newly elected councillor |
| 20 April 2005 | 38 | | African National Congress | | African National Congress |
| 27 July 2005 | 74 | | Democratic Alliance | | Democratic Alliance |

## March 2006

The following table shows the results of the 2006 election.
| Party | Party | Ward | Ward | Ward | List | List | List | Total seats |
| Party | Party | Votes | % | Seats | Votes | % | Seats | Total seats |
| | African National Congress | 429,282 | 61.85 | 75 | 433,051 | 62.74 | 61 | 136 |
| | Democratic Alliance | 187,340 | 26.99 | 31 | 187,116 | 27.11 | 28 | 59 |
| | Inkatha Freedom Party | 23,137 | 3.33 | 2 | 23,460 | 3.40 | 5 | 7 |
| | Independent Democrats | 13,000 | 1.87 | 0 | 13,369 | 1.94 | 4 | 4 |
| | Independent candidates | 13,883 | 2.00 | 1 | | | | 1 |
| | African Christian Democratic Party | 6,831 | 0.98 | 0 | 6,688 | 0.97 | 2 | 2 |
| | Pan Africanist Congress of Azania | 5,252 | 0.76 | 0 | 5,638 | 0.82 | 2 | 2 |
| | Freedom Front Plus | 3,943 | 0.57 | 0 | 3,951 | 0.57 | 1 | 1 |
| | United Democratic Movement | 1,931 | 0.28 | 0 | 4,024 | 0.58 | 1 | 1 |
| | Azanian People's Organisation | 2,827 | 0.41 | 0 | 2,993 | 0.43 | 1 | 1 |
| | Operation Khanyisa Movement | 1,173 | 0.17 | 0 | 3,132 | 0.45 | 1 | 1 |
| | Christian Democratic Party | 1,503 | 0.22 | 0 | 1,485 | 0.22 | 1 | 1 |
| | Christian Front | 1,621 | 0.23 | 0 | 1,296 | 0.19 | 1 | 1 |
| | National Democratic Convention | 773 | 0.11 | 0 | 1,608 | 0.23 | 0 | 0 |
| | United Independent Front | 338 | 0.05 | 0 | 1,046 | 0.15 | 0 | 0 |
| | Gemini Movement | 538 | 0.08 | 0 | 625 | 0.09 | 0 | 0 |
| | Black Consciousness Forum | 182 | 0.03 | 0 | 451 | 0.07 | 0 | 0 |
| | Sunrise Park, Protea City and Greenside Residents' Association | 469 | 0.07 | 0 | | | | 0 |
| | Economic Freedom Movement | 40 | 0.01 | 0 | 331 | 0.05 | 0 | 0 |
| Total | Total | 694,063 | 100.00 | 109 | 690,264 | 100.00 | 108 | 217 |
| Valid votes | Valid votes | 694,063 | 98.56 | | 690,264 | 98.29 | | |
| Invalid/blank votes | Invalid/blank votes | 10,138 | 1.44 | | 12,001 | 1.71 | | |
| Total votes | Total votes | 704,201 | 100.00 | | 702,265 | 100.00 | | |
| Registered voters/turnout | Registered voters/turnout | 1,739,292 | 40.49 | | 1,739,292 | 40.38 | | |

### By-elections (March 2006–August 2007)

The following by-elections were held to fill vacant ward seats in the period between the election in March 2006 and the floor crossing period in September 2007.
| Date | Ward | Party of the previous councillor | Party of the previous councillor | Party of the newly elected councillor | Party of the newly elected councillor |
| 7 June 2006 | 10 | | African National Congress | | African National Congress |
| 23 May 2007 | 31 | | African National Congress | | African National Congress |

### September 2007 floor crossing

The final floor-crossing period occurred on 1–15 September 2007; floor-crossing was subsequently abolished in 2008 by the Fifteenth Amendment of the Constitution. In the Johannesburg council two councillors crossed from the Independent Democrats to the Inkatha Freedom Party, one councillor crossed from the Pan Africanist Congress (PAC) to the African People's Convention, and one councillor crossed from the PAC to the African National Congress.
| Party | Seats before | Net change | Seats after |
| African National Congress | 136 | 1 | 137 |
| Democratic Alliance | 59 | 0 | 59 |
| Inkatha Freedom Party | 7 | 2 | 9 |
| Independent Democrats | 4 | 2 | 2 |
| Independent | 1 | 0 | 1 |
| African Christian Democratic Party | 2 | 0 | 2 |
| Freedom Front Plus | 1 | 0 | 1 |
| United Democratic Movement | 1 | 0 | 1 |
| Azanian People's Organisation | 1 | 0 | 1 |
| Operation Khanyisa Movement | 1 | 0 | 1 |
| Christian Democratic Party | 1 | 0 | 1 |
| Christian Front | 1 | 0 | 1 |
| African People's Convention | — | 1 | 1 |
| Pan Africanist Congress of Azania | 2 | 2 | 0 |

### By-elections (September 2007–May 2011)

The following by-elections were held to fill vacant ward seats in the period between the floor crossing period in September 2007 and the election in May 2011.
| Date | Ward | Party of the previous councillor | Party of the newly elected councillor |
| 26 September 2007 | 22 | African National Congress | African National Congress |
| 26 September 2007 | 103 | Democratic Alliance | Democratic Alliance |
| 15 October 2008 | 76 | African National Congress | African National Congress |
| 28 January 2009 | 19 | African National Congress | African National Congress |
| 8 July 2009 | 90 | Democratic Alliance | Democratic Alliance |
| 2 September 2009 | 18 | Democratic Alliance | Democratic Alliance |

## May 2011

The following table shows the results of the 2011 election.
| Party | Party | Ward | Ward | Ward | List | List | List | Total seats |
| Party | Party | Votes | % | Seats | Votes | % | Seats | Total seats |
| | African National Congress | 626,026 | 57.82 | 84 | 646,328 | 59.29 | 69 | 153 |
| | Democratic Alliance | 377,799 | 34.90 | 45 | 374,505 | 34.35 | 45 | 90 |
| | Inkatha Freedom Party | 17,933 | 1.66 | 1 | 17,557 | 1.61 | 3 | 4 |
| | Congress of the People | 12,936 | 1.19 | 0 | 12,099 | 1.11 | 3 | 3 |
| | National Freedom Party | 8,022 | 0.74 | 0 | 8,984 | 0.82 | 2 | 2 |
| | Independent candidates | 10,019 | 0.93 | 0 | | | | 0 |
| | African People's Convention | 4,223 | 0.39 | 0 | 5,747 | 0.53 | 1 | 1 |
| | African Christian Democratic Party | 4,800 | 0.44 | 0 | 4,385 | 0.40 | 1 | 1 |
| | Pan Africanist Congress of Azania | 4,655 | 0.43 | 0 | 3,838 | 0.35 | 1 | 1 |
| | Freedom Front Plus | 2,956 | 0.27 | 0 | 2,477 | 0.23 | 1 | 1 |
| | United Democratic Movement | 2,665 | 0.25 | 0 | 2,357 | 0.22 | 1 | 1 |
| | Al Jama-ah | 2,027 | 0.19 | 0 | 2,962 | 0.27 | 1 | 1 |
| | Azanian People's Organisation | 2,629 | 0.24 | 0 | 2,173 | 0.20 | 1 | 1 |
| | Operation Khanyisa Movement | 1,666 | 0.15 | 0 | 2,757 | 0.25 | 1 | 1 |
| | Christian Democratic Party | 1,136 | 0.10 | 0 | 999 | 0.09 | 0 | 0 |
| | African Christian Alliance-Afrikaner Christen Alliansie | 1,241 | 0.11 | 0 | 770 | 0.07 | 0 | 0 |
| | Black Consciousness Party | 775 | 0.07 | 0 | 654 | 0.06 | 0 | 0 |
| | South African Progressive Civic Organisation | 665 | 0.06 | 0 | 531 | 0.05 | 0 | 0 |
| | Socialist Party of Azania | 190 | 0.02 | 0 | 311 | 0.03 | 0 | 0 |
| | Christian Front | 157 | 0.01 | 0 | 324 | 0.03 | 0 | 0 |
| | Liberal Democratic Party | 31 | 0.00 | 0 | 236 | 0.02 | 0 | 0 |
| | United Residents Front | 112 | 0.01 | 0 | 130 | 0.01 | 0 | 0 |
| Total | Total | 1,082,663 | 100.00 | 130 | 1,090,124 | 100.00 | 130 | 260 |
| Valid votes | Valid votes | 1,082,663 | 98.56 | | 1,090,124 | 98.94 | | |
| Invalid/blank votes | Invalid/blank votes | 15,803 | 1.44 | | 11,724 | 1.06 | | |
| Total votes | Total votes | 1,098,466 | 100.00 | | 1,101,848 | 100.00 | | |
| Registered voters/turnout | Registered voters/turnout | 2,010,121 | 54.65 | | 2,010,121 | 54.82 | | |

### By-elections (May 2011–August 2016)

The following by-elections were held to fill vacant ward seats in the period between the elections in May 2011 and August 2016.
| Date | Ward | Party of the previous councillor | Party of the newly elected councillor |
| 25 April 2012 | 28 | African National Congress | African National Congress |
| 7 November 2021 | 58 | Democratic Alliance | Democratic Alliance |
| 24 April 2013 | 115 | Democratic Alliance | Democratic Alliance |
| 2 July 2014 | 57 | Democratic Alliance | Democratic Alliance |
| 2 July 2014 | 58 | Democratic Alliance | African National Congress |
| 2 July 2014 | 112 | Democratic Alliance | Democratic Alliance |
| 2 July 2014 | 118 | Democratic Alliance | Democratic Alliance |
| 13 August 2014 | 32 | Democratic Alliance | Democratic Alliance |
| 13 August 2014 | 90 | Democratic Alliance | Democratic Alliance |
| 28 January 2015 | 68 | Democratic Alliance | Democratic Alliance |
| 11 November 2015 | 73 | Democratic Alliance | Democratic Alliance |

## August 2016

In the election of 3 August 2016 the African National Congress (ANC) won the largest share of the seats on the council with 121 but did not achieve a majority. On 22 August 2016, minority parties voted with the DA to elect its mayoral candidate, Herman Mashaba, as the first Democratic Alliance mayor of Johannesburg. Mashaba appointed a mayoral committee consisting of the DA and the Inkatha Freedom Party (IFP). Mashaba resigned on 27 November 2019. The ANC regional chair Geoff Makhubo was elected mayor on 4 December 2019, marking the return of the ANC to the city's executive since its ousting in 2016. Makhubo died from COVID-19 related complications on 9 July 2021 and Eunice Mgcina was appointed acting mayor.
The following table shows the results of the 2016 election.
Total seats :
| Party | Party | Votes | % | Seats | Votes | % | Seats | Total seats |
| | African National Congress | 554,027 | 44.09 | 84 | 563,912 | 44.92 | 37 | 121 |
| | Democratic Alliance | 481,837 | 38.34 | 51 | 483,018 | 38.48 | 53 | 104 |
| | Economic Freedom Fighters | 141,303 | 11.24 | 0 | 137,202 | 10.93 | 30 | 30 |
| | Inkatha Freedom Party | 21,856 | 1.74 | 0 | 21,464 | 1.71 | 5 | 5 |
| | African Independent Congress | 17,575 | 1.40 | 0 | 20,389 | 1.62 | 4 | 4 |
| | Independent candidates | 15,416 | 1.23 | 0 | | | | 0 |
| | Freedom Front Plus | 4,212 | 0.34 | 0 | 3,916 | 0.31 | 1 | 1 |
| | African Christian Democratic Party | 3,534 | 0.28 | 0 | 3,940 | 0.31 | 1 | 1 |
| | Al Jama-ah | 2,794 | 0.22 | 0 | 3,908 | 0.31 | 1 | 1 |
| | United Democratic Movement | 3,478 | 0.28 | 0 | 3,080 | 0.25 | 1 | 1 |
| | Congress of the People | 1,851 | 0.15 | 0 | 2,679 | 0.21 | 1 | 1 |
| | Patriotic Alliance | 1,687 | 0.13 | 0 | 2,148 | 0.17 | 1 | 1 |
| | Pan Africanist Congress of Azania | 1,119 | 0.09 | 0 | 2,080 | 0.17 | 0 | 0 |
| | African People's Convention | 581 | 0.05 | 0 | 2,064 | 0.16 | 0 | 0 |
| | Truly Alliance | 1,511 | 0.12 | 0 | 1,002 | 0.08 | 0 | 0 |
| | Azanian People's Organisation | 1,279 | 0.10 | 0 | 815 | 0.06 | 0 | 0 |
| | Operation Khanyisa Movement | 794 | 0.06 | 0 | 995 | 0.08 | 0 | 0 |
| | Patriotic Association of South Africa | 694 | 0.06 | 0 | 625 | 0.05 | 0 | 0 |
| | Socialist Party of Azania | 281 | 0.02 | 0 | 343 | 0.03 | 0 | 0 |
| | International Revelation Congress | 180 | 0.01 | 0 | 369 | 0.03 | 0 | 0 |
| | Agang South Africa | 97 | 0.01 | 0 | 380 | 0.03 | 0 | 0 |
| | African People's Socialist Party | 267 | 0.02 | 0 | 195 | 0.02 | 0 | 0 |
| | Ubuntu Party | 66 | 0.01 | 0 | 380 | 0.03 | 0 | 0 |
| | Building a Cohesive Society | 120 | 0.01 | 0 | 158 | 0.01 | 0 | 0 |
| | People's Civic Organisation | 62 | 0.00 | 0 | 173 | 0.01 | 0 | 0 |
| | Prem Peoples Agenda | 27 | 0.00 | 0 | 93 | 0.01 | 0 | 0 |
| | Bolsheviks Party of South Africa | 0 | 0.00 | 0 | 57 | 0.00 | 0 | 0 |
| | United Front of Civics | 50 | 0.00 | 0 | | | | 0 |
| Total | Total | 1,256,698 | 100.00 | 135 | 1,255,385 | 100.00 | 135 | 270 |
| Valid votes | Valid votes | 1,256,698 | 98.69 | | 1,255,385 | 98.56 | | |
| Invalid/blank votes | Invalid/blank votes | 16,745 | 1.31 | | 18,376 | 1.44 | | |
| Total votes | Total votes | 1,273,443 | 100.00 | | 1,273,761 | 100.00 | | |
| Registered voters/turnout | Registered voters/turnout | 2,239,966 | 56.85 | | 2,239,966 | 56.87 | | |

### By-elections (August 2016–November 2021)

The following by-elections were held to fill vacant ward seats in the period between the elections in August 2016 and November 2021.
| Date | Ward | Party of the previous councillor | Party of the newly elected councillor |
| 5 April 2017 | 73 | Democratic Alliance | Democratic Alliance |
| 23 August 2017 | 124 | African National Congress | African National Congress |
| 28 February 2018 | 14 | African National Congress | African National Congress |
| 25 April 2018 | 72 | Democratic Alliance | Democratic Alliance |
| 25 April 2018 | 88 | Democratic Alliance | Democratic Alliance |
| 25 April 2018 | 92 | African National Congress | African National Congress |
| 23 May 2018 | 85 | Democratic Alliance | Democratic Alliance |
| 10 April 2019 | 50 | African National Congress | African National Congress |
| 10 April 2019 | 122 | African National Congress | African National Congress |
| 24 July 2019 | 54 | Democratic Alliance | Democratic Alliance |
| 24 July 2019 | 83 | Democratic Alliance | Democratic Alliance |
| 24 July 2019 | 109 | Democratic Alliance | African National Congress |
| 24 July 2019 | 112 | Democratic Alliance | Democratic Alliance |
| 11 November 2020 | 9 | Democratic Alliance | Al Jama-ah |
| 11 November 2020 | 41 | African National Congress | African National Congress |
| 11 November 2020 | 68 | Democratic Alliance | Patriotic Alliance |
| 11 November 2020 | 120 | Democratic Alliance | African National Congress |
| 11 November 2020 | 130 | African National Congress | African National Congress |
| 19 May 2021 | 7 | Democratic Alliance | African National Congress |
| 19 May 2021 | 17 | Democratic Alliance | Patriotic Alliance |
| 19 May 2021 | 18 | Democratic Alliance | Patriotic Alliance |
| 19 May 2021 | 23 | Democratic Alliance | Democratic Alliance |
By the end of the term of the council, the changes in ward seats meant that the party composition was as follows.
| Party | Party | Seats | Seats | Seats |
| Party | Party | Ward | List | Total |
| | African National Congress | 87 | 37 | 124 |
| | Democratic Alliance | 44 | 53 | 97 |
| | Economic Freedom Fighters | 0 | 30 | 30 |
| | Inkatha Freedom Party | 0 | 5 | 5 |
| | African Independent Congress | 0 | 4 | 4 |
| | Patriotic Alliance | 3 | 1 | 4 |
| | Al Jama-ah | 1 | 1 | 2 |
| | Freedom Front Plus | 0 | 1 | 1 |
| | African Christian Democratic Party | 0 | 1 | 1 |
| | United Democratic Movement | 0 | 1 | 1 |
| | Congress of the People | 0 | 1 | 1 |
| Total | Total | 135 | 135 | 270 |

## November 2021

The following table shows the results of the 2021 election.
| Party | Party | Ward | Ward | Ward | List | List | List | Total seats |
| Party | Party | Votes | % | Seats | Votes | % | Seats | Total seats |
| | African National Congress | 313,387 | 33.97 | 87 | 306,902 | 33.22 | 4 | 91 |
| | Democratic Alliance | 247,533 | 26.83 | 43 | 235,120 | 25.45 | 28 | 71 |
| | ActionSA | 128,986 | 13.98 | 0 | 167,359 | 18.12 | 44 | 44 |
| | Economic Freedom Fighters | 102,751 | 11.14 | 0 | 93,412 | 10.11 | 29 | 29 |
| | Patriotic Alliance | 26,830 | 2.91 | 2 | 27,346 | 2.96 | 6 | 8 |
| | Inkatha Freedom Party | 21,743 | 2.36 | 2 | 21,801 | 2.36 | 5 | 7 |
| | Freedom Front Plus | 12,428 | 1.35 | 0 | 12,243 | 1.33 | 4 | 4 |
| | African Christian Democratic Party | 9,999 | 1.08 | 0 | 9,469 | 1.03 | 3 | 3 |
| | Al Jama-ah | 9,961 | 1.08 | 1 | 7,647 | 0.83 | 2 | 3 |
| | Independent candidates | 11,904 | 1.29 | 0 | | | | 0 |
| | African Independent Congress | 4,619 | 0.50 | 0 | 6,341 | 0.69 | 2 | 2 |
| | African Heart Congress | 4,341 | 0.47 | 0 | 3,938 | 0.43 | 1 | 1 |
| | Good | 3,684 | 0.40 | 0 | 3,089 | 0.33 | 1 | 1 |
| | African Transformation Movement | 3,660 | 0.40 | 0 | 2,974 | 0.32 | 1 | 1 |
| | United Democratic Movement | 2,291 | 0.25 | 0 | 2,218 | 0.24 | 1 | 1 |
| | Congress of the People | 2,297 | 0.25 | 0 | 1,779 | 0.19 | 1 | 1 |
| | Pan Africanist Congress of Azania | 1,512 | 0.16 | 0 | 2,467 | 0.27 | 1 | 1 |
| | United Independent Movement | 1,263 | 0.14 | 0 | 1,162 | 0.13 | 1 | 1 |
| | African People's Convention | 1,212 | 0.13 | 0 | 1,065 | 0.12 | 1 | 1 |
| | Defenders of the People | 1,079 | 0.12 | 0 | 1,134 | 0.12 | 0 | 0 |
| | Party of Action | 899 | 0.10 | 0 | 1,178 | 0.13 | 0 | 0 |
| | Black First Land First | 834 | 0.09 | 0 | 1,103 | 0.12 | 0 | 0 |
| | Azanian People's Organisation | 925 | 0.10 | 0 | 742 | 0.08 | 0 | 0 |
| | Abantu Batho Congress | 456 | 0.05 | 0 | 1,162 | 0.13 | 0 | 0 |
| | National Freedom Party | 552 | 0.06 | 0 | 1,017 | 0.11 | 0 | 0 |
| | African Ambassadors of South Africa | 849 | 0.09 | 0 | 703 | 0.08 | 0 | 0 |
| | International Revelation Congress | 267 | 0.03 | 0 | 824 | 0.09 | 0 | 0 |
| | Africa Restoration Alliance | 710 | 0.08 | 0 | 377 | 0.04 | 0 | 0 |
| | Change | 673 | 0.07 | 0 | 351 | 0.04 | 0 | 0 |
| | The Organic Humanity Movement | 605 | 0.07 | 0 | 393 | 0.04 | 0 | 0 |
| | Justice and Employment Party | 465 | 0.05 | 0 | 491 | 0.05 | 0 | 0 |
| | Economic Emancipation Forum | 604 | 0.07 | 0 | 347 | 0.04 | 0 | 0 |
| | Agang South Africa | | | | 763 | 0.08 | 0 | 0 |
| | Activists Movement of South Africa | 234 | 0.03 | 0 | 495 | 0.05 | 0 | 0 |
| | National People's Front | 247 | 0.03 | 0 | 422 | 0.05 | 0 | 0 |
| | Us the People | 144 | 0.02 | 0 | 519 | 0.06 | 0 | 0 |
| | Abahlaly Baahi | 202 | 0.02 | 0 | 419 | 0.05 | 0 | 0 |
| | African Security Congress | 30 | 0.00 | 0 | 582 | 0.06 | 0 | 0 |
| | Bolsheviks Party of South Africa | 325 | 0.04 | 0 | 285 | 0.03 | 0 | 0 |
| | African People's Movement | 141 | 0.02 | 0 | 437 | 0.05 | 0 | 0 |
| | Democratic Artists Party | 17 | 0.00 | 0 | 554 | 0.06 | 0 | 0 |
| | People's Freedom Party | 41 | 0.00 | 0 | 509 | 0.06 | 0 | 0 |
| | South African Royal Kingdoms Organization | 224 | 0.02 | 0 | 288 | 0.03 | 0 | 0 |
| | Forum for Service Delivery | 197 | 0.02 | 0 | 307 | 0.03 | 0 | 0 |
| | Shosholoza Progressive Party | 348 | 0.04 | 0 | 150 | 0.02 | 0 | 0 |
| | Amalgamated Rainbow Movement | 195 | 0.02 | 0 | 252 | 0.03 | 0 | 0 |
| | Disrupt Party | 279 | 0.03 | 0 | 152 | 0.02 | 0 | 0 |
| | Royal Loyal Progress | 281 | 0.03 | 0 | 147 | 0.02 | 0 | 0 |
| | Community Solidarity Association | 40 | 0.00 | 0 | 242 | 0.03 | 0 | 0 |
| | African Freedom Revolution | 7 | 0.00 | 0 | 224 | 0.02 | 0 | 0 |
| | Agency for New Agenda | | | | 221 | 0.02 | 0 | 0 |
| | Civic Movement of South Africa | 59 | 0.01 | 0 | 151 | 0.02 | 0 | 0 |
| | United Cultural Movement | 56 | 0.01 | 0 | 149 | 0.02 | 0 | 0 |
| | International Party | 0 | 0.00 | 0 | 188 | 0.02 | 0 | 0 |
| | Black and White Party | 54 | 0.01 | 0 | 114 | 0.01 | 0 | 0 |
| | Sakhisizwe Convention | 24 | 0.00 | 0 | | | | 0 |
| | African Covenant | 1 | 0.00 | 0 | | | | 0 |
| Total | Total | 922,465 | 100.00 | 135 | 923,724 | 100.00 | 135 | 270 |
| Valid votes | Valid votes | 922,465 | 98.78 | | 923,724 | 98.72 | | |
| Invalid/blank votes | Invalid/blank votes | 11,432 | 1.22 | | 11,975 | 1.28 | | |
| Total votes | Total votes | 933,897 | 100.00 | | 935,699 | 100.00 | | |
| Registered voters/turnout | Registered voters/turnout | 2,220,710 | 42.05 | | 2,220,710 | 42.14 | | |

### By-elections (November 2021–present)

The following by-elections were held to fill vacant ward seats in the period from the election in November 2021.
| Date | Ward | Party of the previous councillor | Party of the newly elected councillor |
| 31 May 2022 | 53 | African National Congress | African National Congress |
| 28 Jun 2023 | 7 | African National Congress | Patriotic Alliance |
| 23 Aug 2023 | 102 | Democratic Alliance | Democratic Alliance |
| 28 Aug 2024 | 87 | Democratic Alliance | Democratic Alliance |
| 28 Aug 2024 | 89 | Democratic Alliance | Democratic Alliance |
| 11 Sep 2024 | 9 | Al Jama-ah | Al Jama-ah |
| 11 Sep 2024 | 21 | African National Congress | African National Congress |