The Bantams began brightly but were soon on the back foot and Villa assumed 72% of the ball in the opening half. Christian Benteke, Fabian Delph and Matthew Lowton all went close before they made their dominance pay in the 24th minute.
© PA Photos
Joe Bennett sent over a cross from the left and it found an unmarked Benteke to volley home from eight yards at the near post.
Paul Lambert's side didn't let up and but for Bantams keeper Matt Duke, Villa would have gone in two ahead. First, Duke fingertipped Charles N'Zogbia's fierce drive over the bar before Stephen Ireland's clipped effort was also tipped over.
Just before the half-time whistle Benteke saw a bundled effort bounce just wide before Nahki Wells curled Bradford's best effort a yard wide of Shay Given's far post.
Benteke should have doubled the hosts' lead and brought the tie level four minutes after the break but didn't get enough on his header that skidded wide.
Villa were made to pay for their missed chances in the 55th minute when they succumbed to another set piece. Gary Jones curled over a corner from the right and striker James Hanson thumped a header high into the net.
© PA Photos
Hanson should have put the tie to bed soon after but he mistimed his jump and couldn't meet a cross from the right.
Lambert brought on the likes of Darren Bent and Andreas Weimann but it was Bradford who again came close, this time Garry Thompson rattling the crossbar after sweeping Stephen Darby's cutback goalwards.
Villa went down the other end and Gabriel Agbonlahor's cross somehow didn't get a touch on its way through the six-yard box.
A barrage from the hosts was expected in the final minutes but it wasn't until the 89th minute when they struck.
Darren Bent flicked on a long Given kick and Weimann latched on to it, rounding Duke and sidefooting home to set up a grandstand final few minutes.
Villa couldn't find another to send the match into extra time, sparking wild scenes from the visiting players at full time.
Phil Parkinson's men will take on either Swansea or Chelsea in the final at Wembley on Sunday, February 24. The Swans lead the tie 2-0 after the first leg.