Rasheed Ward had a big day in the passing game for Northwestern (5-0, 1-0 Big Ten), catching 10 balls for 94 yards and a touchdown. Eric Peterman caught two touchdown passes in the second half.
Shonn Greene ran for 159 yards and a TD for Iowa (3-2, 0-1), while Andy Brodell finished with eight catches for 126 yards and a touchdown. Ricky Stanzi completed 21-of-30 passes for 238 yards.
Iowa kicker Trent Mossbrucker got the Hawkeyes on the scoreboard first with a 30-yard field goal at the 6:06 mark of the opening quarter.
Greene made it a 10-0 game when he broke loose for an 18-yard touchdown run with 13:20 remaining in the second quarter.
NU kicker Amado Villarreal connected on a 37-yard field goal with four minutes remaining in the half, narrowing the margin to 10-3.
On the ensuing drive, Stanzi found Brodell for a 45-yard scoring strike to put Iowa ahead, 17-3.
But from there it was all Wildcats. Bacher hooked up with Ward for a one-yard touchdown pass and catch just before the half.
The Wildcats opened the second half with a four-play, 76-yard drive, punctuated by Peterman's 15-yard touchdown reception from Bacher.
Those two hooked up again for a three-yard touchdown pass midway through the fourth quarter, which turned out to be the deciding touchdown.
The Hawkeyes were able to move the ball throughout the game, but they were not able to overcome four lost fumbles.