W 2006 i 2010 bez powodzenia kandydował do rady miejskiej. W 2011 zasiadł w radzie Dzielnicy I Stare Miasto. W 2014 po raz pierwszy wybrany na radnego Krakowa (dostał 2268 głosów). W wyborach samorządowych w 2018 uzyskał reelekcję, startując z ramienia komitetu wyborczego Jacka Majchrowskiego i zdobywając 9021 głosów (najwyższy wynik w okręgu).
W wyborach parlamentarnych w 2019 uzyskał mandat posła IX kadencji z ramienia Koalicji Obywatelskiej w okręgu wyborczym nr 13; otrzymał wówczas 15 987 głosów. W wyborach w październiku 2023 z powodzeniem ubiegał się o poselską reelekcję (z wynikiem 29 414 głosów). W listopadzie tego samego roku został ogłoszony kandydatem KO w zapowiedzianych na wiosnę 2024 wyborach na prezydenta Krakowa. Uzyskał również poparcie ze strony Nowej Lewicy. W I turze zajął pierwsze miejsce z wynikiem 37,21% głosów, w II turze pokonał Łukasza Gibałę, uzyskując 51,04% głosów. Urząd prezydenta Krakowa objął 7 maja 2024. W 2025 zagrał jako epizodyczną rolę prezydenta Krakowa w komedii kryminalnej Juliusza Machulskiego Vinci 2.