Royals left-hander Cole Ragans had his runless streak end at 26 innings.
Toronto right-hander Jose Berrios (10-10) allowed two runs, five hits and two walks with seven strikeouts in seven innings.
Ragans gave up two runs when he threw three consecutive wild pitches in the sixth. In 5 2/3 innings, he allowed just one hit but walked a season-high six. He struck out six.
Berrios allowed a two-out single and a walk in the first inning before retiring 13 in a row.
The Royals had their first base runner since the first when Kyle Isbel led off the sixth with a triple to the right field corner. Maikel Garcia followed with a walk. Garcia was out trying to steal second, and then Bobby Witt Jr. hit an RBI double. Witt stole third and scored on Salvador Perez's groundout to shortstop.
Ragans allowed two walks in the second, a single in the third and a walk in the fourth. He retired eight in a row before walking Vladimir Guerrero Jr. and Davis Schneider with two out in the bottom of the sixth.
On the first of his wild pitches, Ragans slipped and fell on the mound. After his third one and then a walk to Alejandro Kirk, Ragans was replaced by Taylor Clarke.
Kiermaier hit his eighth home run of the season on a shot to right against Clarke (2-5) with two out in the seventh.
Kirk singled with one out in the bottom of the eighth against Collin Snider. Pinch runner Daulton Varsho took third on Whit Merrifield's single. Jackson Kowar replaced Snider, and a run scored on Santiago Espinal's bunt single. Cavan Biggio added an RBI single.
Toronto closer Jordan Romano worked around a single, a double and a walk to load the bases in the ninth to earn his 34th save.
—Field Level Media