Match ends, Millwall 1, Bradford City 1.
Millwall drew at home to Bradford to seal a 4-2 aggregate win and reach the League One play-off final at Wembley.
The Lions, who won the semi-final first leg 3-1, looked to have put the tie to bed when Lee Gregory slotted home.
But Jamie Proctor's prodded effort on the stroke of half-time, City's first shot on target, gave the Bantams hope.
Proctor then wasted a further golden chance moments later, and it proved costly as Millwall held on to set up a showdown with Barnsley on 29 May.
Neil Harris' side were rarely troubled after Proctor twice turned down the opportunity to shoot when excellently placed - and, if anything, they looked the more likely to score again after the break.
Centre-half Byron Webster came closest, sending a header narrowly wide of Ben Williams' post, as the second leg petered out in front of a raucous crowd at The Den.
More to follow.
Match ends, Millwall 1, Bradford City 1.
Second Half ends, Millwall 1, Bradford City 1.
Delay over. They are ready to continue.
Delay in match (Bradford City).
Foul by Rory McArdle (Bradford City).
Steve Morison (Millwall) wins a free kick in the defensive half.
Substitution, Millwall. Tony Craig replaces Byron Webster because of an injury.
Corner, Bradford City. Conceded by Steve Morison.
Corner, Bradford City. Conceded by Shaun Williams.
Substitution, Millwall. Shaun Williams replaces Lee Gregory.
Kyel Reid (Bradford City) is shown the yellow card for a bad foul.
Foul by Kyel Reid (Bradford City).
Ben Thompson (Millwall) wins a free kick in the defensive half.
Shane Ferguson (Millwall) is shown the yellow card.
Lee Evans (Bradford City) wins a free kick in the attacking half.
Foul by Shane Ferguson (Millwall).
Attempt blocked. Lee Evans (Bradford City) right footed shot from more than 35 yards is blocked.
Chris Taylor (Millwall) is shown the yellow card.
Billy Clarke (Bradford City) wins a free kick in the defensive half.
Foul by Ben Thompson (Millwall).
Rory McArdle (Bradford City) is shown the yellow card for a bad foul.
Foul by Rory McArdle (Bradford City).
Steve Morison (Millwall) wins a free kick in the defensive half.
Lee Evans (Bradford City) wins a free kick in the attacking half.
Foul by Lee Gregory (Millwall).
Corner, Bradford City. Conceded by Shane Ferguson.
Paul Anderson (Bradford City) wins a free kick in the attacking half.
Foul by Joe Martin (Millwall).
Lee Evans (Bradford City) is shown the yellow card for a bad foul.
Foul by Lee Evans (Bradford City).
Ben Thompson (Millwall) wins a free kick in the defensive half.
Attempt missed. Chris Taylor (Millwall) right footed shot from the centre of the box is too high following a corner.
Corner, Millwall. Conceded by Rory McArdle.
Foul by Rory McArdle (Bradford City).
Lee Gregory (Millwall) wins a free kick in the attacking half.
Substitution, Bradford City. Steve Davies replaces Nathan Clarke.
Tom Thorpe (Bradford City) wins a free kick in the defensive half.
Foul by Steve Morison (Millwall).
Substitution, Bradford City. Paul Anderson replaces Tony McMahon.
Offside, Millwall. Chris Taylor tries a through ball, but Lee Gregory is caught offside.