Matt Kilgallon’s late sucker-punch for Bradford condemned Pompey to an undeserved third successive defeat.
The Bantams defender’s 80th-minute header meant the visitors picked up a smash-and-grab 1-0 victory against the Blues.
The hosts started brilliantly, with Kyle Bennett going close to opening the scoring on 10 minutes, but his right-foot effort went wide of the far post.
The former Doncaster attacker then had a gilt-edged opportunity in the 29th minute.
Matty Kennedy’s raking pass picked out Bennett, but he blazed his effort over the bar from close range.
Bradford’s best chance before half-time came when Romain Vincelot met Tony McMahon’s corner – but he headed over in the 41st minute.
Bennett then should have given Kenny Jackett’s side the lead four minutes after the restart.
The 27-year-old did well to intercept a poor back pass and rounded Bantams goalkeeper Colin Doyle, but his right-foot effort missed the target with the goal gaping
Luke McGee was called into action on 52 minutes when he superbly saved Charlie Wyke’s effort.
The Blues continued to dominate the game, with Ben Close and Kennedy producing saves from Bradford goalkeeper Colin Doyle.
But the Bantams took the lead against the run of play on 80 minutes when Kilgallon was left in acres of space and glanced McMahon’s free-kick delivery beyond a helpless Luke McGee.
Jackett changed to three at the back as he searched for an equaliser, and substitute Conor Chaplin’s goal-bound left-foot effort bounced off team-mate Jamal Lowe.
It was an undeserved defeat for the Blues, who have now lost their past three League One matches.