1 Compétitions officielles nationales et internationales senior, incluant le parcours amateur et en équipe réserve. 2 Matchs officiels. Dernière mise à jour :
Il est avec quatre de ses coéquipiers amené à s'entraîner avec l'équipe première du Toulouse FC lors de l'intersaison 2016[2]. Le 6 octobre 2016, il signe son premier contrat professionnel en faveur de son club formateur pour une durée de trois ans[3].
Lors de la pré-saison 2016-2017, il est auteur d'un but marqué d'une frappe de l'extérieur de la surface[4]. Le 20 septembre 2016, il dispute son premier match de Ligue 1 face à Lille au stade Pierre-Mauroy, remplaçant Issiaga Sylla à la 61e minute (6e journée, victoire 1-2). Trois jours plus tard, il est titularisé à domicile face au Paris SG au poste d'ailier droit pour épauler Steeve Yago dans les tâches défensives et apporter sa vitesse en contre-attaque. Il y est auteur du centre amenant la faute de Serge Aurier sur Ola Toivonen dans la surface de réparation[5]. Transformé par Yann Bodiger, le penalty permet aux toulousains d'ouvrir le score pour une victoire finale 2-0.
Ne jouant que quelques matchs par saison, il est prêté à l'AC Ajaccio en Ligue 2 pour la saison 2018-2019 pour avoir davantage de temps de jeu[6].
Le Racing Club de Lens annonce le 11 juin 2019, jour de l'ouverture du mercato estival, la venue de quatre renforts en vue de la saison 2019-2020 avec les signatures de Yannick Cahuzac, Manuel Perez, Florian Sotoca et Clément Michelin. Y signant un contrat de trois ans, il y retrouve Mickaël Debève qu'il a côtoyé lors de sa formation à Toulouse et acteur de sa venue dans le Nord[7].
Le , lors de la neuvième journée de Ligue 2 contre le Paris FC, il marque son premier but officiel avec les professionnels[8].
Le , il est transféré pour un million d'euros à l'AEK Athènes[9]. Titulaire en début de saison, il débute 11 des 15 premières rencontres de championnat dans le onze de départ. Il perd sa place sur la seconde partie de saison au profit du grec Lázaros Róta. Sur la saison régulière, il participe finalement à 19 rencontres dont 13 titularisations et 2 passes décisives délivrées.
Contraint de devoir réduire sa masse salariale avant de pouvoir enregistrer ses recrues, son prêt aux Girondins de Bordeaux n'est officialisé que le 1er septembre 2022, en même temps que les arrivées de Yoann Barbet, Vital NSimba et Aliou Badji[10]. Il voit Malcom Bokele lui être préféré au poste d'arrière droit, ne débutant que 8 rencontres pour 23 disputées en Ligue 2. Les Girondins annoncent le 3 juillet 2023 que l'option d'achat adossée à son prêt est levée et qu'il s'engage pour les trois prochaines années, jusqu'en 2026[11].