Inizia a giocare a nell'ITF Junior Circuit nel 2016, partecipando a due tornei Grand Slam e raggiungendo il suo best ranking al 32º posto in classifica.
Fa le sue prime apparizioni tra i professionisti nel 2015 nel circuito ITF, vince i suoi primi tre titoli in singolare in questa categoria nel 2017 e a dicembre entra nella top 500 della classifica ATP.
Negli anni successivi migliora il suo ranking fino a raggiungere posizioni che gli permettono di partecipare stabilmente ai tornei Challenger nel 2019, nell'agosto di quell'anno disputa la sua prima finale di categoria all'Open Castilla y León di Segovia, persa contro Nicola Kuhn, e a novembre la sua prima finale in doppio al Tali Open, che perde in coppia con Tomislav Draganja.
Nel 2020 conquista il suo primo titolo Challenger in coppia con Roman Safiullin al torneo di doppio di Cherbourg. A ottobre partecipa per la prima volta a un torneo ATP a San Pietroburgo, dove supera le qualificazioni battendo Rodionov e Gómez e viene sconfitto da Humbert al primo turno.
Nel 2021 perde la finale Challenger di doppio a Oeiras in coppia con Tseng. A fine anno vince il suo primo torneo singolare della categoria Challenger a Forlì[2] battendo in finale Andrea Arnaboldi con il punteggio di 6–4, 6–3. Nel corso della stagione supera altre due volte le qualificazioni di tornei ATP e in entrambe le occasioni viene eliminato al primo turno del main draw.
Nel gennaio 2022 vince al Forlì III il suo secondo titolo Challenger battendo in finale in tre set Quentin Halys,[3] successo con cui fa il suo ingresso nella top 200 del ranking. Ad aprile vince il primo incontro nel circuito maggiore a Marrakech, dove supera le qualificazioni e al primo turno elimina la testa di serie nº 9 Tallon Griekspoor prima di essere sconfitto da Richard Gasquet. Il mese successivo partecipa per la prima volta alle qualificazioni in un torneo del Grande Slam al Roland Garros, e accede al tabellone principale con i successi su Hugo Grenier, Jurij Rodionov e Pedro Cachín; al primo turno viene sconfitto al quarto set dal nº 29 del mondo Botic van de Zandschulp. Ad agosto vince il Challenger di San Marino battendo in finale Matteo Arnaldi. Supera le qualificazioni anche agli US Open ed esce al primo turno. A ottobre supera le qualificazioni come lucky loser all'ATP 500 Astana Open, al primo turno elimina Alejandro Davidovich Fokina, esce al secondo turno e fa il suo ingresso nella top 100, quello stesso mese si spinge fino al 96º posto ed esce dalla top 100 a dicembre.
Supera le qualificazioni agli Australian Open 2023 e perde al primo turno. Raggiunge invece il secondo turno ai Dubai Tennis Championships e non va oltre il primo turno al Miami Open. Disputa la sua prima semifinale ATP al Grand Prix Hassan II e viene eliminato da Alexandre Müller dopo aver sconfitto il top 50 Benjamin Bonzi. Si riavvicina alla top 100 con il secondo turno raggiunto al Barcelona Open, alcuni discreti risultati nei Challenger e spingendosi fino ai quarti all'ATP dei Mallorca Championships. Vi fa rientro raggiungendo la finale al Challenger 125 del Braunschweig Open e porta il miglior ranking all'85º posto. Resta in top 100 per sette settimane e vi rientra a ottobre all'81º posto dopo aver disputato la sua prima finale ATP allo Stockholm Open, persa contro Gaël Monfils per 6-4, 6(6)-7, 3-6. Il mese successivo cede in semifinale contro Adrian Mannarino al Sofia Open e sale al 66º posto.
Con la classifica favorevole, nel 2024 gioca esclusivamente nel circuito maggiore, inizia la stagione battendo il top 30 Lorenzo Musetti all'Hong Kong Open ed esce nei quarti. Prosegue l'ascesa vincendo il suo primo match in uno Slam agli Australian Open con il successo su Arthur Rinderknech e perde al secondo turno. Sconfitto in semifinale all'ATP 250 Grand Prix Hassan II da Roberto Carballes Baena, raggiunge per la prima volta il terzo turno in un Masters 1000 al Madrid Open. Perde nei quarti all'Open Parc Auvergne-Rhône-Alpes Lyon contro Aleksandr Bublik. Si spinge fino al terzo turno all'Open di Francia, risultato con cui porta il miglior ranking al 50º posto. Nella seconda parte della stagione raccoglie pochi successi, tra le sconfitte al primo turno vi sono quelle al torneo di Wimbledon, al suo esordio olimpico ai Giochi di Parigi e agli US Open, e chiude il 2024 all'86º posto mondiale.
La crisi di risultati continua nel 2025, già a gennaio esce dalla top 100, a giugno dalla top 200 e a settembre si trova alla 485ª posizione. Si riscatta nella prima parte del 2026, tra febbraio e aprile vince tre titoli Challenger al Koblenz Open, al Challenger Cherbourg-La Manche e al Wuning Challenger e risale molte posizioni nel ranking.
Aggiornato al 13 aprile 2026
| Legenda |
| Grande Slam (0) |
| ATP Finals (0) |
| ATP Masters 1000 (0) |
| ATP Tour 500 (0) |
| ATP Tour 250 (1) |
| Legenda tornei minori |
| Challenger (6) |
| ITF (3) |
| N. |
Data |
Torneo |
Superficie |
Avversario in finale |
Punteggio |
| 1. |
8 luglio 2017 |
Russia F3, Kazan' |
Cemento |
Jan Sabanin |
6-2, 6-3, |
| 2. |
29 luglio 2017 |
Russia F4, Kazan' |
Cemento |
Denis Yevseyev |
7-6(5), 6-2 |
| 3. |
26 novembre 2017 |
Czech Republic F11, Valašské Meziříčí |
Cemento (i) |
Dan Added |
6-0, 7-5 |
| 4. |
12 dicembre 2021 |
Città di Forlì III, Forlì |
Cemento (i) |
Andrea Arnaboldi |
6-4, 6-2 |
| 5. |
23 gennaio 2022 |
Città di Forlì III, Forlì |
Cemento (i) |
Quentin Halys |
7-5, 6(5)-7, 6-3 |
| 6. |
14 agosto 2022 |
San Marino Open, San Marino |
Terra rossa |
Matteo Arnaldi |
7-6(5), 6-4 |
| 7. |
8 febbraio 2026 |
Koblenz Open, Coblenza |
Cemento (i) |
Tom Gentzsch |
6-4, 1-6, 7-6(8) |
| 8. |
15 marzo 2026 |
Challenger Cherbourg-La Manche, Cherbourg |
Cemento (i) |
Filippo Romano |
6-2, 7-5 |
| 9. |
12 aprile 2026 |
Wuning Challenger, Jiujiang |
Cemento |
Harry Wendelken |
4-6, 6-3, 6-4 |
| Legenda tornei minori |
| Challenger (2) |
| ITF (2) |
| Legenda tornei minori |
| Challenger (1) |
| ITF (0) |
| Legenda tornei minori |
| Challenger (2) |
| ITF (0) |
Legenda
| V |
F |
SF |
QF |
#T |
RR |
Q# |
A |
Z# |
PO |
O |
F-A |
SF-B |
ND |
(V) Torneo vinto; raggiunto (F) finale, (SF) semifinale, (QF) quarti di finale, (#T) turni 4, 3, 2, 1; (RR) round-robin; (Q#) Turno di qualificazione; (A) assente dal torneo; (Z#) Zona gruppo Coppa Davis/Fed Cup (con indicazione numero); (PO) play-off Coppa Davis o Fed Cup; vinto un (O) oro, (F-A) argento o (SF-B) bronzo ai Giochi Olimpici; (ND) torneo non disputato.
Statistiche aggiornate al 27 febbraio 2026.