Born in Kettering, Northamptonshire, Graham started his career with Northampton Town in their youth system. He was loaned to Billericay Town from November 2003 to February 2004, making nine appearances and scoring one goal in the Isthmian League Premier Division. He was offered a professional contract with Northampton in May 2004. Graham joined Southern League Premier Division side Aylesbury United on a one-month loan on 22 December 2004 and he completed this period successfully, making five appearances and scoring one goal. He joined Conference North side Kettering Town on loan in February 2005 and made 15 appearances, including playing in a 3–2 defeat after extra time against Altrincham in the play-off Final. He signed a new contract with Northampton in August 2005 and joined Conference National team Forest Green Rovers on loan for the 2005–06 season, where he made 30 appearances. Graham was released by Northampton on 10 May 2006 and later that month agreed to rejoin Kettering permanently. He finished the 2006–07 season with 51 appearances and two goals, as Kettering reached the Conference North play-off semi-final. Graham was a member of the side that won the Conference North title the following season, in which he made 35 appearances and scored one goal. He agreed a new contract with the club in May 2008. After struggling to make the breakthrough into the first team he was sent to Conference North side King's Lynn on a one-month loan on 21 October 2008, which was extended for the rest of the 2008–09 season in November. Conference Premier club Mansfield Town signed Graham on 19 May 2009 but after he lost his place in the team was sent to divisional rivals York City on a one-month loan on 5 November. The loan was extended for a second month on 9 December 2009 and he made the move permanent on 6 January 2010 after Mansfield agreed to give him a free transfer, signing until the end of the 2009–10 season. He played for York in the play-offs where they eventually lost to Oxford United in the 2010 Conference Premier play-off Final at Wembley Stadium. Although he was offered a new two-year contract at York he moved back to Kettering on a two-year contract on 4 June 2010 with the option of a one-year extension, as it was closer to his home. On 31 January 2011, the day of the transfer deadline, Graham signed on loan for Luton Town for the rest of the 2010–11 season, with a view to a permanent move. He scored the winning goal on his full debut for the club, a 1–0 victory over Gloucester City, that put Luton into the quarter-final of the FA Trophy. Graham re-signed for Forest Green on a two-year contract for an undisclosed fee on 30 July 2011. He made 29 appearances for Forest Green in the 2011–12 season. Graham and Forest Green agreed to part ways midway through Graham's two-year deal and he joined Hereford United on 20 June 2012. After establishing himself as a vital part of the team, Graham signed a new one-year contract as a player/coach with Hereford on 11 June 2013. Graham turned down a new deal with Hereford to sign for Conference Premier club Alfreton Town on a two-year contract on 2 July 2014. He wanted to combine playing part-time football with a career as a PE teacher, after completing a degree in sports journalism. On 2 October 2018, Graham returned to Kettering Town as a player-coach. On 25 September 2019, Graham was named joint caretaker manager for the club together with former Kettering player Steven Kinniburgh. The duo was replaced on 25 October 2019.