Inizia la sua carriera nei campionati nazionali italiani nel 2010, vincendo nel 2011 il suo primo titolo nell'Europeo minimoto Junior A. In seguito, nel 2013 vince l'Europeo MiniGP 50cc e passa al CIV PreMoto3 125 2 tempi, restandoci due anni finendo secondo nel 2014 e quarto nel 2015.
L'anno seguente passa alla categoria Moto3. Si classifica secondo nel 2016, vince il titolo nel 2017,[2] arriva nuovamente secondo nel 2018 e vince per la seconda volta il titolo nel 2019.[3]
Nel 2022 vince il titolo nella classe Supersport Next Generation in sella alla Ducati Pangiale V2 del Barni Spark Racing Team.[4] Lo stesso anno debutta nel mondiale Supersport nella tappa di Misano a bordo di una Ducati Panigale V2 della squadra D34G Racing in sostituzione dell'infortunato Filippo Fuligni. Termina 15º in gara 1, conquistando cosi i suoi primi punti mondiali, e 21º in gara 2. Questo gli permette di concludere il campionato al 36º posto con un punto.
Per il 2023 viene ingaggiato come pilota titolare nel mondiale Supersport dal team VFT Racing Yamaha a bordo di una Yamaha YZF R6 e in MotoE dal team Pons Racing 40 con Mattia Casadei come compagno di squadra. In Supersport ottiene il suo primo podio mondiale dopo aver terminato la gara 1 di Phillip Island al 2º posto,[5] con settantaquattro punti chiude al quattordicesimo posto tra i piloti.[6] Con le motociclette elettriche ottiene quattro piazzamenti a podio, tra i quali la prima vittoria, conquistata nella seconda prova a Misano evento conclusivo del campionato, chiuso da Spinelli al sesto posto.[7]
Nella stagione 2024 disputa il Mondiale MotoE con il team Tech3 E-Racing con Alessandro Zaccone come compagno di squadra.[8] Ottiene tre vittorie ad inizio stagione per poi chiudere il campionato al settimo posto.[9] Sempre nel 2024, viene chiamato dal team Barni Racing a sostituire Danilo Petrucci nel Gran Premio di Assen del Mondiale Superbike in sella alla Ducati Panigale V4R. Ottiene una vittoria in Gara 1,[10] un diciottesimo posto nella Superpole Race e un sedicesimo posto in Gara 2. I punti conquistati gli consentono di classificarsi diciannovesimo in campionato e quinto nel Trofeo Indipendenti.[11] Contestualmente alle competizioni mondiali, prende parte ad alcune prove del campionato Europeo di Moto2 dove, in sella ad una Kalex del team AGR, conquista una ventina di punti classificandosi diciottesimo.[12]