Salvador Perez and Kendrys Morales also drove in runs for the Royals as the defending World Series champions have won 15 of 18 to pull within four games of the second AL wild card spot.
"We’ve been playing great baseball as of late, but we definitely know we’re a long way from where we want to be," Royals right fielder Lorenzo Cain said. "We have to continue hopefully winning series — that’s our main goal."
Kansas City starter Edinson Volquez (10-10) pitched five innings and allowed two runs, both unearned, and three hits.
The Royals’ bullpen, which has been a successful formula for the reigning two-time AL pennant winners, pitched four scoreless innings to push their franchise-record scoreless streak to 38 2-3 innings — the best in the majors since 2002-03 when San Francisco tossed 39 1-3 straight.
"They’ve just been spectacular," Yost said.
Kelvin Herrera pitched a flawless ninth for his ninth save in 11 chances.
Tom Koehler (9-9) allowed four runs, three earned, and seven hits in six innings for the Marlins.
"It was an interesting game," Koehler said. "You’ve got to give them credit. They capitalized on our mistakes we made tonight."
Kansas City went 4 for 28 with runners in scoring position and scored six runs during the three-game series, but left Miami with two victories.
"We don’t care what we do as long as we win," Yost said. "As long as we score more runs than they do and it’s a combination of pitching, great defense, and timely hitting and that’s been our recipe for a while now."
The Marlins also struggled hitting with runners in scoring position during the series going 3 for 26 and leaving 24 men on base including 11 on Thursday.
"We had a few chances, we didn’t have a ton, but we had a few chances but weren’t able to scratch," Marlins manager Don Mattingly said.
The Royals opened the scoring in the third on an RBI double by Perez after the Marlins elected to intentionally walk Eric Hosmer with first base open. Cheslor Cuthbert scored on Perez’s ground ball down the left-field line.
Escobar extended the Royals’ lead to 2-0 on a home run to center field in the fourth. It was his third of the season and second of the month.
"I was looking for a fastball on that pitch," Escobar said. "(Koehler) threw me a first-pitch cutter and the next pitch was a fastball and I swung the bat and hit the ball really good."
Third baseman Cuthbert had two doubles to go with two errors, one of which led to the Marlins’ two runs coming in the fourth to tie the game at 2.
Escobar’s tiebreaking RBI double off Koehler in the sixth gave the Royals the lead. Morales’ pinch-hit sacrifice fly put the Royals on top 4-2.
The Marlins threatened in the sixth loading the bases with two outs, but lefty Matt Strahm entered the game and got Dee Gordon to ground out to escape the jam.
"The bullpen was phenomenal and Strahm probably gets the gold star," Yost said.
The Royals pushed their lead to 5-2 in the ninth as Raul Mondesi walked, stole two bases, and scored on catcher J.T. Realmuto’s throwing error trying to get Mondesi at third on his stolen base attempt.
"A club like that over there that’s got guys that can hit balls out of the ballpark, a three-run lead is much better than a two-run lead," Yost said.
Both teams combined for six errors.
DYSON WEB GEM
Royals center fielder Jarrod Dyson made one of the best catches ever at Marlins Park when he robbed Christian Yelich of a home run in the first inning.
"That was probably the best play that anybody’s made for me in my entire career," Volquez said.
Yelich said: "It was a great play. It’s a huge ball park. We play in the worst hitters’ park in baseball so you better get it. I didn’t get enough of it and he made a great play. You’ve got to hit it to get it out of here. It’s a terrible hitters’ park."
Dyson ran to make a leaping left-handed grab up against the wall in center field.
"Actually off the bat I thought I was burnt and I had no shot, but as I kept running and got closer I was like, `Yeah I got a chance,’" Dyson said.
Many of Dyson’s teammates gave him the Royals’ customary tip of the cap for an impressive defensive play on his way back to the dugout.
"It felt great," Dyson said. "I think that’s the first one I’ve ever robbed in my career so it was a pretty special moment for me."
It was the first home run robbed at Marlins Park since it opened in 2012.
"That’s history right there and I love being a part of history," Dyson said.
Royals: C Salvador Perez took a foul ball off his face mask in the eighth and was replaced by Drew Butera in the ninth as a precaution. "He got a little light-headed so we just got him out," Yost said.
Marlins: RF Giancarlo Stanton (groin strain) is hopeful he can return to the team at some point during the regular season to help the Marlins’ after sustaining the injury on Aug. 13. "Anything could help so whatever I can do to be back, if it’s possible, is going to happen," Stanton said.
Royals: RHP Ian Kennedy (8-9, 3.58) will start Friday’s game at Boston against RHP Steven Wright (13-5, 3.01) in a three-game series with the Red Sox. Kennedy has recorded five straight starts of at least six innings and one-or-fewer runs matching Larry Gura for the longest such streak in franchise history. Kennedy is 2-0 with a 0.79 ERA during the stretch.
Marlins: RHP David Phelps (7-6, 2.28) will take the mound Friday to begin a three-game series against San Diego, which will start former Marlins RHP Jarred Cosart (0-1, 4.54). Phelps is 2-1 with a 1.31 ERA over his last four starts since moving into the rotation.