As a youth MacLeod played for Drumpellier Cricket Club, where he made massive strides under the tutelage of Graham Robertson. Following the advice of Graham he moved to the Scottish National Cricket League Premier Division with Uddingston Cricket Club, as an opening bowler and middle order batsman. He played in the 2006 U-19 Cricket World Cup in Sri Lanka. After making some 70 appearance with Scotland age group sides, he secured a retainer contract with Warwickshire for the 2006 season, to play Under-17s, Under-19s and 2nd XI cricket. Awarded an improved contract for 2007, he ended the season as joint top wicket-taker in the Warwickshire 2nd XI and was voted "Most Improved 2nd XI Player of the Year" by the County side. In November 2007 the 19-year-old MacLeod signed a two-year contract with Warwickshire. He spent winter 2007/8 playing Grade cricket for Penrith in Sydney and returned to Moseley Cricket Club as their contracted County player for 2008 in the Birmingham Premier Cricket League. MacLeod gained his full first-class Scotland cap when he was called up for the Intercontinental Cup match against the UAE in 2007, becoming the youngest Scottish player to debut at this level. During the 2008 Friends Provident series MacLeod played two matches against Durban and Yorkshire and was selected for two One Day International ties against Kenya both of which succumbed to rain. Despite international absences and a stomach injury which reduced his Warwickshire 2nd XI appearances, MacLeod's 2008 season ended with debut matches in the Warwickshire first team, both away from home, against Yorkshire a match abandoned due to rain and Derbyshire in a Pro40 win. In October, with another season still to run on his current deal, MacLeod was offered, and accepted, a new improved two-year contract to run until the end of the 2010 season. In 2014,he along with John Hastings holds the highest 6th wicket partnership in T20 history MacLeod spent the 2016 season playing for Boldon Cricket Club in the North East Premier League. In 2018, he commenced playing for Bexley in the Kent Premier League. In June 2019, he was selected to play for the Toronto Nationals franchise team in the 2019 Global T20 Canada tournament. In July 2019, he was selected to play for the Edinburgh Rocks in the inaugural edition of the Euro T20 Slam cricket tournament. However, the following month the tournament was cancelled.
International career
His first ODI cap came in the historic match against England on 18 August 2008 where batting 9, he scored 10 not out facing 11 balls from Andrew Flintoff and Tim Bresnan before that game, too, fell victim to rain. As early as June 2009, during the World Twenty20, Warwickshire's coaching staff noticed that MacLeod's bowling action may have been problematic. After an Intercontinental Cup match against Canada in July 2010 in which MacLeod took six wickets, the umpires reported to the International Cricket Council that his action needed to be tested. In 2010, MacLeod was one of six cricketers given full-time contracts with Cricket Scotland. MacLeod did not play a single list A match in 2010. MacLeod was released by Warwickshire at the end of the 2010 season. Having left Warwickshire, MacLeod's next list A match was for Scotland in the 2011 Clydesdale Bank 40. The England Cricket Board had launched the competition the previous year and Scotland was included along with the Netherlands and the 18 first-class teams from England and Wales. Scotland won two of their twelve matches that year, had one no result and lost the rest, finishing bottom of their group. MacLeod managed 92 runs from six matches with a highest score of 33. In the 2011 Karp Hong Kong Super Sixes event MacLeod was placed 4th in the Championship Player stats, and 5th in the Batting stats. In March 2012 the UAE hosted the 2012 ICC World Twenty20 Qualifier. During Scotland's win against Oman, MacLeod scored 104 not out from 76 deliveries. With 307 runs from 9 matches he was Scotland's leading run-scorer in the tournament and fifth overall. Though Scotland progressed to the preliminary finals, they lost to the Netherlands in which MacLeod scored 57 from 42 in the match and failed to qualify for the World Twenty20 later that year. MacLeod made 175, the second highest score by an Associate player in an ODI and third highest by an Associate player in List A cricket, in a 170-run romp over Canada to seal a place for Scotland in the Super Sixes and put an end to Canada's consecutive World Cup streak dating back to 2003. MacLeod erased any chance of that happening with 175 off 141 balls in Scotland's total of 341 for 9. On 10 June 2018, Scotland secured the biggest win in their cricketing history with a six-run, first-ever, defeat of England with MacLeod scoring 140 not out with 16 fours and 3 sixes off 94 balls. In August 2019, during the 2019 Scotland Tri-Nation Series in Scotland, MacLeod scored his 2,000th run in ODI cricket. In September 2019, he was named in Scotland's squad for the 2019 ICC T20 World Cup Qualifier tournament in the United Arab Emirates. Ahead of the tournament, the International Cricket Council named him as the key player in Scotland's squad. On 24 October 2019, in the match against Bermuda, MacLeod scored his 1,000th run in T20I cricket.
Bowling action
MacLeod was assisted by Warwickshire and Cricket Scotland to remodel his action. After completing remedial work, followed by analysis and assessment by the ICC, he is now free to bowl in all domestic, national and international competition. During this period MacLeod concentrated on his batting technique to the extent that he now opens the batting for Scotland in T20 matches, plays top-order in 50 over games, while confirming a strong middle-order presence in 3 and 4-day ties.