Rafael Nadal will face Roger Federer in the final of the Australian Open
Nadal broke in the fourth game of the match and only lost one point on his serve for the rest of the set to take it comfortably 6-3.
The Spaniard broke twice more in the second set but lost his own three times and Dimitrov levelled the match, converting his fifth set point.
His unforced error count started to count against him as Nadal took a nervy third-set tie-break but the Bulgarian bit back once again in the fourth-set breaker.
Rafael Nadal was a figure of emotion after finally sealing victory
The final set was of epic proportions but the 14-time Grand Slam champion served out the match as the clocks in Melbourne approached 1am.
Roger Federer had already booked his place in the final yesterday, also needing five sets to overcome Stan Wawrinka.
And the tone for the second semi-final was set in the opening game as Nadal saved two break points before holding.
Grigor Dimitrov put in one of the performances of his life but it was not enough
A set up but serving at 0-30 and 1-2, Nadal was warned by umpire Pascal Maria for taking too long between points.
The Spaniard was broken to love and while he did break back, Dimitrov took the set 7-5 to level up the match.
In the next two sets, each player only dropped his serve once. Tie-breaks were required to separate them which they split to force a decider and the match ticked past midnight.
It took Dimitrov nearly nine minutes to hold in the opening game, but the pivotal moment seemed to come in the eighth game.
Nadal saved two break points and the psychological blow seemed too much for Dimitrov.
His opponent seized on the opportunity, breaking immediately and serving out the match minutes later, converting his third match point to ensure he will face Federer for a 35th time in Sunday's final.