Craig Westcarr grabbed a brace as Walsall stunned Crewe at Gresty Road.
Westcarr got his first with a deflected shot in the 66th minute to give the visitors the lead.
The visitors doubled their lead three minutes later when Westcarr converted from the penalty spot after being fouled by Gregor Robertson.
Substitute James Baxendale coolly slotted home the Saddlers' third late on when one-on-one with Alex keeper Steve Phillips.
VIEW FROM THE DRESSING ROOM
Crewe manager Steve Davis told BBC Stoke:
"Extremely disappointed really. I didn't see that one [coming] after two decent performances.
"The disappointing thing today is we didn't show any fight. There wasn't enough out there who showed any character.
"The game was very tight up to the first goal. 0-0 at half-time was probably fair.
"But after that, once they scored the goal, we didn't show any fight to get back into the game."
Crewe Alexandra 01 Phillips 02 Tootle 04 Davis 05 Ellis 15 Robertson 08 Osman (Clayton - 75' ) 14 Inman 24 Molyneux (Moore - 71' ) 26 Aneke 10 Leitch-Smith 19 Oliver (Grant - 70' ) Substitutes 21 Garratt 03 Mellor 07 Clayton 20 Turton 42 Grant 11 Moore 16 Guthrie Walsall 01 O'Donnell 03 Taylor 04 Butler 12 Downing 15 J Chambers 06 Featherstone 07 A Chambers (Sawyers - 85' ) 08 Mantom 11 Hemmings (Baxendale - 78' ) 10 Westcarr 24 Hewitt (Lalkovic - 86' ) Substitutes 22 Roberts 14 Benning 02 Purkiss 16 Baxendale 25 Sawyers 26 McQuilkin 09 Lalkovic