Earlier in the half the England striker could easily have given away a penalty when he dropped back to help out at a corner.
After getting a glancing header to Lee Johnson's kick Crouch appeared to steer the ball away with his left arm. City's appeal was muted although Johnson was booked as the half ended for registering his own protest with referee Mike Jones.
Portsmouth's goal came as they exploited their pace on the flanks with Armand Traore and Nadir Belhadj stripping the home defence bare before Crouch supplied the finish.
The Robins were drawing most of their inspiration from their corners and the second one from Johnson drew a diving save from David James, as he kept out a header from City midfielder Marvin Elliott.
Nicky Maynard was then close with a 30-yard dipping header for City, while David Nugent went even closer for Portsmouth rapping the bottom of Adriano Basso's left post.
The second half saw a sharper more co-ordinated home attack, with centre-back Jamie McCombe, Maynard and Johnson all going close.
Crouch could have wrapped it up for the Premier League side, but after bursting through the middle he shot wide in a one on one with the keeper.
Pompey had to wait until the 88th minute to make sure of the win, when Belhadj broke on the right to set up a tap-in for the arriving Niko Kranjcar.
There was still time for James to keep out Maynard's penalty after the young striker was upended by Sol Campbell.