È uno specialista della terra battuta, superficie su cui ha disputato quasi tutte le finali giocate da professionista. Ha raggiunto una finale del circuito maggiore in singolare all'Andalucia Open 2021 e una in doppio al Chile Open 2021. Ha vinto diversi titoli nei circuiti minori e i suoi migliori ranking ATP sono stati il 52º in singolare nel maggio 2019 e il 149º in doppio nel febbraio 2020. Ha esordito nella squadra spagnola di Coppa Davis nell'aprile 2017.
Gioca il suo primo torneo nella categoria ragazzi degli Open di Francia nel 2014 e perde in finale contro Andrej Rublëv.
Nell'aprile 2015, al suo esordio nel circuito maggiore, supera le qualificazioni al torneo di Barcellona e viene eliminato al primo turno. In luglio supera il primo turno all'ATP 500 di Amburgo 2015 sfruttando il ritiro durante il primo set di Guillermo García López, e al secondo turno viene battuto da Simone Bolelli.
2018
Alla sua prima esperienza in una prova del Grande Slam, supera le qualificazioni agli Australian Open 2018 e viene eliminato al primo turno da Gaël Monfils. Torna a mettersi in luce a primavera raggiungendo una semifinale Challenger, il secondo turno all'ATP di Barcellona e soprattutto vincendo il suo primo incontro in uno Slam agli Open di Francia, dove supera le qualificazioni e al primo turno ha la meglio in 5 set sul nº 41 ATP David Ferrer, prima di essere sconfitto al secondo da Novak Đoković. Subito dopo vince due titoli Challenger consecutivi al Czech Open di Prostějov e al Città di Caltanissetta, battendo nelle rispettive finali Laslo Đere e Matteo Donati. Con questi risultati entra per la prima volta nella top 100.
Raggiunge la prima semifinale in carriera in un torneo ATP a Kitzbühel, elimina tra gli altri il nº 39 del mondo Robin Haase e cede in due set a Martin Kližan. Si spinge quindi fino al terzo turno a Winston-Salem e al secondo agli US Open e a novembre sale al 75º posto mondiale. Si qualifica per le Next Generation ATP Finals di Milano come testa di serie nº 6, nel round robin vince solo il match contro Frances Tiafoe e perde quelli contro il futuro campione Stefanos Tsitsipas e Hubert Hurkacz, raggiunge comunque le semifinali grazie al miglior quoziente set e viene eliminato in cinque set da Alex de Minaur. Perde al quinto set anche la finale per il terzo posto contro Andrej Rublëv.
2019
Nei primi due mesi del 2019 raggiunge i quarti di finale nei tornei ATP 250 di Pune, Córdoba e Buenos Aires – dove si prende la rivincita sul nº 15 del mondo Fognini che il mese precedente l'aveva eliminato al primo turno agli Australian Open – nonché all'ATP 500 di Rio de Janeiro. Continua l'ascesa in classifica raggiungendo il secondo turno ai Masters 1000 di Miami e Monte Carlo. Al secondo turno a Marrakech sconfigge per la prima volta in carriera un top 10, il nº 3 del mondo Alexander Zverev, ed esce nuovamente di scena nei quarti di finale. A Barcellona viene eliminato al terzo turno dopo aver battuto Francis Tiafoe e, nonostante le sconfitte al primo turno a Madrid e a Roma, il 20 maggio porta il best ranking alla 52ª posizione mondiale. Subisce altre 10 sconfitte nei 12 incontri ATP successivi, tra cui quelle al primo turno nei rimanenti tre tornei del Grande Slam, ed esce per breve tempo dalla top 100. Si riprende verso fine stagione con buoni risultati nei Challenger, sui quali spicca il successo nella finale di Montevideo su Federico Delbonis all'ultimo impegno del 2019.
2020
Eliminato al primo turno ad Adelaide, accede per la prima volta in carriera al secondo turno degli Australian Open battendo Hugo Gaston e viene eliminato da Alexei Popyrin. Nella stagione sudamericana su terra raggiunge il secondo turno a Cordoba e al Rio Open e a febbraio esce nuovamente dalla top 100. Dopo il lungo stop dovuto alla pandemia di COVID-19, non supera le qualificazioni al Cincinnati Open ed è costretto al ritiro al primo turno agli US Open. Dopo l'eliminazione al primo turno anche al Roland Garros, a fine stagione raggiunge due finali Challenger, a ottobre supera Pedro Sousa in quella di Lisbona e il mese successivo perde quella di Marbella contro Pedro Martínez.