A crowd of 17,014, boosted by Bradford's special £1 ticket offer, saw the visitors restrict the Bantams to a handful of chances before taking the lead after 82 minutes.
City's defence failed to clear Tom Barkhuizen's long throw and, when Delroy Facey crossed the ball into the goal area, the unmarked Byron Anthony headed into the top corner of the net.
However, Bradford hit back well to equalise after 88 minutes through substitute midfielder David Syers.
Syers saw his shot cleared off the line after goalkeeper David Cornell failed to hold a high cross and, from the subsequent corner, he headed the ball back across the goal into the far corner.
Bradford had a chance to win the game in a frantic finale, but left-back Marcel Seip saw his under hit shot saved by the diving Cornell.