Prior to the 2013 season, MLB named him the 12th best prospect in the Rockies system. On November 20, 2013, the Rockies added Herrera to their 40-man roster to protect him from the Rule 5 draft.[2] He spent 2014 with the High–A Modesto Nuts, hitting .244/.302/.335 with four home runs, 23 RBI, and nine stolen bases across 72 contests. A shortstop and occasional third baseman throughout his career, Herrera was switched to the outfield in 2015 while playing his second season in High-A Modesto. In 123 appearances, he slashed .260/.314/.354 with four home runs, 36 RBI, and nine stolen bases. On December 2, 2015, Herrera was non–tendered by the Rockies and became a free agent.[3]
Herrera re–signed with the Rockies organization on December 3, 2015, on a minor league contract. He played in 126 games for the Double–A Hartford Yard Goats in 2016, slashing .292/.374/.379 with five home runs, 66 RBI, and 36 stolen bases. Herrera elected free agency following the season on November 7, 2016.[4]
On November 8, 2016, Herrera re–signed with the Rockies on a new minor league contract. In 2017, Herrera played in 103 games for the Triple–A Albuquerque Isotopes, batting .278/.351/.394 with 3 home runs, 27 RBI, and 20 stolen bases. He elected free agency following the season on November 6, 2017.[5]
Cincinnati Reds
On November 17, 2017, Herrera signed a minor league contract with the Cincinnati Reds.[6] The Reds promoted him to the major leagues for the first time on April 26, 2018.[7] In 11 games for Cincinnati, Herrera went 2–for–13 (.154). Herrera was designated for assignment following the acquisition of Curt Casali on June 1.[8]
Kansas City Royals
Herrera was claimed off waivers by the Kansas City Royals on June 2, 2018.[9] On June 22, Herrera would have his most important game thus far, robbing a go-ahead home run from Alex Bregman in the bottom of the 8th, and hitting a go-ahead RBI triple to eventually win the game for the Royals. On July 28, Herrera hit his first career home run against David Robertson of the New York Yankees.
Miami Marlins
On January 2, 2019, Herrera was claimed off waivers by the Miami Marlins.[10] In 63 games for the Marlins, he batted .200/.288/.314 with two home runs, 11 RBI, and four stolen bases. Herrera was designated for assignment by the Marlins on June 19. He cleared waivers and was sent outright to the Triple–A New Orleans Baby Cakes on June 22.[11] In 48 games for New Orleans, Herrera slashed .309/.367/.479 with five home runs and 24 RBI. He elected free agency following the season on November 4.[12]
New York Yankees
On January 3, 2020, Herrera signed a minor league contract with the New York Yankees.[13] Herrera did not play in a game in 2020 due to the cancellation of the minor league season because of the COVID-19 pandemic.[14] He became a free agent on November 2.[15]
Wei Chuan Dragons
On December 26, 2020, Herrera signed with the Wei Chuan Dragons of the Chinese Professional Baseball League.[16] On March 14, 2021, Herrera made his CPBL debut as the Opening Day first baseman against the Uni-President 7-Eleven Lions. He batted .284/.365/.395 with six home runs and 37 RBI in 87 games. On October 24, 2021, Herrera agreed to part ways with the Dragons following the season and become a free agent.[17]