Sean Maguire was on target for Preston North End, but they had to settle for a point after Famara Diedhiou's second half equaliser just after half time.
Maguire's exquisite finish after Daniel Johnson's backheel gave them a 16th minute lead, but City's No.9 levelled matters just after the break.
There was only one change from the side that had defeated Birmingham City the previous weekend, with Maguire leading the line between Harrop and Potts as a front three.
But it was the home side who had the first shot in anger, Declan Rudd making a fine save from Jamie Paterson’s free kick after Nahki Wells’ counter attack saw him brought down by Patrick Bauer on the left edge of the penalty area.
However, the Lilywhites grew into the game and Andrew Hughes went close with a glancing header wide after a superb whipped cross from the right by Paul Gallagher, after his corner had come back to him.
But on 16 minutes they went ahead and it was brilliant from PNE. A ball in from Gallagher was zipped into player of the year Johnson, on the penalty spot, who showed brilliant control and then back heeled to Maguire, who composed himself and dinked the ball past Daniel Bentley into the middle of the goal.
And it could have been two soon after when another superb Gallagher effort from 25 yards, with his left foot, came off the bar with Bentley beaten, even more impressive with his wrong foot.
Right on half-time there was inches between North End and a second goal when Johnson again was the provider, playing the ball into Maguire – some brilliant football – the Irishman getting off a low shot, forcing a great save by Bentley and Pedro Pereira turning the ball behind before Potts could tap home.
But the score was level just over two minutes after the break as Andreas Weimann broke down the right, got to the byline and drilled the ball across to the back post for Diedhiou to slide home inside the six-yard box.
Ten minutes into the half and Bentley again needed to make another wonderful stop to once again deny Gallagher, whose 25-yard dipping effort from Johnson’s slide-rule pass, was tipped over the bar on the stretch by the Robins’ keeper.
Two minutes later and there was another glorious chance, as Maguire again went through the middle, with Potts to his right, but he chose to check back from the left and shoot, with Ashley Williams making a wonderful block to deny the No.24 a second.
Tom Barkhuizen and Alan Browne – making his 250th appearance for PNE – replaced Ryan Ledson and Josh Harrop, with a switch to 3-5-2, with Browne the right-wing back and Rafferty on the left; Hughes going in as one of the back three.
Bentley was again on hand to deny Barkhuizen, who was released down the right by Gallagher with 18 minutes left, just before Tom Bayliss and Jayden Stockley were introduced for Gallagher and Maguire.
The game was end-to-end and very open, with both sides looking to end the season with a win, with five minutes added into the game.
Both teams had chances to win in the last minute of the added time, with Barkhuizen firing just over the bar and Diedhiou forcing Rudd into a save with just seconds left, but it ended level to end the season.
Bristol City line-up: Bentley, Dasilva, Nagy, Diedhiou, Weimann, Paterson (Afobe, 81), Wells (Palmer, 71), Kalas (c), Vyner, Williams, Pereira (Benkovic, 64). Subs not used: Wollacott, O’Dowda, Watkins, Eliasson, Rowe, Massengo.
PNE line-up: Rudd, Rafferty, Hughes, Ledson (Browne, 64), Bauer, Storey, Potts, Gallagher (c), Maguire (Stockley, 73), Johnson, Harrop (Barkhuizen, 64). Subs not used: Hudson, Fisher, Huntington, Sinclair, Bodin.
Referee: Mr A Woolmer