Bravo s'est ensuite installé en Espagne en 2006, où il a passé la majeure partie de sa carrière, jouant pour la Real Sociedad, le FC Barcelone, et le Betis Séville, son dernier club.
Au sein du Barça, Bravo a passé huit matchs sans encaisser de but en Liga, soit 755 minutes, un record pour le club barcelonais qui tient toujours.
La rude concurrence avec l'Allemand Marc-André Ter Stegen l'a néanmoins poussé à quitter le club pour rejoindre le Manchester City de Pep Guardiola en 2016, avec lequel il a décroché huit autres titres, dont deux en Premier League.
Lors de la rencontre contre le Pérou, alors qu'il avait 41 ans et 77 jours, Bravo est devenu le joueur le plus âgé à disputer un match de la compétition créée en 1916, dépassant le record détenu depuis 1977 par le gardien bolivien Carlos Truco (39 ans et 322 jours).