Born in Florence, Piccini joined Fiorentina's youth setup in 2002, aged ten, after starting it out at Sporting Arno. On 5 December 2010, he made his first team – and Serie A – debut, coming on as a substitute for Manuel Pasqual in a 1–0 home win against Cagliari.[2]
On 30 August 2011, Piccini was loaned to third division club Carrarese, in a season-long deal.[3] He scored his first professional goal on 4 April of the following year, netting the first in a 3–1 home loss against Virtus Lanciano.[4]
The following season, Piccini joined Spezia of Serie B on loan until the end of the season.[5] After being an undisputed starter, he was loaned to the top level's Livorno, with a buyout clause.[6]
Piccini signed a permanent four-year deal with the Verdiblancos on 9 July 2015, with Fiorentina holding a buyback option.[9] He made his La Liga debut on 23 August, starting in a 1–1 home draw against Villarreal CF.[10]
On 18 May 2017, Piccini signed a five-year contract with Sporting CP.[14] He made his debut for the club on 6 August, as the Primeira Liga season began with a 2–0 away win against C.D. Aves.[15]
Piccini played four games as Sporting won the Taça da Liga. This included the final on 27 January 2018, in which he played all 120 minutes of a 1–1 draw before defeating Vitória F.C. on penalties.[16] On 31 March, he was sent off in a 1–0 loss away to S.C. Braga.[17]
Valencia
On 23 July 2018, Piccini returned to La Liga, signing for Valencia for a fee of around €10 million.[18] In his debut season, he made 37 appearances, mostly as a starter, and scored a last-minute winner in a 2–1 home win over SD Huesca on 23 December.[19] Seven of these games were in the victorious Copa del Rey run, including 18 minutes as a substitute for Kévin Gameiro in the 2–1 final win over FC Barcelona on 25 May 2019; the result was Valencia's first honour since 2008.[20]
In August 2019, just two games into the new season, Piccini suffered a fractured kneecap while in training, an injury that would leave him out of the squad until the end of year.[21] He remained sidelined for the whole season, undergoing another operation in May 2020.[22]
Loan to Atalanta
On 9 September 2020, Piccini joined Italian Serie A club Atalanta on loan with an option to buy.[23] The recovery from his kneecap injury delayed his debut until 21 November, when he played in a 0–0 away draw to Spezia. This turned out to be his only appearance for the Bergamo side, as Valencia reached an agreement for his early return in January 2021.[24]
Red Star Belgrade
On 15 January 2022, Piccini was released from Valencia and signed a two-and-a-half-year contract with Serbian club Crvena Zvezda.[25]
1. FC Magdeburg
In September 2022 Piccini joined German club 1. FC Magdeburg of the 2. Bundesliga as a free agent.[26] On 29 January 2024, Piccini's contract with Magdeburg was terminated by mutual consent.[27]
International career
Piccini was given his first senior call-up for Italy in October 2018 by manager Roberto Mancini, following injuries to several players in the team.[28] He made his senior debut for the national team on 10 October, coming on as an 84th-minute substitute for Alessandro Florenzi in a 1–1 friendly draw against Ukraine in Genoa.[29]