Contreras signed with the Chicago Cubs as an international free agent in 2009. He made his professional debut with the Dominican Summer League Cubs that year. He batted .205 in 29 games at age 17. In 2010 he batted .313 in 17 games at age 18 with them. In 2011 and 2012 he played with the Boise Hawks . Contreras spent 2013 with the Kane County Cougars , 2014 with the Daytona Cubs and 2015 with the Tennessee Smokies .   He was named the Cubs Minor League Player of the Year in 2015 after batting .333/.413/.478 with eight home runs .   During his Minor League career, he played the positions of catcher, first base, second base, third base, left field, and right field.  The Cubs added him to their 40-man roster after the season. 
He was promoted to the Cubs major league team on June 17, 2016, playing catcher.  On June 19, he hit a two run home run on the first pitch of his first major-league at-bat after two pick-off attempts by the pitcher to first base, becoming the 30th player in the modern MLB era to do so.  In his fifth game, he replaced Anthony Rizzo at the first base position,  and started in left field in his eighth game.