Barcelona goalkeeper Marc-Andre ter Stegen was the hero as he saved two penalties in a shootout to take them past Real Sociedad and into the final of the Supercopa de Espana.
In an evenly fought first half it was Barcelona who made the most of the chance that came their way, Frenkie De Jong superbly reaching backwards to flick Antoine Griezmann's header beyond Alex Remiro.
De Jong would ultimately have a sizeable hand in Real Sociedad drawing level as a cross from the left flank hit his trailing hand. Mikel Oyarzabal made no mistake from the spot, bringing the game into a state of parity it would remain in until the shootout.
De Jong, Griezmann and Willian Jose all missed the target but Ter Stegen made two superb saves from penalty specialists Jon Bautista and Oyarzabal to secure a 3-2 win for Barcelona in the shootout and passage to the final.
Barca will play the winner of Thursday's match between Real Madrid and Athletic Bilbao.