Rangers Early years Macleod began his career with youth club Newmains Hammers, playing a year above his age-group, before joining
Livingston. Macleod made his professional debut in a
Scottish Challenge Cup first round match versus
Brechin City on 29 July 2012. Macleod went on to hold down a regular starting place in the team and signed a five-year contract extension on 13 September 2012. He scored his first goal for the club in a 4–1 victory over
Montrose on 23 September, Macleod continued his starting run and good form through to January 2013, scoring in home and away matches versus
Elgin City. A knee injury suffered against Montrose on 26 January kept him sidelined until the final game of the 2012–13 season against
Berwick Rangers. Macleod made 29 appearances and scored three goals during Rangers' 2012–13 Third Division title-winning season. Macleod won the Rangers Young Player of the Year award.
2013–2014 Macleod began the
2013–14 Scottish League One season in good form, hitting four goals in a seven-game spell, the most notable being an
overhead kick in a 2–0 victory over
Ayr United on 6 October 2013. He held down a regular starting place, In March 2014, manager Ally McCoist allayed fears that Macleod's career could be under threat. In his absence, Rangers won the Scottish League One title to seal a place in the
Scottish Championship for the
2014–15 season, with Macleod receiving a winners' medal. He began the 2014–15 season in good form, scoring four goals in his first four appearances of the season and four goals in 9 matches from September through to November 2014. A match-winning
bicycle kick versus Livingston on 4 October was voted Rangers' Goal of the Season and he won the October 2014 Scottish League
Young Player of the Month award. After suffering a serious hamstring injury during a 3–2 defeat to
Alloa Athletic on 3 December 2014, it was reported that Macleod would be out until 2015, but the Alloa match turned out to be his final appearance in a Rangers shirt. The fee was later reported by
The Sunday Post to be £850,000, with add-ons raising the amount to up to £1.3 million. Having failed to recover from the hamstring injury suffered in his last match while a Rangers player, Macleod's recovery suffered a setback when he tweaked the hamstring again in training. He finally made his first appearance in a Brentford shirt with 45 minutes in a
Development Squad defeat to
Nottingham Forest on 28 March 2015, but two weeks later, manager
Mark Warburton ruled Macleod out of first team contention for the rest of the
2014–15 season. In an apparent U-turn, Macleod won his maiden first team call-up for Brentford's
playoff semi-final first leg versus
Middlesbrough on 8 May. Macleod's rehabilitation away from the first team squad saw him miss the entire
2015–16 pre-season. He returned to the Development Squad in October 2015 and made seven appearances either side of a recurrence of his hamstring injury in mid-November 2015. He finally made his first team debut versus
Brighton & Hove Albion on 5 February 2016, when he replaced
Josh McEachran after 82 minutes of the 3–0 defeat.
2016–2019 After returning to fitness for the
2016–17 pre-season, Macleod made his first competitive start for the club on the opening day of the regular season, playing 82 minutes of a 2–1 defeat to
Huddersfield Town, before being replaced by
Philipp Hofmann. In December 2016, he signed a one-year contract extension, which would keep him at
Griffin Park until the end of the
2018–19 season. After recovering from the knee injury and then suffering a hamstring problem in October 2017, Macleod made his first appearance for over 13 months as a second-half substitute for
Sergi Canós in a 3–1 victory over West London rivals Fulham on 2 December 2017. He finished the 2017–18 season with 11 appearances and one goal. After returning to fitness, Macleod's reluctance to sign a new contract meant that he made just one further appearance before the end of the season. Macleod departed Brentford when his contract expired at the end of the 2018–19 season and he finished his career at Griffin Park with 43 appearances and four goals.
Wigan Athletic On 12 July 2019, Macleod signed a one-year contract with Championship club
Wigan Athletic on a
free transfer. He was largely out of favour during the
2019–20 season and made just 12 appearances before his contract expired.
Plymouth Argyle On 17 August 2020, Macleod signed a one-year contract with newly promoted
League One club
Plymouth Argyle on a free transfer. During a
2020–21 season affected by a torn medial knee ligament, he made 17 appearances and was released when his contract expired.
Free agency and retirement In September 2021, it was reported that Macleod had undergone surgery during the 2021 off-season on the medial knee ligament problem which blighted his spell with Plymouth Argyle. Expecting to miss the entire 2021–22 season, he focused on working towards his
coaching badges. In September 2022, Macleod announced that he had retired from football and was still in rehabilitation for his knee injury. ==International career==