Foulds was one of five academy players who signed their first professional contracts at Bury on 18 February 2015.[2] He was first included in a matchday squad on 22 August of that year, as the Shakers drew 3–3 away to Crewe Alexandra in League One.[3] Three days later, he made his debut in a 1–4 loss to Premier League team Leicester City in a League Cup second-round game at Gigg Lane, replacing Chris Hussey at the start of the second half.[4] On 1 September, Foulds made his first start, playing the entirety of a 2–1 win at Accrington Stanley in the first round of the Football League Trophy.[5]
Premier League club Everton agreed a deal to sign Foulds on 19 November 2015 for an undisclosed fee, with the player set to move to Goodison Park at the beginning of the 2016 January transfer window.[6]
After four years with the club, Foulds was released by Everton at the end of his contract.[7]
In September 2020, Foulds spent time on trial with Serie C club Como and on 14 October, he signed a two-year contract with the club.[8] On 5 January 2021, Foulds agreed to terminate his contract by mutual consent.[9] Later that month he signed a short-term contract with hometown club Bradford City, a club he had originally played youth football for.[10][11]
On 12 May 2021 he was one of four players offered a new contract by Bradford City.[12][13] On 15 June 2021, he agreed a one-year contract extension with the club.[14] He was one of seven players offered a new contract by Bradford City at the end of the 2021–22 season.[15] Foulds signed a new two-year deal with the club on 18 May 2022.[16]
In January 2023 he moved on loan to Harrogate Town.[17] In June 2023, he signed permanently for Harrogate for an undisclosed fee.[18]