The League Two side went ahead through Nahki Wells and Rory McArdle and while Andreas Weimann pulled one back late on, Carl McHugh extended the Bantams’ lead with minutes remaining.
Villa started brightly with Charles N’Zogbia enjoying plenty of space to run at the Bradford defence and Christian Benteke wasting a wonderful opportunity as he headed wide from a corner.
But the home side always looked a threat through the strength of James Hanson, trickery of Zavon Hines and pace of Wells so it wasn’t a huge shock when the latter opening the scoring inside 20 minutes.
Hines won a corner off Bennett and Benteke could only clear to the edge of the box. When the shot came in the ball deflected to Wells who showed composure to tuck the ball past Shay Given.
Bradford only grew in confidence after that goal and there were chances for Hanson to double the lead, particularly when he saw his header from a corner cleared off the line by Fabian Delph.
But Paul Lambert’s men started the second half in fine style as they piled pressure on Bradford without finding the breakthrough with goalkeeper Matt Duke in remarkable form.
Firstly Barry Bannan crossed for Benteke to head on goal from close range and then the Scot put another ball over for Gabriel Agbonlahor to fire goalwards but Duke was equal to both efforts.
Lambert sent on Darren Bent in the hope of finding an equaliser only for the England striker to add to the list of misses when he headed over from point-blank range after following up N’Zogbia’s shot.
And Bradford made the visitors pay in the 78th minute when Gary Jones found McArdle with a left-wing cross and the defender headed the ball past Given at his near post.
Villa did reduce their arrears five minutes later when Weimann finally beat Duke after racing onto Bent’s deflected flick-on but there was a sting in the tail for the Premier League side.
Jones swung in a corner from the right and McHugh beat Benteke in the air to cap a memorable night for the Bantams and they will have high hopes of holding onto their lead at Villa Park in two weeks’ time.