Roberts began his career at Walsall's youth academy before joining Romulus on a work experience loan on 4 December 2012.[3] He was released by Walsall on 7 May 2014.[4] However, Roberts subsequently re-signed for the club on 22 July 2014 as cover for Richard O'Donnell and Craig MacGillivray.[5]
Roberts was immediately sent out on loan to Rushall Olympic.[6] His loan deal with the Pics was terminated early to allow him to join Rainworth Miners Welfare on 9 September 2014.[7] Roberts then joined Conference side Southport on 27 November 2014, alongside teammate Amadou Bakayoko.[8] After failing to make an appearance for Southport, Roberts enjoyed a successful spell with Gresley in the second half of the season after joining on 16 January 2015.[9] Roberts made eighteen appearances for Gresley as they challenged for a play-off place in the Northern Premier League Division One South. He was handed a new one-year contract by Walsall on 5 June 2015.[10]
Roberts returned to Gresley on a three-month loan on 14 August 2015.[11] He was recalled by Walsall in October, joining the matchday squad for the first time as an unused substitute in the Saddlers' victory over Burton on 10 October 2015.[12] Six days later, Roberts joined Rugby on a one-month loan.[13] He made six appearances for the club before returning to Walsall.[14]
Roberts finally made his debut for Walsall on 6 February 2016 in a 3–0 home defeat against Millwall, following injuries to both Neil Etheridge and Craig MacGillivray.[15]
In July 2016, after signing a new one-year contract with Walsall, he joined Chester on a season-long loan.[16] He made 15 appearances in the National League, including a run of six consecutive clean sheets between September and October.[17]
Roberts finally established himself as Walsall's first-choice goalkeeper during the 2017–18 season, making 28 appearances in all competitions and being rewarded with a new two-and-a-half-year contract on 20 February 2018.[18] He signed a new contract in November 2019.[19]
Northampton Town
On 22 June 2021, Roberts signed for Northampton Town for an undisclosed fee.[20] He was named in the PFA League Two Team of the Year after keeping 20 clean sheets throughout the season.[21] At the end of his contract, Roberts was offered a new deal by the club but declined and left as a free agent.[22]
Middlesbrough
On 21 June 2022, Roberts signed for Middlesbrough on a two-year contract.[22] On 18 July 2023, Roberts joined Barnsley on a season-long loan.[23] On 17 May 2024, Middlesbrough announced the player would be leaving in the summer once his contract had expired.[24]
Millwall
On 22 July 2024, Roberts signed for Championship club Millwall, following the unexpected death of Millwall's first team goalkeeper Matija Sarkic.[25]
Career statistics
As of match played 18 May 2022
Appearances and goals by club, season and competition