Sur les cinq membres du Conseil administratif de la ville de Genève, seul le socialiste Sami Kanaan se représentait pour un mandat supplémentaire lors de l'élection communale. Outre sa candidature, 7 intéressées et 8 intéressés étaient en lice, répartis sur dix listes – «Verts-socialistes», PLR Ville de Genève, Ensemble à gauche, PDC, Parti du travail, UDC Genève, MCG, Vert’libéraux, PPGE et «Egalité et Equité». Pour la succession de Sandrine Salerno, le PS a présenté Christina Kitsos. Les Verts n'entendaient pas seulement défendre le siège d'Esther Alder, mais aussi renforcer leur présence dans l'exécutif. Espérant profiter de la poussée écologiste lors des élections fédérales, ils ont nommé Frédérique Perler et Alfonso Gomez. Les deux partis de gauche ont conjointement milité notamment pour «une transition écologique forte en ville et le maintien de prestations de qualité pour la population». Les Vert'libéraux misaient également sur leur succès au niveau national pour faire leur entrée au Conseil administratif, avec Susanne Amsler. Tout à gauche, Maria Perez (pdt) et Pierre Bayenet (EàG) convoitaient la place de Rémy Pagani (EàG). En conflit, les anciens alliés d'Ensemble à gauche ont fait listes distinctes. Au centre, le PDC a lancé Marie Barbey-Chappuis et Alia Chaker Mangeat. L’ancien conseiller d’Etat PDC Luc Barthassat concourait pour le MCG, aux côté de Daniel Sormanni. Le fauteuil de Guillaume Barazzone (pdc) suscitait aussi l'intérêt de Simon Brandt (plr). Contrairement à l’élection de 2015, le PDC et le PLR n’ont pas fait liste commune. Souhaité par le PLR, le PDC a refusé, faute de programme commun, de s’allier au MCG et à l’UDC pour contrer la gauche. L’UDC a proposé un double ticket porté par Christo Ivanov et Pascal Altenbach. Le fondateur du Parti populaire genevois (PPGE), Pascal Spuhler briguait aussi un fauteuil; tout comme Sanja Duvnjak (sans parti), dont le nom paraissait sur la liste «Egalité et Equité».
Durant la campagne, différents sujets ont été abordés comme par exemple l'armement de la police municipale et les mesures pour lutter contre le réchauffement climatique. Deux candidats ont particulièrement fait parler d’eux dans la presse: Simon Brandt avec sa mise en prévention pour double violation du secret de fonction et Pierre Bayenet concernant son lieu de domicile et ses contrats de bail en ville de Genève.

Lors du premier tour, avec une participation de 32.4%, personne n'a atteint la majorité absolue fixée à 19'736 voix. Est arrivé en tête le sortant Sami Kanaan (18'238 suffrages), suivi par ses colistières et colistiers Christina Kitsos (16'798), Frédérique Perler (15'140) et Alfonso Gomez (14'304). Simon Brandt (10'932) s'est placé en cinquième position. Viennent ensuite Marie Barbey-Chappuis (10'407), Susanne Amsler (9'746), Maria Perez (9'492), Pierre Bayenet (9'328), Alia Chaker Mangeat (7'546), Luc Barthassat (7'317), Daniel Sormanni (6'915), Christo Ivanov (6’565), Pascal Altenbach (5'927), Sanja Duvnjak (2'387) et enfin Pascal Spuhler (2'150).

Le second tour a été maintenu, malgré la crise sanitaire due au Covid-19 et les restrictions de rassemblement. La campagne s'est alors déroulée principalement sur internet et via les médias traditionnels. Les Vert’libéraux ont décidé d’abandonner la course. Alia Chaker Mangeat, Pascal Altenbach, Pascal Spuhler n’étaient également plus en lice. Avec une participation de 27.9%, l’ensemble des membres de la liste Verts-socialistes ont été élus. Sami Kanaan a récolté 18'054 suffrages, Christina Kitsos 17'438, Frédérique Perler 15'872 et Alfonso Gomez 14'694. Le fauteuil de Rémy Pagani passe donc en mains vertes et Marie Barbey-Chappuis assure le siège PDC. S'agissant des autres, Simon Brandt a obtenu un score de 11'725 voix, Maria Perez 10'397, Pierre Bayenet 8'802, Luc Barthassat 7'723, Christo Ivanov 7'335, Daniel Sormanni 7'121 et Sanja Duvnjak 2'827.

Le Conseil municipal a également été renouvelé lors du premier tour. 279 personnes briguaient l'un des 80 sièges. Dix listes ont été déposées: Socialistes, PLR Ville de Genève, Ensemble à gauche, PDC, Les Vert.e.s, UDC, Parti du Travail, Vert’libéraux-alliés, MCG et PPGE. Les Verts, avec un gain de 10 sièges par rapport à 2015, deviennent la seconde force au législatif communal (18 sièges; 19.8% des suffrages), derrière les socialistes (19; 21.3%). L'UDC figure aussi parmi les gagnants, avec un septième représentant (8.7%). Le MCG perd 4 sièges (7 ;7.7%); le PDC 3 sièges (8 ; 8.7%) comme Ensemble à gauche (7; 7.8%); et le PLR son quinzième fauteuil (16%).