TORONTO (AP) Mookie Betts has circled a few potential cycles in his young career, not surprising considering his rare combination of power and speed.
Boston's AL MVP contender finally knocked that milestone off his list with his final swing Thursday night.
Betts homered in the ninth inning to complete his first career cycle during the Toronto Blue Jays' 8-5 win over the Red Sox.
Betts is the 21st Red Sox player to hit for the cycle and the first in the major leagues this season. He singled and scored in the first inning, tripled in the second and doubled in the fourth against starter Ryan Borucki. After walking in the sixth, Betts hit a one-out drive off Ken Giles in the ninth for his 27th homer of the season.
Betts has come up one leg short of the cycle eight times in his career, including twice needing a home run.
''I've had some opportunities before and to finally succeed is a good feeling,'' said Betts, who has reached base in 25 of his past 42 plate appearances against Toronto.
The 25-year-old Betts is the first Boston player to hit for the cycle since Brock Holt in 2015. Betts, Holt and Leon Culberson in 1943 are the only Red Sox to cycle from the leadoff spot.
The AL MVP candidate was 4 for 4 to raise his major league-best average to .347 with 59 RBIs and a 1.102 OPS. He celebrated his no-doubt homer by lifting a fist and smiling at Boston's dugout.
''You expect greatness with him every night,'' manager Alex Cora said. ''That was cool to see.''
Boston (81-35) lost for the first time in seven games but still has the best record in baseball.
Randal Grichuk hit a tiebreaking two-run homer in the fifth inning and Teoscar Hernandez added a solo shot to help Toronto avoid a three-game sweep.
Red Sox slugger J.D. Martinez hit his major league-leading 35th home run, a solo drive in the fifth.
Boston starter Rick Porcello (14-5) allowed seven runs and six hits in four innings. Porcello lost for the first time since a July 13 home defeat to the Blue Jays, a game in which he allowed a season-worst eight earned runs.
''We've got to take a look at that,'' Cora said. ''That's the second one in a row against them. Breaking balls, fastballs, changeups, they were on him. Location wasn't great, we saw it from the get go, but still. They put some good at-bats against him and that's the second game in a row they've done that.''
The right-hander is 1-2 with a 9.15 ERA in four starts against Toronto this season.
''I don't know what it is about their lineup,'' Porcello said. ''They do a nice job against me. They make me get into the strike zone, they draw some walks, and then they do damage. I've got to figure something out against these guys to overcome that.''
Borucki (2-2) allowed four runs and a career-worst nine hits in five innings but won his second straight start.
''He really battled,'' manager John Gibbons said. ''There aren't a lot of outs in that lineup and they are hot right now.''
Borucki pitched eight shutout innings to beat the Mariners for his first major league win in his previous outing.
TWO FOR TWO
A fan in the left field seats caught two home runs balls, snagging Martinez's drive in the fifth and Grichuk's in the sixth.
HOME RUN DERBY
Porcello has allowed 26 career home runs against Toronto, more than any other opponent. He's surrendered 21 career home runs against Minnesota.
Red Sox: LHP Chris Sale (mild left shoulder inflammation) threw a bullpen session before the game and remains on track to come off the disabled list and start Sunday against Baltimore. ... Boston moved struggling left-hander Drew Pomeranz to the bullpen and will keep LHP Brian Johnson as a starter after Sale's return.
Blue Jays: RHP Aaron Sanchez (right index finger) allowed four runs and five hits in three innings in a rehab start for Toronto's rookie-level Gulf Coast League team. Sanchez walked two and struck out four. ... Toronto promoted LHP Thomas Pannone from Triple-A Buffalo and optioned RHP Mike Hauschild to Triple-A. Pannone served an 80-game performance enhancing drug suspension earlier this season.
Red Sox: RHP Nathan Eovaldi (5-4, 3.38) starts the opener of a weekend series at Baltimore. Eovaldi has not allowed an earned run in either of his first two starts for Boston. RHP Dylan Bundy (7-10, 4.38) starts for the Orioles.
Blue Jays: RHP Marco Estrada (5-8, 4.65) starts the opener of a three-game series against Tampa Bay. Estrada allowed one run in seven innings against Seattle in his previous outing, snapping a four-start winless streak. LHP Blake Snell (12-5, 2.27) starts for the Rays.
More AP baseball: https://apnews.com/tag/MLBbaseball and https://twitter.com/ap-sports