It was the Bantams who took the lead on 14 minutes, via Romain Vincelot.
But the hosts restored parity before half-time, when Brian Wilson netted.
Defender Rory McArdle netted from close-range, from Billy Clarke’s free-kick to nudge the Bantams back in front.
Victory means fifth-placed City are now six points clear of seventh-placed Southend, and eight ponts behind second-placed Sheffield United.
Oldham: Ripley, Wilson, Clarke, Gerrard, Reckord, Fane, Green, Banks, Flynn, McLaughlin, Holloway. Subs: Hunt, Ngoo, Law,
McKay, Kettings, Sam Edmundson, Erwin.
Bradford: Doyle, McMahon, McArdle, Vincelot, Meredith, Marshall, Cullen, Dieng, Law, Hiwula, Clarke. Subs: Darby,
Sattelmaier, Gilliead, Jones, King, Devine, Hudson.
Referee: Nigel Miller (Durham)