Bristol City 0 Brentford 1
Neal Maupay scored an 80th-minute winner as Brentford deservedly beat their fellow play-off contenders in a one-sided contest at Ashton Gate.
The substitute was allowed to advance into the box and cleverly made room for a low right-footed shot from 12 yards that wrong-footed the otherwise excellent Bristol City keeper Frank Fielding.
Only the brilliance of Fielding and some desperate last-ditch defending prevented more goals on a bad day for Lee Johnson’s Robins.
Brentford were the better side throughout and created the majority of first-half openings without forcing a testing save from Fielding.
Ollie Watkins was a constant threat as a lone striker, with Florian Jozefzoon pushing forward dangerously on the right flank.
Watkins thought he should have had a penalty after 15 minutes when driving between two City defenders and going down. But referee Keith Stroud was unimpressed and issued a yellow card for diving.
Fielding was brought into action after 23 minutes when Watkins produced a neat turn outside the box before sending in a right-footed shot that the goalkeeper dealt with comfortably.
Jozefzoon volleyed wide and Alan Judge fired across the edge of the six-yard box as City struggled to put their passing game together.
Watkins volleyed over from a Jozefzoon cross and there was a smattering of jeers from home supporters when the interval was reached without their side having created chance.
It was a similar story at the start of the second half after Brentford had sent on Josh Clarke for Henrik Dalsgaard.
Watkins set up Judge for a curling right-footed shot that was just too high. Then Yoann Barbet strode forward to hit a low drive from distance that was too close to Fielding.
It was all Brentford as nearly 900 travelling fans behind the goal they were attacking raised the volume. Jozefzoon had a shot blocked for a corner at which point Johnson had seen enough.
He sent on Jamie Paterson for Ryan Kent after 58 minutes with his side under the cosh, but Brentford then created the best chance of the game so far when Jozefzoon was put clear only to lift his shot over the bar.
Two more Johnson substitutions followed, as Milan Djuric and Lloyd Kelly replaced Famara Diedhiou and skipper Bailey Wright. Brentford boss Dean Smith responded by sending on Maupay and Nicholas Yennaris for Judge and Josh McEachran.
The goal Brentford thoroughly merited finally arrived six minutes later, and it should have been 2-0 soon after as Fielding produced an outstanding save to deny Maupay, whose follow-up effort was acrobatically cleared off the line by Josh Brownhill.
Aden Flint did well to block a Jozefzoon shot and Fielding produced more heroics as the visitors totally dominated the closing stages.
City, who failed to muster a shot on target, were booed off by their own supporters at the end.
Brentford: Bentley, Dalsgaard [Clarke 45], Egan, Mepham, Barbet, McEachran [Yennaris 74], Mokotjo, Jozefzoon, Judge [Maupay 74], Sawyers, Watkins.
Subs not used: Daniels, Ogbene, Canos, Marcondes.