Bristol Rovers secured their first home league victory for three months against 10-man Bradford.
Lee Brown latched on to Andy Dorman's pass to fire into the bottom corner to put Rovers ahead.
Eliot Richards took advantage of some slack Bantams defending to double the lead, before Bradford's Rob Kozluk was sent off for a second bookable offence.
But Bradford cut the lead when David Syers scored from close range, leaving Rovers clinging on for victory.
VIEWS FROM THE DRESSING ROOM
Bristol Rovers manager Mark McGhee told BBC Radio Bristol:
"It was hard in the end but given the squad we had available to us, there was no one we could bring on to change that.
"We had to dig in and the way they did that was tremendous.
"We were fortunate towards the end as there was a good claim for a penalty although we did feel strongly about the one we had in the first half, so that balanced out.
"But I thought it was a tremendous effort in the second half and I'm delighted."
Bradford City manager Phil Parkinson told BBC Radio Leeds:
"Well, it was a funny old game. We conceded a poor goal then had a lot of the play.
"We started the second half well but went 2-0 down and then the response was tremendous.
"We got the goal and had a few other great opportunities. It's a feeling of frustration because a couple of mistakes cost us.
"Even with 10 men it was a game we deserved a point from and we've let Bristol Rovers off the hook."