Jason Kipnis delivered three RBIs, and Michael Bourn added three runs as the Indians claimed a 4-3 victory in front of 22,997 at Marlins Park.
A night after collecting 16 hits, matching their season most in a nine-inning game, the Marlins were limited to six hits, with two coming in their last at-bat.
As frustrating as it was not to convert, the Marlins were still in position to collect a sixth walk-off win of the season, despite not playing one of their cleaner games.
"The team is going to battle every inning," said Miami starter Jacob Turner, who tossed six innings in a no-decision. "That's exciting, whether we win or lose. Everybody knows we're going out there and battling as hard as we can."
The Marlins committed a throwing error that accounted for a run, had two wild pitches, walked four and allowed the Indians to swipe six bases.
"We did some good things on the bases," Indians manager Terry Francona said. "And it's a good thing we did, because they kept pushing. Every game is different. We've tried to just run when it's in our favor, and tonight our guys did a very good job."
Additionally, manager Mike Redmond trotted out to argue two calls that did not go his club's way.
"Busy night out there," Redmond said. "A few close calls, and I don't know one way or the other whether those were actually safe or out, but a lot of close plays there that didn't go our way.
"Could have kept us from going down a couple of runs, but we also gave away a couple of runs, too. We had a throwing error that cost us a run. We had a pickoff that we didn't execute. It was not one of our better games. We had some chances, another chance there in the ninth. Anything but a ground ball to first there, we score a run. But that's the way it is."
Despite playing catchup for most of the night, Miami made it interesting off Chris Perez in the ninth. Trailing, 4-2, Logan Morrison doubled to open the inning, and he scored on Dobbs' single to right.
Adeiny Hechavarria's sacrifice bunt was handled by Mike Aviles, who considered throwing to second but instead held onto the ball. It was ruled a sacrifice bunt, fielder's choice, and Miami had two on and no outs. Jake Marisnick's sacrifice bunt put runners on second and third with one out.
Rob Brantly, who made a throwing error in the third inning that led to an Indians run, came up with the Indians' infield in at the corners and deep in the middle. Brantly bounced a grounder to first for the second out.
The game ended on Placido Polanco's liner to left-center that was run down by Bourn, who had a big night.
"The one person I didn't want to see come in to hit was Polanco," Bourn said. "I've seen him enough with the Phillies. That dude, he knows how to put the bat on the ball. That's going to happen. You know that's going to happen. So you're just hoping it's at somebody, and I was able to make the catch."
The Marlins were riding high, coming off a 10-0 win behind Jose Fernandez's 14 strikeouts on Friday night. But they still have yet to win as many as four straight this year.
Once again, the starting pitching was encouraging.
Turner worked out of a few jams, but he was still able to log a third straight quality start. In six innings, the right-hander gave up two runs on six hits, walking two and striking out six.
"I felt like I threw the ball well," Turner said. "I went back and looked at the pitches; there were a lot of close pitches. But there were a lot of walks and a couple of 3-0 counts I came back from, but overall, I just battled."
After the Marlins tied it at 2 with two runs in the sixth inning, the Indians reclaimed the lead on Kipnis' two-run single in the seventh inning off Dan Jennings, who took the loss.
Drew Stubbs got the rally started with a pinch-hit single, and he stole second. Bourn walked, and a double-steal advanced both into scoring position. A close play at third on Stubbs' steal prompted Redmond to argue.
Another dispute came on Kipnis' single to center. Stubbs scored easily, and on a close play at the plate, Bourn was called safe, again bringing Redmond out to argue. Replays showed Bourn just beat the swipe tag of Brantly.
Pitchers named Zach, or Zack, have given the Marlins trouble this week. On Tuesday night, Mets right-hander Zack Wheeler had a no-hit bid broken up after 6 1/3 innings by Ed Lucas.
Cleveland's Zach McAllister kept Miami hitless through five innings before Brantly opened the sixth with a ground ball single to center.
The Marlins parlayed the leadoff single into a comeback inning. Two batters later, Christian Yelich ripped an RBI double to left-center, and Lucas' single to left made it 2-2.
"Offensively, we started out slow," Redmond said. "We make the most of our hits. We didn't get many of them. We had four until the ninth."