Laureato in economia, appartiene alla sezione AIA di Torre Annunziata, dove è cresciuto e risiede. È arbitro effettivo dall'età di 15 anni, e precisamente dal 20 dicembre 1996. Nei successivi sette anni dirige nelle categorie inferiori, fin quando, al termine della stagione sportiva 2002-2003, approda in serie D, nel cui organico arbitrale militerà per altri quattro anni. Al termine della stagione 2006-2007 approda nell'organico arbitrale dell'allora Serie C, all'epoca Lega Pro.
Sfiora dunque il record assoluto come arbitro più giovane promosso in A e B: infatti il collega Sebastiano Peruzzo di Schio lo anticipò di soli tre mesi. Esordisce in Serie B alla prima giornata, in occasione di AlbinoLeffe-Vicenza 2-2, il 21 agosto 2009. Il 31 gennaio 2010 debutta in Serie A, in occasione della gara Chievo-Bologna. Il 3 luglio 2010, con la scissione della C.A.N. A-B in C.A.N. A e C.A.N. B, viene inserito nell'organico della C.A.N. B; tuttavia nel corso della stagione viene designato più di una volta anche in Serie A. Il 12 luglio 2010 viene designato come quarto ufficiale in una partita del secondo turno preliminare di Europa League 2010-2011.
Nel giugno del 2011 è designato per la finale play off serie B di ritorno tra Novara e Padova, e pochi giorni dopo riceve, presso la sezione AIA di Bologna il Premio Giorgio Bernardi, destinato al miglior arbitro esordiente in Serie A.[1] Il 30 giugno 2011 viene promosso alla C.A.N. A.
Dal 1º gennaio 2014 riceve la nomina al rango di internazionale.[2] Nel prosieguo dell'anno, il 2 marzo dirige per la prima volta in carriera una "classica" del calcio italiano: Milan-Juventus. Il 17 luglio debutta nelle Coppe Europee e precisamente in Europa League dirigendo a Burgas la partita d'andata valida per il secondo turno di qualificazione tra i bulgari del Botev Plovdiv e gli austriaci del St. Polten (2-1). Il 4 settembre fa il suo esordio in una gara tra nazionali maggiori, dirigendo a Pola un'amichevole tra Croazia e Cipro.[3] Infine il 23 novembre dirige per la prima volta il derby di Milano: ne seguiranno altri tre, di cui due consecutivi.
Martedì 22 ottobre 2019 ha debuttato nella fase a gironi della UEFA Champions League, dirigendo a Londra la partita tra Tottenham e Stella Rossa; per l'occasione è stato coadiuvato dagli assistenti Filippo Meli e Ciro Carbone, con Maurizio Mariani quarto ufficiale. Il 1º settembre 2020 viene inserito nell'organico della CAN A-B, nata dall’accorpamento di CAN A e CAN B: dirigerà sia in Serie A che in Serie B. Nella stagione 2020-2021 viene designato in 10 partite del massimo campionato e per 4 in cadetteria.
Dal 1º gennaio 2021 figura nella lista dei Video Match Officials (ufficiali di gara che svolgono la funzione di VAR) della FIFA[5]. Il successivo 21 aprile viene scelto per i XXXII Giochi Olimpici di Tokyo (in programma dal 22 luglio al 7 agosto) in qualità di VAR (Video Assistant Referee). È stato impegnato in sette incontri, cinque maschili e due femminili tra cui, come AVAR, la finale per la medaglia d'oro tra Canada e Svezia.
Il 24 maggio 2022 viene designato per la finale di andata dei play-off di Serie B tra Monza e Pisa. L'anno successivo viene designato per la finale di ritorno dei play-off di Serie B tra Bari e Cagliari. A fine 2023 viene promosso nella categoria arbitrale internazionale Élite. Al termine della stagione 2023-2024 raggiunge 200 presenze in Serie A.[6]
^Copia archiviata, su itasportpress.it. URL consultato il 20 dicembre 2013 (archiviato dall'url originale il 20 dicembre 2013). AIA: Guida e Massa nuovi arbitri internazionali.