Maja played youth football with Crystal Palace, Fulham and Manchester City and began his professional career with Sunderland, making 49 appearances and scoring 18 goals. In January 2019, he joined Bordeaux of France's Ligue 1. He later had loan spells at Fulham and Stoke City in 2021 and 2022, playing in the Premier League with the former. After one season in Ligue 2, his Bordeaux contract expired in 2023 and he joined West Bromwich Albion.
Maja was not offered a scholarship by Manchester City and in March 2015, Fulham reached an agreement with Sunderland for him to sign a two-year scholarship.[7] In May 2016, he signed his first professional contract with the club, penning a three-year deal.[5]
On 21 September 2016, Maja made his professional debut in a 2–1 victory at Queens Park Rangers in the third round of the EFL Cup, replacing Joel Asoro as a substitute for the final 21 minutes.[8] He did not play again that season but did appear on the bench during their Premier League campaign, which ended in relegation.[9]
Maja made his league debut on 16 December 2017, when he came on for James Vaughan at the Stadium of Light, going on to score his side's only goal of the match five minutes subsequently; the game resulted in Sunderland's first home win of 2017 and against Fulham, his former team during his youth. Manager Chris Coleman spoke positively of Maja afterwards, stating, "I've been very impressed with Josh. He's different, he gives us a big injection of personality".[10] Maja went on to make 17 appearances in the Championship that season, failing to score anymore following his goal against Fulham,[11] with the club suffering a second consecutive relegation, now to League One.[12]
Relegation proved well personally for Maja, as he broke into the side's starting line-up; he went on to score in all of Sunderland's first four games in August, earning him a nomination for Player of the Month.[13] With his contract due to expire at the end of the season, he was offered a contract extension, though he refused, amid reported interest from multiple clubs.[14] His transfer saga was featured as part of the Netflix documentary Sunderland 'Til I Die.[15] Maja went on to leave the club during the January transfer window, at the time, Maja had scored 16 goals in 30 league appearances.[16]
Bordeaux
On 26 January 2019, Maja signed for French Ligue 1 club Bordeaux on a four-and-a-half-year contract. He made his league debut on 17 February in a 2–1 home Derby de la Garonne win over Toulouse, starting and playing 67 minutes.[17] On 20 April, he scored his first Ligue 1 goal in a 2–1 loss at Nîmes, but suffered a first-half left-knee injury that ended his season after seven games.[18] On 3 December 2020, again against Nîmes, Maja scored his first professional hat-trick and also provided an assist in a 6–0 win.[19][20][21]
Loan to Fulham
On 1 February 2021, transfer deadline day, Maja returned to English football with his former club in his youth, Fulham, now back in the Premier League though in a relegation battle, signing on loan for the remainder of the 2020–21 season.[22] On 14 February, in his first start for the side, he scored both goals in a 2–0 victory at Everton.[23]
Loan to Stoke City
On 31 January 2022, Maja joined Stoke City on loan for the remainder of the 2021–22 season.[24] He made his debut on 5 February 2022, scoring in a 2–0 win against Wigan Athletic in the FA Cup.[25] Maja made 17 appearances, for Stoke, scoring twice as they finished in 14th position.[26]
Return to Bordeaux
In the 2022–23 Ligue 2 season, Maja played all 38 games and scored 16 goals, finishing fourth among top scorers, while Bordeaux finished third, missing out on promotion by one place and three points. He then turned down the option to renew for one year at the club.[27] His goal tally included a hat-trick on 3 September in a 3–1 win away to Paris FC.[28]
West Bromwich Albion
On 1 August 2023, Maja signed for Championship club West Bromwich Albion on a three-year deal.[29] He made his debut 11 days later as a substitute in a 3–2 home win over Swansea City,[30] With fitness and injury issues, he missed two months from September to November, then scored his first goal in a 2–1 loss to Leicester City at The Hawthorns on 2 December.[31]
Maja was injured in the first half of his return to Sunderland on 9 December 2023, suffering ankle ligament breaks and being sidelined for four to five months.[32]