The 18-year-old overcame a series of missed opportunities to sink Joe Royle's men by laying on City's opener and then forcing home the decisive second.
Ipswich had their chances to maintain an eight-game unbeaten run but their cause wasn't helped when Hermann Hreidarsson saw red after 50 minutes.
His departure, for catching Simon Francis in the face with his arm, sparked City's best spell of the game and the relegation-haunted Bantams ran out deserved winners in the end.
Injuries and suspensions meant City boss Nicky Law had to field three teenagers and with five untried faces on the bench a victory over Ipswich looked unlikely.
But some determined defending saw the visitors restricted to a few clear cut opportunities.
City full-back Gus Uhlenbeek had to boot one goalbound header off his own line and Ipswich striker Marcus Bent saw his 18-yard drive clip a post.
Town's Spanish hot shot Pablo Counago had a frustrating day with his close-range header being ruled out for offside and when Hreidarsson got his marching orders City took the game by the scruff of the neck.
Forrest, who had already seen a header blocked on the Ipswich line, kept his cool to flick a pass into the path of Claus Jorgensen after 62 minutes and the Dane lashed a left-foot drive high into the Ipswich net from 12 yards out.
It was the midfielder's fifth goal in six games and just the lift City needed.
Seven minutes later Ipswich could only half clear another City attack and when defender Mark Bower nodded the ball down in the six-yard box the unmarked Forrest slid in to force the ball home with his right boot.
Ipswich staged a late rally in the hope of salvaging something from the game, but substitute Darren Bent wasted their best chance when his late volley rattled off the City bar.