*Club domestic league appearances and goals, correct as of 00:15, 2 November 2024 (UTC) ‡ National team caps and goals, correct as of 01:27, 22 November 2023 (UTC)
On 15 August 2015, Charles opened his 2015–16 campaign by scoring both goals in a 2–2 draw against Gainsborough Trinity.[10] In September, he received a call-up for the England C contingency squad.[11] On 23 January 2016, Charles registered his 10th league goal of the season, in a 3–2 home defeat against Worcester City.[12]
Fleetwood Town
In September 2015, Charles had signed a two-year contract with AFC Fylde.[11] However, in July 2016, Charles joined League One side Fleetwood Town on a two-year deal.[13] Charles' former club AFC Fylde criticised Fleetwood Town, believing he was still contracted to them.[14][15] However, The Football Association stated they had not received the contract's paperwork from AFC Fylde, which meant that Fleetwood were able to sign him on a free transfer.[15] Fylde chairman David Haythornthwaite branded the situation "unethical", and began a legal challenge to receive compensation for the player.[16] Following an arbitration hearing in June 2017, it was established that Fleetwood were liable to pay compensation to Fylde based on FIFA's Article 17.[17] However, Fleetwood challenged this ruling, alleging the arbitrator breached his statutory duties by failing to disclose emails with the FA during the arbitration process. The challenge succeeded, and the case was referred back for further arbitration.[17]
On 18 March 2017, Charles joined National League North side FC Halifax Town on loan until the end of the 2016–17 campaign.[19] On the same day, he made his debut in their 1–0 home defeat against Gloucester City, featuring for 63 minutes before being replaced by Adam Morgan.[20] A week later, he scored his first goal in their 3–0 away victory over FC United of Manchester, netting the opener in the 10th minute.[21] On 22 July, Charles rejoined Halifax Town on a six-month loan.[22] He featured twelve times before returning to Fleetwood in January 2018.
Southport
On 12 January 2018, Charles joined National League North side Southport for an undisclosed fee.[23]
Accrington Stanley
On 12 August 2019 Charles joined Accrington Stanley on a two-year deal for an undisclosed fee.[24] He made his debut for the League One team five days later, as a 76th-minute substitute for Courtney Baker-Richardson in a 1–1 draw at AFC Wimbledon.[25] Three days later he made another substitute appearance against Shrewsbury Town, scoring his first goal for the club but failing to prevent a 3–2 home loss.[26] He totalled nine goals in 40 games over all competitions, including the penalty equaliser in a 3–3 draw with ten men at Bristol Rovers on 7 September,[27] and a strike in a 7–1 home win over Bolton Wanderers on 23 November, in which he assisted another goal and won a penalty.[28]
In 2020–21, Charles was League One's joint fifth top scorer with 19 goals, as Stanley came 11th.[29] This included a hat-trick on 2 February 2021 in a 6–1 home win over Bristol Rovers.[30]
However, in the 2021–22 season Charles was limited to just six league appearances for Stanley after his refusal to sign a new contract with the club led to a dispute with manager John Coleman.[31][32]
Bolton Wanderers
On 1 January 2022, Charles joined fellow League One side Bolton Wanderers on a three-and-a-half-year deal for an undisclosed fee reported to be £320,000.[33] It was the first time since Wanderers signed Charles' international teammate Josh Magennis in 2018 that the club had paid a transfer fee for a player.[34] On 11 February 2023, in Bolton's 5000th league game, he scored a hat-trick in a 5-0 win against Peterborough United.[35] On 2 April, he started in the 2023 EFL Trophy Final. He scored the second goal, with the Final against Plymouth Argyle eventually ending with a 4–0 Bolton win.[36] He scored 21 goals during the 2022–23 season, which was the most for a Bolton player in one season in 22 years.[37] On 28 August 2023, he signed a new contract until 2026.[38]