A late Liam Kinsella own goal saw Bradford City snatch three points in a close encounter at the Banks's Stadium
The Saddlers had chances in an eventful second half which saw James Vaughan also miss a penalty.
Darrell Clarke made two changes to the team that drew at Colchester United.
Stuart Sinclair and Dan Scarr came into the side in place of Cameron Pring and Cameron Norman.
The visitors had the better of the opening exchanges and had the ball in the net after seven minutes when James Vaughan headed in but the referee chalked it off for a foul on Liam Roberts.
Walsall’s best chance of the first half came after 26 minutes. Rory Gaffney’s brilliant knockdown found Caolan Lavery who rifled in a powerful shot that was pushed away by former Saddlers keeper Richard O’Donnell.
Both sides made a bright start to the second half. Gaffney had a shot stopped by O’Donnell before Janes Vaughan’s hooked effort was saved by Liam Roberts down the other end.
The Saddlers had a good spell just after the hour mark. Gaffney almost put the Saddlers in front with a beautiful curling effort but O’Donnell pulled off a brilliant save to deny him.
Two minutes later, Hardy teed up Gaffney who fierce striker took a deflection and went behind.
The Saddlers were having the better of the second half but the visitors were presented a golden opportunity to take the lead when Dan Scarr fouled Vaughan in the penalty area and the referee pointed to the spot.
They didn’t take it though as Vaughan skied his penalty.
Vaughan looked to have made amends on 83 minutes though when he headed in from close range to put the Bantams in front however replays showed Kinsella had the final touch.
The Saddlers battled on but the visitors held on for the victory.