The Tampa Bay Buccaneers fell just short of a perfect 2025 preseason on Saturday night, dropping a 23-19 decision to the visiting Buffalo Bills at Raymond James Stadium. Quarterbacks Kyle Trask and Connor Bazelak combined to completed 25 of 36 passes for 200 yards, two touchdowns, no interceptions and a 101.6 passer rating, but were outdueled by Bills passer Shane Buechele, whom completed 83.3% of his passes.
"I like the way 'Baze' handled the two-minute at the end," said Head Coach Todd Bowles. "We had some good kickoff returns, so that was positive. He did a heck of a job in the second half; he did a good job last week. So, he's growing without a lot of reps. He's shown that he can grow and all that stuff is positive, but we've got to way it against everything else."
Neither team played any of its starters or key regulars. Trask started the game for the Buccaneers – Teddy Bridgewater was unavailable due to illness – and Buechele was under center for the Bills for the entire game, with Josh Allen, Mitchell Trubisky and Mike White looking on. Given that the Buccaneers and Bills will play during the regular season in November, both teams relied on vanilla game plans and the home team managed just 241 yards of offense, including 45 on the ground.
Rookie wide receiver Tez Johnson was a bright spot for the Buccaneers, catching eight passes for 58 yards and a touchdown. Rookie wideout Garrett Greene, who is converting from his college position of quarterback, continued a strong preseason with three catches for 18 yards and a toe-tapping touchdown in the fourth quarter.
"He really improved from last week to this week understanding the little things," said Bowles of Johnson. "He made some plays. He played fast. He played like he knew what he was doing."
Neither Trask nor Bazelak attempted many passes downfield as the Bucs stayed with a simplified game plan, though Bazelak did connect with second-year WR Kam Johnson on a deep route in the fourth quarter for 30 yards. Johnson caught two passes for 34 yards and also had two punt returns for 27 yards and one kickoff return for 57 yards. Overall, the Bucs' return game was one of the best results for the team on a mostly unremarkable night. Tampa Bay averaged 38.0 yards on five kickoff returns and 13.5 yards on two kickoff returns.
"Like I said, that was one of the better things that we did tonight, from a return standpoint, getting the ball out to the 50 almost every time."
Buffalo managed to produce a more robust rushing attack than the Buccaneers, gaining 105 yards on 31 carries, with Elijah Young and Frank Gore Jr. leading the way. Tampa Bay was limited to 44 yards on 17 carries, though undrafted rookie Josh Williams had several nice runs while finishing with 28 yards on eight totes. Williams also contributed kickoff returns of 42 and 39 yards.
Tampa Bay's defense did not produce a takeaway after recording six interceptions in its first two preseason games. Safety Kaevon Merriweather and cornerback Tre Avery – the latter signed just two days before the game – tied for the team lead with seven tackles. Rookie defensive lineman Elijah Roberts had one sack and another one erased by an unrelated penalty. Undrafted rookie safety Shilo Sanders was ejected in the second quarter after incurring an unnecessary roughness penalty.
View the best photos of the Tampa Bay Buccaneers' 2025 preseason Week 3 matchup vs. the Buffalo Bills

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs

