The League Two outfit started with the same XI as the first leg, whilst the Premier League side opted for a very strong team, starting the likes of Christian Benteke, Charles N'Zogbia and Gabriel Agbonlahor.
Villa started the brighter of the two as it tried to overcome the two goal deficit and Benteke was involved in numerous chances inside the first 20 minutes.
The Belgian headed the ball back across goal but Matthew Lowton was unable to keep his header down despite being only a few yards out.
He then had a header of his own but could only direct it into the arms of goalkeeper Matt Duke before Fabian Delph's long range effort flew over the bar.
Villa was a constant threat and it was no surprise that the score was 1-0 after 23 minutes. Joe Bennett delivered an inch-perfect cross and Benteke volleyed past Duke with the side of his foot.
Stephen Ireland had the ball in the back of the net four minutes later following a mazy run from Bennett but the goal was chalked off for offside.
Duke was continuing his fine performance from the first leg. He produced a brilliant one-handed stop to deny N'Zogbia from range before doing exactly the same from an effort from Ireland.
A minute before halftime and it should really have been 2-0. Rory McArdle misjudged an Ireland cross into the box and the ball flicked off Benteke and inches wide of the post.
Bradford almost equalized with its first chance of the game just before the break through a fine curling attempt from Nahki Wells but the ball beat an outstretched Shay Given but also the post.
Benteke almost leveled on aggregate with another header moments into the second half but it did not have the conviction as his goal and it trickled wide.
The Bantams equalised on the night and extended their lead overall after 55 minutes with a brilliant header from James Hanson.
Zavon Hines beat Bennett down the right and won a corner - their first one of the night. Benteke cleared it for a second corner and Gary Jones' delivery beat the Belgian and Ron Vlaar but not Hanson who powered the ball home.
Bradford was in the ascendancy and Hines forced Given before Hanson's header coming off the top of his head and out for a goal kick.
Ireland almost pulled one back for Villa after fine work from substitute Darren Bent to play him in but he could only shoot wide from six yards out.
Substitute Garry Thompson nearly added further misery to the home side but his first time effort struck the crossbar.
Andreas Weimann scored a late winner for Villa on the night, rounding Duke following a flick on from Bent but it was too little too late.
Phil Parkinson's side held on for a famous victory over two legs and will play the winner of Swansea and Chelsea, who play on Wednesday.
Follow GOAL.COM on Twitter
- Sports & Recreation