It was the visitors' third away defeat in a row as they lost skipper Jake Taylor and Tom Parkes to straight red cards, while Bradford's Callum Cooke was dismissed for a second yellow.
Bradford had the first chance when Harry Pritchard crossed from the left and skipper James Vaughan saw his close-range volley blocked.
Exeter had plenty of pressure but ex-Bradford midfielder Nicky Law scuffed their best chance wide when unmarked in the box.
Bradford took the lead against the run of play in the 31st minute as Aramide Oteh jumped for Zeli Ismail's right-wing cross, with the ball eventually adjudged to have gone in off Exeter's Pierce Sweeney.
The home side added a second in first-half stoppage time when Oteh chased a long pass down the middle and appeared to be fouled by Aaron Martin. As Bradford appealed for a penalty, the ball ran free to Vaughan to score from six yards.
Exeter dominated the start of the second half, with Taylor having a goal-bound shot blocked by Ben Richards-Everton in the 52nd minute before Sweeney hit the post a minute later.
Then came two dismissals in the space of three minutes. Taylor was shown the red card for a reckless tackle on Connor Wood and two minutes later Cooke was sent off for a second yellow card after a foul on Law.
Exeter were then reduced to nine men when Tom Parkes was sent off for bringing down substitute Dylan Connolly.