Barcelona reached the Supercopa de Espana final after beating Real Sociedad 3-2 on penalties following a 1-1 draw in Cordoba.
With Lionel Messi sitting out the tie with a slight injury, it was Frenkie de Jong who continued his strong recent form with the opening goal in the first half.
De Jong conceded the penalty that allowed Mikel Oyarzabal to equalise, though, and it was Sociedad who threatened most as the game entered extra time, with Marc-Andre ter Stegen in strong form and substitute Adnan Januzaj hitting the post with a free-kick.
Ter Stegen proved pivotal in the shoot-out, making two saves, before Riqui Puig buried his spot-kick to send Barca through.
The Germany international made a fine one-on-one save to deny Alexander Isak as La Real looked by far the more threatening in the early exchanges.
Barca seemed to settle after 25 minutes and twice came close through Martin Braithwaite, while Ousmane Dembele was menacing Nacho Monreal down the right.
The Catalans' growing pressure told six minutes before half-time, Antoine Griezmann clipping a cross towards De Jong, who reacted well to steer a header past Alex Remiro.
But De Jong handed Sociedad an equaliser 51 minutes in, his handball allowing Oyarzabal to send Ter Stegen the wrong way from the spot.
15 - @RealSociedadEN's Mikel Oyarzabal has scored more penalties without missing one than any other LaLiga player since the start of 2015/16 in all competitions (15, 12 in @LaLigaEN, 2 in Copa del Rey and 1 in #SupercopaDeEspana). Specialist. pic.twitter.com/aVQGYisd2n— OptaJose (@OptaJose) January 13, 2021
An end-to-end contest ensued, La Real threatening on the break through Isak and both Pedri and Griezmann coming close with powerful efforts.
In extra time, Ter Stegen made a spectacular one-handed save to keep out Joseba Zaldua's rocket before Dembele sent a shot straight at Remiro after Griezmann had stolen back possession.
Griezmann saw a volley smothered and Barca were very nearly hit on the break, Ter Stegen doing enough to deny Oyarzabal after the forward had failed to connect properly with Januzaj's cross.
Januzaj himself had a shot just prodded past the left-hand post after a strong run and then came closest of all to a winner, clattering the post with a wicked free-kick as Ter Stegen looked to get a fingertip to the ball.
De Jong hit the post with Barca's first penalty, but Ter Stegen saved from Jon Bautista and Oyarzabal and Willian Jose hit the post after Dembele had scored.
Griezmann skied his effort horribly after Miralem Pjanic and Mikel Merino each scored, but although Januzaj also converted, Puig showed nerves of steel to send the Catalans into the final.
What does it mean? Renewed spirit carries Koeman towards first trophy
Barca's 2-1 LaLiga win over Sociedad in December was something of a turning point under Koeman, a battling win in which, according to Jordi Alba, they played some of their best football in 2020.
Similar character was on show here in an engrossing and finely balanced contest that was ultimately settled by Puig, a player whose very future under Koeman has often looked bleak.
The Catalans progress to the final in Seville on Sunday, where they will meet Real Madrid or Athletic Bilbao for the chance of a first trophy of Koeman's era.
Tremendous Ter Stegen
The spine of Barca's team was strong throughout: Sergio Busquets was impeccable in midfield and Ronald Araujo outstanding at centre-back.
Ter Stegen was the real hero, though, making six excellent saves and keeping out two penalties in the shoot-out. He also completed 33 passes, more than all but five of Sociedad's starting line-up.
Nacho Monreal was too often left in an unfair foot race against Dembele and Barca's number 11 should have done much more with the openings he had.
Monreal did make five tackles, the joint-most of any Sociedad player, but he only twice regained possession and lost it 16 times - and he only twice attempted crosses.
Barca face either Madrid or Athletic in Sunday's final, while La Real have a week off until they face Cordoba at this same venue in the Copa del Rey.