Born in Sutton-in-Ashfield, Nottinghamshire, Parkes started his career at Leicester City where he is a product of their youth academy. Parkes' first involvement with Leicester's first team came when he was named as an unused substitute as Leicester beat Swansea City 2–1 at the Walkers Stadium in the third round of the FA Cup.
On 22 January 2010 Parkes joined Burton Albion on a one-month loan deal to help ease their injury crisis, making his debut the following day, playing the full 90 minutes of Burton's 2–3 come back win away at Torquay United. On 30 January Parkes agreed to extend his loan at Burton until the end of the 2009–10 season.
On 24 March 2011, Parkes joined Burton Albion on loan for a second time until the end of the 2010/11 season.
Third loan to Burton Albion
Parkes joined Burton Albion on a sixth month loan deal at the start of the 2011–12 season. However this came to a premature end after only three league games after Parkes suffered a broken ankle. He made his return by being named on the bench on 14 January 2012 in a match against Plymouth Argyle.
Following the end of his loan at Burton Albion, Parkes was an unused substitute for Leicester's 2–0 victory over Swindon Town in the fourth round of the FA Cup. A few days later, Parkes joined up with fellow Leicester loanee Cian Bolger, at Bristol Rovers on an initial month-long loan deal. Parkes made his debut against Morecambe on 11 February, re-uniting his academy defensive partnership with Bolger. On 21 April, he was sent off for a dangerous two footed challenge on Port Vale's Chris Shuker; opposition manager Micky Adams defended Parkes, saying that in his experience "the boy is not that type of player".
Bristol Rovers
Tom Parkes joined Bristol Rovers for an undisclosed fee on 20 August 2012. He made his debut on 21 August 2012 in a 1–1 draw against Barnet, playing the full 90 minutes. On 18 September 2012, he scored his first goal for in a Rovers shirt in away match against west country rivals Plymouth Argyle. On 20 November 2012, he suffered a fractured ankle in a 4–0 loss away at Port Vale at Vale Park and returned to action on 1 December 2012 in the 2–0 loss to Wycombe. When John Ward was appointed manager in December 2012, Tom was awarded the captain's armband and has gone from strength to strength, picking up npower League 2Player of the Month in February 2013. In September 2013, Parkes agreed a contract extension at Rovers to keep him at the club until 2016. That season would end in disappointment for Parks and Rovers as the club were relegated out of the Football Leaguefor the first time since their election in 1920. Parkes remained with Rovers for their first campaign in the Conference Premier as Darrell Clarke guided the side to a second place finish in the league, missing out on automatic promotion by just one point. They would however go on to seal promotion at Wembley Stadium, beating Grimsby Town in the 2015 Conference Premier play-off Final. Parkes made 51 appearances in all competitions during the season, the most of any player at the club, and was named Bristol Rovers' player of the year at the end of the campaign. The 2015–16 season saw Parkes struggle to hold down a regular place in the side as Mark McChrystal and Tom Lockyer were generally favoured in the centre back positions. Rovers went on to secure back-to-back promotions to League One following a 92nd minute winning goal from Lee Brown. Parkes, along with the rest of Rovers' senior players, was offered a new deal at the club. He elected to bring his time at Rovers to an end though, deciding to join Leyton Orient
Carlisle United
He was offered a new contract by Carlisle at the end of the 2018–19 season.
Exeter City
On 27 May 2019, Parkes joined Exeter City. In August 2019 he received a three-match ban for violent conduct. He scored his first goal for the club in the 4-0 derby demolition of local rivals Plymouth Argyle.