Butler joined Portsmouth's youth categories in 2004, aged 10, and signed a two-year scholarship with Pompey on 15 July 2010.[2] On 26 June 2012, he signed a one-year professional deal.[3]
On 2 November 2012, Butler joined Havant & Waterlooville on a one-month youth loan deal from Portsmouth.[5][6] He was assigned the number 3 shirt. In the following day, he made his debut for the Hawks in a 1–0 loss to Welling in a Conference South match.[7] He was named the Hawks' player of the month for November.[8] In the following month, he was named again as player of the month.[9] He went on to make eight appearances during his time at Hawks.
Breakthrough
Butler was recalled on 8 January 2013, and was included on first-team squad due to player shortage.[10] On 26 January 2013 he made his senior league debut in a League One match at Fratton Park, against Hartlepool United, starting the match.[11]
Butler finished the season with 17 league appearances, 15 as a starter. On 14 May 2013, he signed a new two-year contract with Pompey, running until June 2015.[12] After struggling to find his old form, Butler signed with Aldershot Town on loan on 31 October.[13] He returned to Portsmouth in December, after suffering a knee injury while on loan at Aldershot.[14]
On 11 March of the following year, after being fully recovered from injury, Butler rejoined Aldershot.[15] He was a first-choice for Pompey in the 2014–15 season, but was still released on 18 May 2015.[16]
On 28 June 2016, Butler joined League Two club Newport County on a two-year contract. He made his debut for Newport on 6 August 2016 against Mansfield Town.[18] He scored his first goal for Newport on 7 January 2017 in the League Two match against Stevenage which Newport lost 3–1.[19] In April 2018, Butler signed a new one-year contract to remain at Newport County.[20]
Butler was part of the Newport squad that completed the 'Great Escape' with a 2–1 victory at home to Notts County on the final dat of the 2016–17 season, which ensured Newport's survival in League Two.[21][22] In May 2017, Butler was selected as Newport County Player of the Year[23] and for the second successive season in May 2018.[24] He was part of the team that reached the League Two playoff final at Wembley Stadium on 25 May 2019. Newport lost to Tranmere Rovers, 1-0 after a goal in the 119th minute.[25]
During his time at the club, Butler was awarded the English Football League (EFL) player in the community two seasons in a row, due to his outstanding work in the local community with the disabled and with young people suffering mental health issues.[26]
Peterborough United
On 30 May 2019, it was announced that Butler had signed for EFL League One club Peterborough United on a 3-year deal and would join the club in July.[27]