Born in Glasgow, Graham made his senior début for Greenock Morton on 29 April 2006, at Station Park, Forfar against Forfar Athletic. He replaced that season, in order to come into contention for the first team, Allan Moore ordered him and Kevin Kelbie to lose weight. After leaving Morton at the end of the 2010–11 season, he signed for Raith Rovers in May 2011. He scored 11 goals in his first season at Stark's Park, two behind top scorer John Baird. Graham went on to 28 times in his second season at the club as they finished 6th in the First Division. Graham was unveiled as a Dundee United player before the SPL club's last game of the 2012–13 season against Celtic at Tannadice, signing a two-year deal as Jon Daly made an exit. Graham was mainly used as a substitute in his first season, with 23 of his 36 appearances coming from the bench. He scored his first goal for the club in a 4–1 win over Partick Thistle, and went on to finish the season with seven goals in total. In August 2014, Graham was loaned to St Johnstone for the rest of the 2014–15 season. He scored the winning goal on his St Johnstone debut on 30 August 2014 in a 1–0 win away to Motherwell, in the 86th minute, having come on as a substitute. On 20 December 2014, Graham scored from the penalty spot to give St Johnstone a 1–0 win over Inverness Caledonian Thistle, with the penalty being awarded after he appeared to be fouled by Inverness goalkeeper Dean Brill; however, in the days following the match, he was offered a two-match suspension by the Scottish Football Association's compliance officer after it had been alleged he had dived to win the penalty. St Johnstone accepted the two-match suspension. In April 2015, Dundee United announced Graham would be released when his contract expires at the end of the season. It was announced by Ross County in May 2015 that Graham would be joining the club on a two-year contract. He scored 11 goals in his first season at the club and started the 2016 Scottish League Cup Final victory over Hibernian, which gave County their first ever piece of silverware. Graham began the 2016–17 season in fine form, scoring in all four of Ross County's group stage matches in the reformatted League Cup. He scored the winner in a 1–0 win against Montrose, followed by a 75th-minute penalty against his former club, Raith Rovers to rescue a 1–1 draw the following week. He also netted in a 3–2 to Alloa, and despite scoring a hat-trick as County thrashed Cove Rangers 7–0 on 30 July, it proved to be not enough as the club finished third in their group and thus failed to qualify for the knockout round. A 3–1 defeat to Dundee on the opening day of the Scottish Premiership season proved to be Graham's last match for Ross County as he was released by the club on 19 August 2016, despite having a year left on his contract. He signed for Hibernian the next day on a free transfer, although County later received a fee as Hibs gained promotion to the Premiership. Graham signed for EFL League Two club Cheltenham Town in August 2017. Graham rejoined Ross County on 2 August 2018 after leaving Cheltenham at the end of the 2017-18 season.
Partick Thistle
Graham signed for Scottish Championship club Partick Thistle on a 2 and a half year deal. Graham scored on his debut in a 2-1 defeat away to Arbroath.