Bills vs. Bucs
"You can't throw punches in this league," said Bowles of the penalty that got Sanders thrown out of the game. "That's inexcusable. They're going to get you every time. Gotta grow from that."
The Bucs won the toss and started out at their own 29 after a 27-yard kickoff return by rookie RB Josh Williams. A defensive holding call gifted the Bucs five quick yards, and two plays later Trask found WR Ryan Miller on a crossing route to the left for a gain of 14 to the Bucs' 49. Three plays later, the Bucs faced a third-and-eight and Trask's pass in Miller's direction was out of reach, leading to a punt, which went into the end zone for a touchback.
Shane Buechele's first pass was incomplete and DL Greg Gaines bottled up a second-down run by RB Frank Gore Jr. for a loss of one, but a defensive holding call on Kindle Vildor gave Buffalo a new set of downs. Two plays later, Buechele spun out of trouble and was able to find WR Tyrell Shavers for a first down at the Bills' 35. A pass interference call on S Shilo Sanders put the ball at the Bills' 46, and a screen pass to Gore broke the back out into the open for a 21-yard pickup into Bucs territory. After gaining another first down at the Bucs' 12, and two plays later a swing pass to WR K.J. Hamler got the ball down to the one. A second effort by Gore after he was initially stood up on a first-and-goal run got the ball into the end zone.
A nice tap dance down the left sideline on the ensuing kickoff return by Williams allowed the Bucs to start their next drive at their own 48. A second-down pass to Miller left the Bucs in a third-and-six but Tez Johnson spun away from a defender on a short catch and picked up a first down at the Bills' 39. A sack and a third-down incompletion led to another punt and the Bucs' cover men just missed a shot at keeping it out of the end zone.
The Bills got eight yards on first down with Buechele's pass to RB Elijah Young, but DL Adam Gotsis dropped Young for a loss of two on the next snap. After a Bills timeout, Buechele's quick pass to Young was low and incomplete. WR Kameron Johnson dashed straight upfield on the ensuing punt, getting 22 yards on his return after a 62-yard kick.
A rollout pass to Johnson got the Bucs a quick 16 yards to the midfield stripe as the first quarter came to an end. The home team then faced a third-and-four at the Bills' 44 and Trask got off a pass in a collapsing pocket to WR Trey Palmer for a first down at the 31. A Trask scramble got four yards, and two plays later on third-and-six Tez Johnson once again used his run-after-the-catch speed to turn a short pass into a first down at the Bills' 16. Trask bobbled the snap on the next play and his eventual handoff to Williams had no chance, resulting in a loss of four. Two plays later, Trask hit Kam Johnson near the goal line but S Tre Herndon arrived just in time to knock it out of Johnson's hands. Chase McLaughlin came on to drill a 35-yard field goal for the Bucs' first points.
The Bills got the ball out to their own 35 on the Bucs' first kickoff of the game, and two plays into the drive Buechele found Hamler open down the left sideline for a gain of 30 yards to the Bucs' 34. An apparent takeaway by the Bucs' defense caused by an Elijah Roberts strip-sack was erased by a defensive holding call on CB Bryce Hall, making it first down at the 24. Two plays later, Sanders was flagged for unnecessary roughness and ejected from the game, making it first down at the 11-yard line. On the next play, Shavers made a remarkable one-handed catch in the end zone and, after a replay review, it was ruled a touchdown to make it 14-3 with 6:26 left in the first half.
Williams followed with another great kickoff return, bouncing out to the right sideline and getting free for a 42-yard gain to just short of midfield. Two Owen Wright runs put the Bucs in a third-and-four and Trask found Tez Johnson again for six yards to move the chains. Another quick pass to Johnson gained nine more and Williams followed with runs of five and 11 yards to make it first down at the Buffalo 14. Another nine-yard Williams run brought on the two-minute warning. After the break, Williams stumbled after breaking around right end and was dropped for no gain, but he made a nice cut on third down to take it down to the two for a first down. Buffalo used its last timeout to stop the clock with 1:49 left in the half. After one more Williams run got it down to the one, Tez Johnson ran a speed out to the right and Trask got it to him for the touchdown. Johnson celebrated with an Olympic-worthy running backflip.
The Bills started their next drive started at their own 32 but Roberts pushed them back eight yards with a sack. Buechele kept the march alive on third-and-10 by finding WR Kristian Wilkerson down the left sideline for 24 yards. A Buechele scramble for 12 yards and a 13-yard catch by WR Deon Cain got the Bills into field goal range and after a spike stopped the clock with a second left Tyler Bass hit a 37-yard field goal to make it 17-10 at the half.
Buffalo got the ball first in the second half and Tampa Bay's coverage crow stopped return man Brandon Codrington at the 18. A nine-yard catch by Wilkerson was followed by an illegal motion penalty. A short pass to TE Zach Davidson moved the sticks and two plays later TE Keleki Latu got wide open in the left flat to pick up 29 yards on a catch-and-run. The Bills got one more first down to get into field goal range but had to settle for the three-pointer after OLB Jose Ramirez dropped Buechele for no gain on a third-down scramble. Bass nailed another 37-yarder to put the Bills up by 10.
Kam Johnson got the Bucs immediately into field goal range by returning the next kickoff 57 yards to the Buffalo 39. Bazelak came in to relieve Trask and handed off to Wright for two yards before hitting Kam Johnson on a four-yard curl. A short pass to WR Trey Palmer was low and incomplete, and McLaughlin came on to hit a 50-yard field goal.
The Bills got out to their own 40 on the ensuing kickoff return then got 20 yards on a catch-and-run by Davidson down the left side. Three plays later, the Bills faced a third-and-seven but moved the chains on a short pass that Gore turned into an eight-yard gain. Another third down moments later needed six yards and CB Tre Avery pulled down Wilkerson two yards short of the sticks. The Bills sent out Bass to try a 39-yarder and he snuck it inside the right upright to restore Buffalo's 10-point lead.
The Bucs started at their own 35 on the next drive and Bazelak found TE Devin Culp for a gain of 22 yards on the left sideline. Two plays later, however, Culp caught another pass on a quick screen to the right and fumbled, with Buffalo recovering at its 39.
A five-yard catch by Wilkerson brought the third quarter to a close, and two plays later the Bucs' defense pressured Buechele into an incompletion on third-and-one. The Bills punted and Kam Johnson got five yards on his return to Tampa Bay's 15. The Bucs' drive then went nowhere and ended in a third-down sack and a punt that gave it back to Buffalo with 12:25 left.
Laviska Shenault caught a 13-yard pass to put the ball into Bucs territory, and two Young runs made it third-and-one at the Bucs' 39. LB Deion Jones stood Young up on a third-down carry but the Bills went for it on fourth down and Gore got the ball past the line to gain. Two more Young runs gained a first down at the Bucs' 37, and two plays later Gore spun through a lane over left tackle and got down to the 13 for a first down. A second-down shot into the end zone to Cain glanced off the receiver's fingertips and a short pass to the same receiver on third down came up five yards short. The Bills still had a chance to tack on three more points with a 26-yard field goal by Bass but the veteran kicker pushed it wide to the right.
A second-down pass to TE Tanner Taula left the Bucs in a third-and-one and Bazelak went back to Taula on the next play to move the chains. Two plays later, Bazelak launched one downfield to Kam Johnson on a corner route and dropped it in perfectly just shy of the sideline for a 30-yard gain to the Bills' 32. A sideline pass to Culp gave the Bucs a first down at the 12 and an end zone shot to Kam Johnson was just out of reach. Rookie WR Garrett Greene caught a short pass over the middle and got down to the three, and Bazelak hit Wright for a first down at the one as the two-minute warning arrived. Bazelak's next two passes were incomplete but the third went to Greene on an out and he hauled it in while just tapping two feet inbounds for the score. The Bucs went for two but failed to convert with 1:47 left.
The Bucs elected to kick off with 1:41 left and Buffalo got two first downs to run out the clock.