Match ends, Bristol City 2, Bradford City 2.
Leaders Bristol City maintained their unbeaten start to the League One season but had to settle for a point against Bradford City.
Aden Flint headed in early on, only for Billy Clarke to level for the visitors before the break.
Centre-back Flint gave City the lead again when he capitalised on an error from goalkeeper Jordan Pickford.
But with five minutes remaining, Christopher Routis fired in off the woodwork to rescue a point.
City have now made their best start to a season in 60 years, going 14 games unbeaten in the league, and have not lost in their last 20 matches, a run stretching back to March.
But Steve Cotterill's side were left disappointed after twice throwing away the lead against a plucky Bradford, who had come off the back of two defeats.
|League One standings|
The hosts broke the deadlock on eight minutes when an unmarked Flint rose to meet Luke Freeman's free-kick and headed in.
But Bradford drew level from Mark Yeates' set-piece, which was sent into the box and nodded in by Clarke.
And the Bantams went close to taking the lead minutes later but Clarke and Andy Halliday both struck the woodwork in quick succession.
City went on the attack immediately after the break, with captain Wade Elliott and fellow midfielder Marlon Pack shooting over from distance.
Flint thought he had netted the winner when he stabbed home with eight minutes remaining but Routis equalised again with a half-volley off the crossbar.
Bristol City manager Steve Cotterill told BBC Points West:
"Maybe they (Bradford) thought that was a good point down here. Teams will think that, especially at the moment.
"The big thing for us was that our boys kept on trying to win the game. We went right to the death.
"That's why we've won so many games, because of the players' desire to win.
"It would have been nice if we'd have won as we could have had our lead extended by eight points."
- 23BryanSubstituted forCunninghamat 62'minutes
- 18WilbrahamBooked at 24mins
- 19AgardSubstituted forEmmanuel-Thomasat 69'minutes
- 5DaviesSubstituted forSheehanat 38'minutes
- 25HallidaySubstituted forMoraisat 73'minutes
- 10ClarkeSubstituted forHansonat 68'minutes
- Darren Bond
- Shots on Target
Second Half ends, Bristol City 2, Bradford City 2.
Attempt missed. Aden Flint (Bristol City) header from the centre of the box is close, but misses to the left following a corner.
Corner, Bristol City. Conceded by Rory McArdle.
Corner, Bristol City. Conceded by Christopher Routis.
Goal! Bristol City 2, Bradford City 2. Christopher Routis (Bradford City) header from the centre of the box to the top right corner. Assisted by Filipe Morais with a cross following a corner.
Corner, Bradford City. Conceded by Aden Flint.
Foul by Aaron Wilbraham (Bristol City).
Filipe Morais (Bradford City) wins a free kick on the left wing.
Goal! Bristol City 2, Bradford City 1. Aden Flint (Bristol City) right footed shot from the centre of the box to the centre of the goal. Assisted by Luke Freeman with a cross following a corner.
Corner, Bristol City. Conceded by Alan Sheehan.
Jay Emmanuel-Thomas (Bristol City) wins a free kick in the defensive half.
Foul by Gary Liddle (Bradford City).
Aden Flint (Bristol City) wins a free kick in the attacking half.
Foul by Jon Stead (Bradford City).
Attempt missed. Luke Freeman (Bristol City) left footed shot from a difficult angle on the left is close, but misses to the right.
Attempt missed. Wade Elliott (Bristol City) right footed shot from outside the box misses to the right.
Attempt missed. Luke Freeman (Bristol City) left footed shot from outside the box is high and wide to the left.
Substitution, Bradford City. Filipe Morais replaces Andy Halliday.
Attempt missed. Jay Emmanuel-Thomas (Bristol City) left footed shot from outside the box is just a bit too high.