Zaccagni begon in de jeugdopleiding van AC Bellaria en maakte in 2012/13 zijn debuut voor het eerste elftal in de Lega Pro Seconda Divisione. Dit deed hij op zeventienjarige leeftijd in de uitwedstrijd tegen Forlì FC op 9 december 2012, die met 2-1 werd gewonnen.[2]
In de zomer van 2013 werd hij verhuurd aan Hellas Verona, waar hij in een jeugdteam begon, voordat hij werd overgekocht door de club. Venezia huurde hem voor een jaar in de zomer van 2014. Hij maakte zijn professionele debuut voor Venezia in de Lega Pro op 10 september 2014 in een wedstrijd tegen FC Südtirol.[3] Nadat hij terugkeerde naar Verona, werd hij bij het eerste team gehaald door coach Andrea Mandorlini. Zijn Serie A debuut maakte hij voor Hellas Verona op 23 september 2015, toen hij in de 75e minuut inviel voor Jacopo Sala in de met 1-0 verloren wedstrijd tegen Inter Milan[4] Op 26 januari 2016 werd hij in de winterse transferperiode verhuurd aan AS Cittadella voor een half jaar.[5][6] Hij droeg bij aan het kampioenschap in de Serie C en de promotie naar de Serie B.
Hij keerde weer terug naar Hellas Verona, die net waren gedegradeerd naar de Serie B. Op 15 oktober 2016 scoorde Zaccagni zijn eerste doelpunt voor Verona in de met 4-1 gewonnen wedstrijd tegen Ascoli.[7] Aan het eind van dat seizoen promoveerde de club weer terug naar de Serie A. Het daaropvolgende seizoen was minder succesvol, aangezien Zaccagni in november al een eind aan zijn seizoen moest maken door een knieblessure[8] en omdat de club meteen weer degradeerde. In het derde seizoen na zijn terugkeer kreeg hij een basisplaats op het middenveld en aan het eind van het seizoen speelde hij een belangrijke rol in de play-offs voor promotie naar de Serie A, wat de club ook lukte.[9] In de daaropvolgende twee seizoenen was Zaccagni een vaste kracht en speelde hij bijna alle wedstrijden in de Serie A, waarbij hij ook zijn eerste goals op het hoogste niveau scoorde.[10]Op 3 januari 2021 scoorde hij met een omhaal tegen Spezia.[11] Hij won met dit doelpunt de prijs voor Serie A Doelpunt van het Jaar 2021 op het Gran Galà del Calcio van de Associazione Italiana Calciatori.[12]
Zaccagni begon het seizoen 2021/22 met een nieuw rugnummer, nummer 10[13], en speelde nog twee wedstrijden voor Verona. Op 31 augustus 2021 maakte Zaccagni een transfer van Hellas Verona naar SS Lazio op huurbasis met een verplichte optie tot koop.[14] De transfersom bedroeg 7 miljoen euro, plus 2 miljoen aan bonussen. Maurizio Sarri gaf hem in de eerstvolgende competitiewedstrijd zijn debuut in de met 2-0 verloren uitwedstrijd tegen AC Milan, als invaller voor Felipe Anderson.[15] Een paar dagen later, op 16 september, maakte hij zijn Europese debuut in de Europa League wedstrijd tegen Galatasaray.[16] Op 12 december scoorde hij zijn eerste doelpunt voor Lazio, het openingsdoelpunt in de met 2-1 verloren wedstrijd tegen Sassuolo.[17] Op 17 februari 2022 scoorde hij met een hakje zijn eerste doelpunt in Europees verband, tegen FC Porto in de Europa League.[18]
Op 8 november 2020 werd Zaccagni voor het eerst opgenomen in de nationale selectie door bondscoach Roberto Mancini voor de wedstrijden tegen Estland en Polen.[19] Hij speelde geen van deze wedstrijden. Hij maakte zijn debuut voor het Italiaans elftal op 29 maart 2022 toen hij in de tweede helft inviel voor Nicolò Zaniolo in de met 3-2 gewonnen vriendschappelijke wedstrijd tegen Turkije.[20] Zaccagni werd op 6 juni 2024 door bondscoach Luciano Spalletti opgenomen in de Italiaanse selectie voor het EK 2024 in Duitsland.[21] Italië eindigde als tweede in een groep met Albanië, Spanje en Kroatië, waarna het in de achtste finales werd uitgeschakeld met een 2–0 nederlaag tegen Zwitserland. Door een late gelijkmaker van Zaccagni tegen Kroatië (1–1) eindigde Italië als tweede in een groep met ook Albanië en Spanje, waarna het in de achtste finales werd uitgeschakeld met een 2–0 nederlaag tegen Zwitserland. Zaccagni kwam op het toernooi enkel tegen Albanië niet in actie.