Match ends, Brentford 1, Stoke City 0.
Emiliano Marcondes' brilliant free-kick earned Brentford a place in the FA Cup fourth round, settling an all-Championship affair against Stoke City.
He curled past keeper Adam Davies from the left side, a rare moment of quality in a scrappy first half.
Dru Yearwood had a major chance to finish it for the Bees, but fired over the top from the edge of the box.
Stoke might have nicked a replay, but Julien Ngoy was denied by a last-ditch Ethan Pinnock block late on.
- Live: Follow the FA Cup third-round action
- Watch all the latest FA Cup goals, highlights and reaction here
Marcondes was on loan with FC Midtjylland until the end of December, but he marked his return with a wickedly swinging set-piece for his first goal in Bees colours.
Thomas Frank's team had won four of their past six games over the Christmas period to move up to third in the Championship, and continued that impressive run by dumping out the Potters despite a glut of changes - including a debut for Halil Dervisoglu.
Michael O'Neill's Stoke side had rallied themselves over the festive season, with victories against Sheffield Wednesday and Huddersfield but their much-changed side - featuring seven tweaks to the line-up - struggled to fashion enough opportunities.
The victory moved the Bees beyond the third round for the third time in four years, while Stoke tumble out at this stage for the fourth year in a row.
Brentford head coach Thomas Frank told BBC Radio London:
"I'm massively delighted, I told them in the dressing room I'm so proud of them for various reasons, we went up against an experienced Stoke side and they'd played 9,000 minutes as a group in the Championship this year, our team had played 2,000 compared.
"Our average age was 20.1, theirs was 24.5, and I think that's minor proof the Brentford model is working with the B team. Of course we needed to get into the game in the first 30 minutes, without being under massive pressure, and then we grew into the game and the last 10, 15 minutes of the first half we were on top and scored a very nice goal.
"The second half was even, we didn't take the good counter-attacking opportunities we had to put the game to bed and we needed a crucial Ethan Pinnock block in the end for a nice 1-0 win. I can't praise the boys enough."
Stoke City boss Michael O'Neill told BBC Radio Stoke:
"We're disappointed to go out of the competition, out of the cup, we felt today we were dominant for a lot of the game and toward the end we had chances.
"It's disappointing to lose the way we did with the goal, the nature of the goal is poor and poor for us to lose.
"We stopped Brentford having control of the game, they're renowned for that, and there were a lot of good performances.
"We have to look at the players we have in the building, the size of the squad has made it difficult to look at the young players but it was encouraging today."
- 28DanielsBooked at 90mins
- 29Bech Sørensen
- 2ThompsonSubstituted forOksanenat 86'minutes
- 31ZamburekSubstituted forHammarat 80'minutes
- 21DervisogluSubstituted forDasilvaat 81'minutes
- 16Valencia Castillo
- 39Sery Larsen
- 15Martins Indi
- 24CousinsSubstituted forNgoyat 81'minutes
- 7InceSubstituted forVerlindenat 71'minutes
- 26CampbellBooked at 43mins
- 19GregorySubstituted forVokesat 63'minutes
- Keith Stroud
- Shots on Target
Second Half ends, Brentford 1, Stoke City 0.
Corner, Stoke City. Conceded by Luka Racic.
Attempt saved. Emiliano Marcondes (Brentford) left footed shot from the right side of the box is saved in the centre of the goal.
Attempt saved. Sam Vokes (Stoke City) header from the centre of the box is saved in the top centre of the goal.
Luke Daniels (Brentford) is shown the yellow card.
Attempt missed. Sam Vokes (Stoke City) right footed shot from the centre of the box is too high.
Substitution, Brentford. Jaakko Oksanen replaces Dominic Thompson because of an injury.
Corner, Stoke City. Conceded by Emiliano Marcondes.
César Joel Valencia Castillo (Brentford) wins a free kick in the defensive half.
Foul by Nathan Collins (Stoke City).
Substitution, Stoke City. Julien Ngoy replaces Jordan Cousins.
Substitution, Brentford. Josh Dasilva replaces Halil Dervisoglu.
Substitution, Brentford. Fredrik Hammar replaces Jan Zamburek.
Attempt missed. Thibaud Verlinden (Stoke City) left footed shot from the left side of the box is too high.
Corner, Stoke City. Conceded by Ethan Pinnock.
Attempt missed. Halil Dervisoglu (Brentford) left footed shot from outside the box is just a bit too high.
Foul by Mads Roerslev Rasmussen (Brentford).
Thibaud Verlinden (Stoke City) wins a free kick in the defensive half.
Attempt saved. Tyrese Campbell (Stoke City) right footed shot from outside the box is saved in the top centre of the goal.