| Result | W–L | Date | Tournament | Tier | Surface | Partner | Opponents | Score | 
| Loss | 0–1 | Jun 2010 | Spain F20, Puerto de la Cruz | Futures | Carpet |  Carlos Gómez-Herrera |  Georgi Rumenov Payakov 
 .svg.png) João Sousa | 6–7(2–7), 2–6 | 
| Win | 1–1 | Aug 2010 | Spain F30, Vigo | Futures | Clay |  Abraham González-Jiménez |  Eduardo Nicolás Espin 
  Germán Puentes Alcañiz | 1–6, 6–3, [10–5] | 
| Win | 2–1 | May 2013 | Portugal F5, Castelo Branco | Futures | Hard |  Ricardo Villacorta-Alonso | .svg.png) João Domingues 
 .svg.png) André Gaspar Murta | 6–1, 6–4 | 
| Loss | 2–2 | May 2013 | Portugal F7, Coimbra | Futures | Hard |  Carlos Boluda-Purkiss | .svg.png) Gonçalo Falcão 
 .svg.png) Fred Gil | 6–7(4–7), 6–7(7–9) | 
| Win | 3–2 | Jun 2013 | Portugal F8, Guimarães | Futures | Hard |  Carlos Boluda-Purkiss |  Riccardo Ghedin 
  Daniel Glancy | 6–2, 6–3 | 
| Loss | 3–3 | Jun 2013 | Spain F17, Martos | Futures | Hard |  Ricardo Villacorta-Alonso |  Ramkumar Ramanathan 
  Ashwin Vijayragavan | 3–6, 7–5, [9–11] | 
| Loss | 3–4 | Jun 2013 | Spain F19, Palma del Río | Futures | Hard |  Ricardo Villacorta-Alonso |  Juan-Samuel Arauzo-Martínez 
  Jaime Pulgar-García | 5–7, 6–3, [6–10] | 
| Loss | 3–5 | Jul 2013 | Guimarães, Portugal | Challenger | Hard |  Ricardo Villacorta-Alonso |  James Cluskey 
  Maximilian Neuchrist | 7–6(7–5), 2–6, [8–10] | 
| Loss | 3–6 | Sep 2013 | Spain F31, Getafe | Futures | Hard |  Oriol Roca Batalla |  David Pérez Sanz 
  Jaime Pulgar-García | 7–5, 4–6, [8–10] | 
| Win | 4–6 | Oct 2013 | Portugal F11, Guimarães | Futures | Hard |  Carlos Boluda-Purkiss |  Adam Anjurjo Hermida 
  Miguel Semmler | 6–3, 6–4 | 
| Win | 5–6 | Nov 2013 | Spain F38, Puerto de la Cruz | Futures | Carpet |  José Checa Calvo |  Jaume Pla Malfeito 
  Dennis Uspensky | 7–6(7–5), 6–4 | 
| Win | 6–6 | Nov 2013 | Spain F39, Puerto de la Cruz | Futures | Carpet |  Carlos Boluda-Purkiss |  David Pérez Sanz 
  David Vega Hernández | 6–1, 6–3 | 
| Win | 7–6 | Feb 2014 | Turkey F1, Antalya | Futures | Hard |  Carlos Boluda-Purkiss |  Dekel Bar 
  Marko Tepavac | 6–1, 6–2 | 
| Loss | 7–7 | Feb 2014 | Turkey F2, Antalya | Futures | Hard |  Carlos Boluda-Purkiss |  Cem İlkel 
  Anıl Yüksel | 0–6, 6–7(3–7) | 
| Loss | 7–8 | Mar 2014 | France F5, Balma | Futures | Hard (i) |  Carlos Boluda-Purkiss |  Antoine Benneteau 
  Alexis Musialek | 3–6, 2–6 | 
| Loss | 7–9 | Jun 2014 | Spain F11, Sta. Margarida de Montbui | Futures | Hard |  Óscar Burrieza López |  Sergio Martos Gornés 
  Pol Toledo Bagué | 5–7, 6–2, [6–10] | 
| Win | 8–9 | Oct 2014 | Spain F31, Madrid | Futures | Hard | .svg.png) Yannick Mertens |  Antoine Escoffier 
  Matthieu Roy | 6–2, 6–4 | 
| Win | 9–9 | Apr 2015 | Spain F7, Alcalá de Henares | Futures | Hard |  Iván Arenas-Gualda |  Juan-Samuel Arauzo-Martínez 
  Jaime Pulgar-García | 3–6, 6–4, [10–6] | 
| Loss | 9–10 | Apr 2015 | Spain F8, Madrid | Futures | Hard |  Carlos Boluda-Purkiss |  Juan-Samuel Arauzo-Martínez 
  Iván Arenas-Gualda | 7–6(8–6), 4–6, [4–10] | 
| Loss | 9–11 | May 2015 | Portugal F7, Idanha-a-Nova | Futures | Hard |  Carlos Boluda-Purkiss | .svg.png) Nuno Deus 
 .svg.png) João Domingues | 5–7, 7–5, [7–10] | 
| Loss | 9–12 | Oct 2015 | Tunisia F26, El Kantaoui | Futures | Hard |  Lukas Mugevičius |  Benjamin Bonzi 
  Fabien Reboul | 6–4, 4–6, [8–10] | 
