Perez drove a two-out pitch over the left-field wall to put the Royals ahead 4-2. He is hitting .347 with seven home runs and 20 RBIs in his past 21 games.
"Soon as I hit it, I knew the ball was gone," Perez said. "I hit it pretty good."
Verlander (12-11) is 0-3 with three no-decisions in six starts since an Aug. 6 victory at Cleveland.
The Tigers have dropped his past six starts and are 13-17 in his 30 starts this season.
"I think he did a great job," Tigers catcher Brayan Pena said. "The pitch to Perez it was a pitch down. He struck out a lot of guys and he kept the ball down. It was just one pitch that hurt us."
The Royals have won all five games Verlander has started against them this season. Verlander allowed four runs and eight hits in seven innings, while walking one and striking out seven.
"You can say what you want, but Verlander is tough as nails," Royals manager Ned Yost said. "He's as good as they come. And we've done very well against him. They've all been nip-and-tuck, one-run games for the most part, but we've come out on top and that's all that matters."
Wade Davis (7-10), the second of five Kansas City pitchers, picked up the victory on his 28th birthday, entering with the bases loaded and allowing just one runner to score when he walked Miguel Cabrera with the bases loaded after being down in the count 0-2.
"I'm comfortable in that situation, keeping a low heart rate," Davis said. "I've faced him (Cabrera) a lot. I knew what he was trying to do. I wasn't going to give in and give him something to whack off the wall or over it. That was just a walk, but hey it paid off."
Greg Holland worked a perfect ninth for his 39th save in 42 chances.
Cabrera, who leads the American League with 133 RBIs, also singled home another run in the seventh.
Royals left-hander Danny Duffy failed to pitch deep into the game in back-to-back starts. Duffy, who walked four in 3 2/3 innings in his previous start, walked five Tigers in 4 1/3 innings.
"I didn't have my best command, but the stuff was there," Duffy said. "As long as we're shaking hands after the game, that's good with me."
Duffy walked two in the first inning and that led to a run when Price Fielder's single scored Austin Jackson, who led off the game with a four-pitch walk.
"Duffy was a little wild, which we were hoping for, but we just couldn't come up with a big hit," Tigers manager Jim Leyland said.
Duffy allowed a Nick Castellanos infield single in the fifth, and with one out, walked Roman Santiago and Jackson on eight pitches to load the bases. Davis replaced Duffy and walked Cabrera to score Castellanos.
"It took Duffy about five hitters to find his slot," Yost said. "Once he found it, he was pretty good from the second, third and fourth and started to lose it in the fifth. That's when we brought Wade in and man what a great job he did.
"Danny did a great job of keeping us in the game. Your pitch count can get up, but you can't let the game get away from you. Every time Danny has gotten big pitch counts or struggled with command, his stuff is so good, it keeps us in the game."
"That's part of my game -- bunting," Bonifacio said. "I had that in mind soon as Escobar got to third."
Escobar's single in the fifth scored Jarrod Dyson, who walked and stole second.
When Pena threw out Bonifacio stealing second in the first inning, it ended the Tigers streak at 24 without catching a runner attempting to steal. Bonifacio had been perfect in his first 13 stolen attempts in 23 games since joining the Royals.
Royals 2B Chris Getz, who left in the third inning Tuesday with dizziness, has been cleared to play, passing tests to avoid the seven-day concussion DL. ... Royals C Salvador Perez, who was on the concussion list in early August and left the game Thursday woozy after being struck by a foul tip, opted not to change masks. Perez said he didn't feel comfortable with a new one that offered better protection. ... Tigers SS Jose Iglesias missed his second straight game with shin splints.
Copyright by STATS LLC and The Associated Press
KANSAS CITY, MO - SEPTEMBER 7: Miguel Cabrera #24 touches a tag on the jersey of Prince Fielder #28 of the Detroit...