Beltran was a homer short of hitting for the cycle, with a run-scoring triple, double and single as the Cardinals bounced back from Thursday night's loss to the Cubs that snapped a five-game winning streak.
Kelly allowed three hits and a run in 5 1-3 innings, striking out four and walking two. Edward Mujica pitched the ninth for his 26th save in 27 opportunities.
St. Louis jumped on Cubs starter Carlos Villaneuva (2-5) for two runs in the top of the first inning. Matt Carpenter singled and scored on Beltran's triple, followed by Allen Craig's RBI single.
The Cubs cut St. Louis' lead to 2-1 in the third. Luis Valbuena walked, went to second when Starlin Castro was hit by a pitch, Anthony Rizzo hit into a fielder's choice that pushed Valbuena to third and then Alfonso Soriano's single scored Valbuena.
The Cubs threatened in the sixth with runners at first and second with just one out, but Brian Bogusevic hit into an inning-ending double-play.
The Cardinals increased their lead to 3-1 in the seventh. Pinch-hitter Rob Johnson, batting for reliever Randy Choate, hit a two-out triple to right field, just out of reach of a diving Nate Schierholtz, and Matt Carpenter followed with an RBI double to left-center.
Castro closed the score to 3-2 with a lead-off homer in the eighth, but the Cubs would get no closer, stranding seven runners in the game.
The Cubs are 12-8 in their last 20 games, and are 3-5 vs. St. Louis thus far this season. They faced the best team in baseball for the second straight week. Last weekend, they took two-of-three from the Pittsburgh Pirates, who had the major leagues' best mark at the time.
NOTES: Cardinals LF Matt Holliday was held out Friday with right hamstring tightness and is day-to-day. . In addition to signing first round draft pick Kris Bryant, the Cubs also inked 12th round RHP Trevor Clifton and 19th round C Will Remillard. . Saturday's pitchers will be the Cards' Lance Lynn (11-3, 3.67) vs. Matt Garza (5-1, 3.22) for the Cubs. Garza has been the subject of trade rumors in recent days. ''He's obviously throwing extremely well and he's very healthy and there are teams out there looking for pitching who are going to call and try to acquire him,'' Cubs president Theo Epstein said before Friday's game. ''He's helping us win games right now, there's a chance to possibly retain him beyond this year, so we'll just balance all that out and do what's best for the organization.'' . The Cubs have used 42 players thus far this season, a pre-All-Star break team record. . The Cubs came into Friday's game leading the National League with 293 extra-base hits. . Attendance was 37,322.
Link to box score: St. Louis 3 at Chicago 2
Link to game discussion at The Cardinal Nation message board
Carlos Beltran on Joe Kelly's pitching.