Liam Reddy saved four penalties and scored one of his own as Perth Glory booked a place in the A-League Grand Final by beating Adelaide United 5-4 on penalties following an amazing 3-3 draw after extra time.

Perth seemed set to cruise into their first final since 2012 thanks to Diego Castro's double, but Adelaide roared back to force extra-time through Papa Baba Diawara and Ryan Kitto, who struck an equaliser in the 94th minute.

Adelaide needed another leveller in extra time as Scott Neville's header was cancelled out by Michael Marrone, but Tony Popovic's Premiers finally found a way to win the game in the penalty shootout.

The Reds led 3-1 but Reddy dragged them back into the shootout with some superb stops, allowing substitute Joel Chianese to convert the winning kick.

Perth, seeking to win the A-League title for the first time since 2004, led before half-time as Castro beat Adelaide goalkeeper Paul Izzo at his near post after being played through by Chris Ikonomidis.

Castro has been Perth's star man throughout the season and he came up trumps with another decisive moment in the 74th minute.

Ikonomidis was the provider again with a strong run and clever pass to Castro, who squeezed a low shot past Izzo thanks to a minor deflection.

Substitute Diawara grabbed one back for Adelaide with a close-range finish and the Reds incredibly forced extra time with seconds of the added four minutes remaining, Kitto drilling home to spark wild celebrations.

Perth took the lead again through Neville's header but Adelaide refused to be beaten with Marrone getting on the end of a Kitto cross to sensationally level at 3-3.

Castro, so often Perth's hero, had his penalty saved by Izzo to allow Vince Lia's converted penalty to make it 3-1, but Reddy denied Adelaide captain Isaias to give Popovic's men hope.

Reddy, having emphatically scored a kick of his own, brilliantly saved from Diawara but Jason Davidson passed up Perth's first chance to win it as Izzo saved yet again.

Nikola Mileusnic also failed to beat Reddy and Shane Lowry saw his kick saved by Izzo as takers on both sides crumbled under the pressure of the occasion.

Incredibly, Reddy pulled off a fourth save by parrying Nathan Konstandopoulos' poor strike and Chianese finally settled a remarkable semi-final by converting his kick.

Premiers Perth will now wait to see who comes through Sunday's second semi-final between Sydney FC and defending champions Melbourne Victory.