| Win | 10–12 | Oct 2015 | Spain F34, Melilla | Futures | Hard |  Iván Arenas-Gualda |  Jorge Hernando Ruano 
  Ricardo Villacorta-Alonso | w/o | 
| Win | 11–12 | Nov 2015 | Tunisia F29, El Kantaoui | Futures | Hard |  Benjamin Bonzi |  Anis Ghorbel 
  Francesco Vilardo | 6–0, 6–3 | 
| Win | 12–12 | Feb 2016 | Portugal F1, Vale do Lobo | Futures | Hard |  Iván Arenas-Gualda |  Carlos Boluda-Purkiss 
  David Vega Hernández | 4–6, 7–6(7–4), [10–6] | 
| Win | 13–12 | Apr 2016 | Spain F10, Majadahonda | Futures | Clay |  Georgi Rumenov Payakov |  Andrés Artuñedo Martínavarro 
  Ricardo Ojeda Lara | 6–0, 6–1 | 
| Loss | 13–13 | Jun 2016 | Tunisia F21, Hammamet | Futures | Clay |  Karim-Mohamed Maamoun |  Cristian Rodríguez 
  Walter Trusendi | 3–6, 6–2, [7–10] | 
| Loss | 13–14 | Nov 2016 | Spain F36, Cuevas del Almanzora | Futures | Hard |  David Vega Hernández |  Javier Barranco Cosano 
  Raúl Brancaccio | 3–6, 0–6 | 
| Loss | 13–15 | Nov 2016 | Spain F37, Cuevas del Almanzora | Futures | Hard |  David Vega Hernández |  Jaume Pla Malfeito 
  Mario Vilella Martínez | 6–7(4–7), 6–2, [5–10] | 
| Loss | 13–16 | Dec 2016 | Spain F39, Cuevas del Almanzora | Futures | Hard |  David Vega Hernández |  Peter Bothwell 
  Akira Santillan | 2–6, 7–5, [2–10] | 
| Win | 14–16 | Mar 2017 | Portugal F3, Loulé | Futures | Hard |  David Vega Hernández |  Carlos Gómez-Herrera 
  Nikki Roenn | 6–4, 7–5 | 
| Win | 15–16 | Apr 2017 | Spain F10, Madrid | Futures | Hard |  Carlos Boluda-Purkiss |  Carlos Gómez-Herrera 
  Juan Lizariturry | 7–6(8–6), 6–3 | 
| Loss | 15–17 | Apr 2017 | Portugal F6, Porto | Futures | Clay |  David Vega Hernández | .svg.png) João Monteiro 
  Bruno Sant'Anna | 6–4, 3–6, [8–10] | 
| Win | 16–17 | May 2017 | Bulgaria F1, Sozopol | Futures | Hard |  Michal Konečný |  Victor-Mugurel Anagnastopol 
  Victor Vlad Cornea | 4–6, 7–5, [11–9] | 
| Win | 17–17 | Jul 2017 | Spain F19, Bakio | Futures | Hard |  David Vega Hernández |  Carlos Gómez-Herrera 
  Juan Lizariturry | 6–3, 6–2 | 
| Win | 18–17 | Jul 2017 | Portugal F11, Póvoa de Varzim | Futures | Hard | .svg.png) Alex de Minaur | .svg.png) Edward Bourchier 
 .svg.png) Daniel Nolan | 6–2, 6–1 | 
| Loss | 18–18 | Aug 2017 | Segovia, Spain | Challenger | Hard |  David Vega Hernández |  Adrián Menéndez Maceiras 
  Sergiy Stakhovsky | 6–4, 3–6, [7–10] | 
| Win | 19–18 | Nov 2017 | Egypt F34, Sharm El Sheikh | Futures | Hard |  Vladyslav Manafov |  Tuna Altuna 
  Cem İlkel | 6–3, 6–4 | 
| Win | 20–18 | Mar 2018 | Portugal F3, Loulé | Futures | Hard |  David Vega Hernández |  Maximilian Neuchrist 
  David Pichler | 4–6, 6–4, [10–3] | 
| Win | 21–18 | Sep 2019 | M25 Tavira, Portugal | World Tennis Tour | Hard |  Alberto Barroso Campos | .svg.png) Francisco Cabral 
  Luke Johnson | 6–4, 6–4 | 
| Loss | 21–19 | Jul 2021 | M25 Bakio, Spain | World Tennis Tour | Hard |  Adrián Menéndez Maceiras |  Iñaki Montes de la Torre 
  Antonio Prat | 2–6, 6–4, [6−10] | 
| Loss | 21–20 | Jul 2021 | Iași, Romania | Challenger | Clay |  Hernán Casanova |  Orlando Luz 
  Felipe Meligeni Rodrigues Alves | 3–6, 4–6 | 
| Win | 22–20 | Sep 2021 | M25 Madrid, Spain | World Tennis Tour | Clay |  Carlos Sánchez Jover |  Juan Ignacio Galarza 
  Mariano Kestelboim | 6–4, 6–2 | 
| Loss | 22–21 | Oct 2021 | M25 Quinta do Lago, Portugal | World Tennis Tour | Hard |  Alberto Barroso Campos |  Evan Hoyt 
  Skander Mansouri | 6–4, 3–6, [5−10] |