Match ends, Bradford City 0, Walsall 2.
Craig Westcarr scored twice as Walsall kept alive their slim League One play-off hopes with a first win in 11 games.
The Saddlers did not take the lead until the 68th minute when Westcarr poked home Andy Taylor's low cross.
Walsall's top scorer then claimed his 14th goal of the season with a shot from the edge of the area that looped over home goalkeeper Jon McLaughlin.
The Bantams, without a win now in three games, struggled up front, failing to register a single shot on target.
With seven games left, Walsall are back to within five points of sixth-placed Peterborough United, who have a game in hand.
Walsall manager Dean Smith told BBC WM:
"We have to keep believing. That's four games unbeaten now and this league changes with every round of games.
"We played some good stuff, kept the ball well and restricted them to just a few opportunities.
"I said at half-time that we needed to remain patient, keep doing what we were doing and the chances would come.
"And it was nice to see Craig Westcarr back on the scoresheet with a couple of well-worked goals."
- 18JonesSubstituted forDolanat 81'minutes
- 32BennettSubstituted forThompsonat 55'minutes
- 10GrayBooked at 55minsSubstituted forHansonat 60'minutes
- 29BrandySubstituted forMcQuilkinat 76'minutes
- 9LalkovicSubstituted forBaxendaleat 45'minutes
- Keith Stroud
- Shots on Target
Second Half ends, Bradford City 0, Walsall 2.
Foul by Andrew Butler (Walsall).
Rory McArdle (Bradford City) wins a free kick in the attacking half.
Corner, Walsall. Conceded by Adam Drury.
Andrew Butler (Walsall) wins a free kick in the attacking half.
Foul by James Hanson (Bradford City).
Adam Chambers (Walsall) wins a free kick in the attacking half.
Foul by Matthew Dolan (Bradford City).
Substitution, Bradford City. Matthew Dolan replaces Gary Jones.
Goal! Bradford City 0, Walsall 2. Craig Westcarr (Walsall) right footed shot from outside the box to the top left corner. Assisted by James Baxendale.
Substitution, Walsall. James McQuilkin replaces Febian Brandy.
Attempt missed. Febian Brandy (Walsall) right footed shot from a difficult angle and long range on the left misses to the right.
Corner, Bradford City. Conceded by James Chambers.
Attempt saved. James Baxendale (Walsall) right footed shot from outside the box is saved in the top centre of the goal.
Foul by Adam Chambers (Walsall).
Gary Jones (Bradford City) wins a free kick in the attacking half.
Febian Brandy (Walsall) wins a free kick in the defensive half.
Foul by Adam Reach (Bradford City).
Goal! Bradford City 0, Walsall 1. Craig Westcarr (Walsall) right footed shot from very close range to the bottom left corner. Assisted by Andy Taylor.