A Hearts supporter Edinburgh-born Thomson began his career playing for Loanhead Boys Club before joining Hearts Youth Academy, signing a professional contract with the club in July 2003. He was selected for the Lothian Schools XI in 2002 while a pupil at Beeslack High School, along with other Hearts youngsters John Armstrong, David Gray and Andrew Driver.
Hearts
Thomson earned an unexpectedly early debut in March 2005, when a flu epidemic at Tynecastle forced Hearts' head coach John Robertson into naming a plethora of youngsters in his first team squad against Inverness Caledonian Thistle. Thomson started and impressed against the Highland side, and was rewarded with two further first team appearances that season. It was a different story in 2005–06 however, as a wave of new signings and Hearts' impressive form ensured Thomson spent the entire season playing reserve and under-19 football. In search of further playing time, Thomson was reunited with John Robertson, by then Livingston manager, for the 2006–07 season. Under Stephen Frail towards the end of the 2007–08 season Thomson played the final five games of the season. This meant upon Csaba László's arrival he was a part of the first team squad. He went on to start the season at right back in Robbie Neilson's absence and played a squad part for much of the season covering when either Neilson or Lee Wallace were out. He signed a new three-year deal in April 2009. Thomson returned to the first team with a start against local rivals Hibs on 7 November 2009, replacing Craig Thomson in the starting line up and was voted the match sponsors man of the match in a very impressive display. First team appearances remained limited during season 2010–11 and at the start of the 2011–12 season he was loaned out to Dunfermline. During this time he was advised that he would be free to find a new club in January or at the end of the season. On his return he failed to make a further appearance and in March was sent on loan again to Raith Rovers.
Livingston (loan)
In July 2006, Thomson joined Livingston on a season-long loan. He made his debut on 5 August, in a 2–0 win over Queen of the South. In all he made 21 appearances in all competitions.
Dunfermline (loan)
On 7 July 2011, Thomson Joined Dunfermline on a six-month loan deal. He made his debut on the opening day of the season against St Mirren at East End Park and scored his first goal for the club against Kilmarnock on 10 September. He had played every game for the club until Dunfermline played parent club Hearts and he was unable to play due to a gentlemans agreement. Thomson admitted he would be happy to make his loan deal permanent as he was delighted to be playing regular first team football. At the start of November Thomson suffered a groin injury. It had been suspected he had played his last game for the club with his loan deal expiring at the start of January, however he returned from injury in Dunfermline's game against St Johnstone on Christmas Eve. Despite wanting to stay, on 29 December Dunfermline revealed they had not extended his loan spell and he returned to Hearts.
Raith Rovers
On 2 March 2012, Thomson joined Scottish First Division side Raith Rovers on loan until the end of the season. He made his debut the following day, playing the full match in a 5–0 win over Greenock Morton. Thomson moved to Raith on a permanent basis at the end of the season. On 6 April 2014, Thomson captained Raith Rovers as they defeated Rangers 1–0 at Easter Road to win the Scottish Challenge Cup. At the end of the 2017–18 season he left Raith Rovers.
Arbroath
In May 2018, Thomson signed for Scottish League One club Arbroath. In his first season at Arbroath, the club won the League One title, and ahead of the new season in the Scottish Championship, Thomson signed a new contract until the end of the 2020–21 season.