Goals from Rory McArdle and Mark Yeates ended North End’s 11-month unbeaten record at Deepdale.
McArdle headed home Andy Halliday’s cross just after the mid-point of the first half to give the Bantams the lead.
Joe Garner levelled matters with five minutes left, with his 12th goal of the season, but the visitors won the game less than 45 seconds later when Mark Yeates curled home from the edge of the box.
Manager Simon Grayson restored top scorer Joe Garner to the starting line-up after resting him at Havant & Waterlooville the previous Monday and it was the 11-goal front man who had the game’s first chance.
The No.14 broke through past three defenders only for McArdle to make an excellent last ditch block to his left foot shot.
And it was the centre half who then broke the deadlock, rising highest at the back post to head home Andy Halliday’s inswinging corner - in off the left hand post.
The Lilywhites almost got an immediate response; Garner racing at heart of Bradford defence before brought down by Andrew Davies 25 yards out in a central position.
Paul Gallagher’s free kick was deflected wide for first PNE corner. The first corner was cleared to Neil Kilkenny whose shot was blocked out to Chris Humphrey who crossed from the right and Garner headed back down to Gallagher, but his effort was deflected wide for what should have been a second corner, but only a goal kick was given.
Seven minutes before the interval the visitors won two more corners in quick succession as Halliday swung them in; the first caused all sorts of problems, before Jones comfortably took the second.
Just before the interval PNE worked the ball well down the right eventually seeing Alan Browne feed Gallagher into a left hand channel, but his first time effort was straight at Pickford.
The Lilywhites made a change to three at the back at half-time and started with a high tempo with Robinson now in attack with Garner.
Five minutes in and they were almost level – twice. Firstly Callum Robinson delivered for Garner to head goalwards, only for it to be cleared brilliantly off the line and then it came back out to Humphrey, whose vicious shot was superbly saved by on loan keeper Pickford in the Bradford goal.
Just past the hour mark and there was an inch between the width of the post being level as Gallagher got down the left and pulled the ball back to Callum Robinson, who swept first time left-footed shot beat the keeper, but also beat the right hand post by the thickness of the paint.
Half way through the second half Simon Grayson made a double change with Scott Laird and Kevin Davies on for Buchanan and Gallagher as North End looked to increase the pressure further.
Laird delivered some quality balls after his introduction, the first from the left causing problems in the box, before the second from the right was headed narrowly wide by Joe Garner with just under a quarter of an hour remaining.
Jamie Jones then denied Jon Stead on a Bantams counter as the game became stretched. Kyel Reid came on for Chris Humphrey, but it was Kevin davies who had a chance as Garner headed down Clarke’s long ball and the No.9 stretched out a foot, but Pickford claimed well.
The ball was brilliantly cleared off the line by Darby after Robinson’s driven ball from the right, preventing Garner levelling matters seven minutes from the end.
But he wasn’t to be denied two minutes later as Robinson raced down the left and drilled the ball across for Garner to poke home from close range.
However, the lead lasted less than 45 seconds as Bradford crossed from the right through Morais and the ball fell to Mark Yeates who checked inside and curled a ball past Jones into the bottom right hand corner.
Five minutes were added on by the officials and Jordan Pickford denied Jack King’s drive from Callum Robinson’s cross with two minutes left – a fine stop.
The final chance fell to Garner. Reid delivered to the back post from the left and Garner found time and space, but his effort was scuffed wide and North End’s long unbeaten home record came to an end.
PNE line-up: Jones, Clarke (c), Buchanan (Laird, 65), Kilkenny, King, Huntington, Humphrey (Reid, 79), Browne, Garner, Gallagher (K Davies, 66), Robinson. Subs not used: Stuckmann, Holmes, Welsh, Ryan.
Bradford City line-up: Pickford, Darby (c), Meredith, A Davies, B Clarke (Hanson, 76), Yeates, Stead, Kennedy, Morais (Sheehan, 88), McArdle, Halliday (Liddle, 69). Subs not used: Williams, Dolan, Knott, Routis.
Attendance: 10,302 (1,310 away fans)
Referee: Mr A Haines