Miller joined the Bury youth set-up in April 2014. He made his League One debut for the Shakers in February 2016, coming on as a 60th-minute substitute for Reece Brown in a 3–0 defeat to Barnsley at Oakwell.
He had a brief loan at Witton Albion, making two appearances and scoring one goal for the club. On 29 October 2016, he scored his first goal for Bury in a 3–2 defeat against Northampton Town.
In July 2017, Miller signed a three-year contract with EFL Championship club Middlesbrough for a six figure sum.
On 5 December 2017, he signed for Wrexham on a month-long loan