The Bantams were undone by winger Milan Lalkovic’s winning goal with 17 minutes to go.
Bantams’ chief Phil Parkinson said: “We started the game far too slowly and gave away possession too cheaply against a good Walsall side.
“We were terrific in the second half and had them pinned back for long periods.
“We had some great chances and threw some great crosses in.
“If we were to lose our unbeaten run, this was at least the right way to do it. We threw everything we could at them in the second period.
“Looking back, I think we can count ourselves very unlucky not to have come away with something from the game.”
The Saddlers went ahead after 11 minutes, when Lalkovic’s shot deflected kindly into the path of Tom Bradshaw, and he lashed clinically past Ben Williams.
It meant City were unable to equal a club record. Williams had kept seven consecutive clean sheets and was hoping to match the mark set in 1910-11.
The Bantams equalised midway through the second period.
Billy Clarke headed neatly on to Lee Evans, who drove home to send the sizeable travelling support into raptures. Their joy was short-lived as Walsall won the match just nine minutes later.
Romaine Sawyers played the ball on to Lalkovic, and he drove confidently past Williams to wrap up a precious victory.
Walsall: Etheridge, Downing, O’Connor, Henry, Demetriou, Morris (Forde 77), Chambers, Evans, Lalkovic (Cook 86), Bradshaw, Sawyers. Unused substitutes: MacGillivray, Taylor, Baxendale, Preston, Flanagan.
Bradford City: Williams, Darby, McArdle, N Clarke (Cole 79), Meredith, McMahon (Bowery 89), Evans, Knott, Reid (Marshall 79), Hanson, B Clarke. Unused substitutes: Cracknell, Liddle, Leigh, James.
Referee: M Brown (East Yorks).
Man of the match: Lee Evans.