Vllaznia Balaj joined his hometown club
Vllaznia as an 11-year-old in 2002, and his father had told the youth team coach Astrit Premçi to initially test the player as a goalkeeper as he was tall for his age. However, after only a few training sessions with Balaj, the coach Premçi realised the player was an able outfield player as he was good with his feet, so he then played him as a centre forward. He was invited to train with the first team by the coach
Mirel Josa during the latter stages of the 2007–08 season, and he made his first team debut on 17 May 2008 at the age of 17 years, 4 months and 6 days in an away game against
Besëlidhja, coming on as a 70th-minute substitute for
Albert Kaçi in the 4–2 loss. He became a first team regular the following season, and he scored his first senior goal on his first appearances of the campaign in an
Albanian Cup tie against
Sopoti, before going on to make 12 appearances in all competition, 7 of which were in the league and 10 of which were substitute appearances. He was part of the Vllaznia team that finished runners-up in the
Kategoria Superiore, finishing 4 points behind the eventual winners
Tirana. With the departures of
Xhevahir Sukaj and
James Boadu ahead of the 2009–10 season, Balaj became the club's main striker alongside
Vioresin Sinani. He made his European debut on 2 July 2009 against Irish club
Sligo Rovers, coming on as an 85th-minute substitute for Vioresin Sinani in the 2–1 away win. In April 2010 he went on trial with
PSG alongside fellow Albanian youth international
Odise Roshi, but neither players' trial was successful. In June, he went on another trial, this time in Turkey with
Gençlerbirliği and he was immediately offered a contract to join the club.
Gençlerbirliği A top Turkish club had been tracking the young forward for most of the 2009–2010 season whilst he was at Vllaznia; the club was not identified in January 2010 as they did not make a bid, however following the huge interest shown by
Gençlerbirliği S.K. in May and June, it became clear who the unnamed Turkish club was. Balaj signed a four-year contract with Gençlerbirliği on 17 June 2010. Balaj's manager Dritan Gjyrezi had only been a licensed FIFA agent for a year before managing this deal; this was his first deal in his career as an agent and he hoped to be able to send more Albanian players to Turkey. Balaj signed the contract earning him
€150,000 for the first year, making the deal to be worth around
€600,000 for the full four years.
KF Tirana In January Balaj received offers from both
Tirana and his former club Vllaznia for a return to Albania. But after meeting with
Refik Halili he signed a two-year contract for Tirana on 20 January 2011, earning €70,000 a season, which was a higher offer than Vllaznia's €50,000. He made his debut for his new club on 3 February in a home match against
Skënderbeu which ended in 0–0 draw, with Balaj coming on at the start of the second half for
Gilman Lika. His first Tirana goal came in the
Albanian Cup semi final second leg against
Besa on 6 April, scoring the equalising goal to secure his side's place in the final. He then went on to score his first league goal just nine days later in a 6–1 thrashing of
Elbasani. Despite good performances since his January move, new coach
Mišo Krstičević did not pick him to start in the final of the Albanian Cup. Balaj came on for Gilman Lika in the 54th minute and helped his side win the trophy despite ending the game with ten men and Balaj himself missing a penalty in the shootout which ended 4–3 after heroics from the keeper
Ilion Lika. He scored the winning goal in the
2011 Albanian Supercup against the league winners Skënderbeu, in a match delayed and disrupted by crowd trouble. His first league goal of the season came on 17 September in the second week of the campaign, away at
Kastrioti. Starting the game as a lone striker, he equalised for Tirana in the 48th minute and helped his side win the game 3–2, earning their first three points of the campaign. Following Tirana's first win in the league, it had become evident that Balaj and
Gilman Lika had formed an effective partnership from midfield to attack, both of whom are from
Shkodër. His next goal came just four days later in the first round of the
Albanian Cup against
Himara of the
Kategoria e Parë. He scored in the 36th minute, a penalty in the 52nd minute and finally rounded off his hattrick in the 67th minute, before
Julián Rubio being forced to replace the player following a strong challenge which left him with an ankle injury. After scoring four goals in as many days he hoped he could one day force his way into the
Albania national team, which he said would be a dream following a good start to the season.
Sparta Prague Balaj joined
Sparta Prague on trial in July 2012 in order for the manager
Vítězslav Lavička to get a closer look at the player before the deal to join the club was finalised. Lavička started with Balaj in a friendly against
Vlašim on 17 July. Balaj started the game brightly, getting close to scoring with a header in the 5th minute, and eventually scoring in the 19th minute with a powerful shot on goal from just outside the 18-yard box to put Sparta Prague 3–0 up. He was substituted at half time and the game was won by Sparta Prague 5–0. After the friendly he returned to Albania to sort out his contract with KF Tirana, who did not want him to leave unless they received a fee of €100,000, with Sparta Prague only offering half that sum because Bala's deal with KF Tirana was due to expire in January 2013. On 4 October 2012, Balaj scored an historical goal in his career at
UEFA Europa League against
Athletic Bilbao, a match valid for group stage finished in the victory 3–1.
Loan to Jagiellonia On 8 July 2013 he moved on loan for a year to Polish side
Jagiellonia Białystok in the
Ekstraklasa. He scored his 3rd goal on 9 August 2013 against
Wisła Kraków in the 90'+3 to give his team the 1–1 draw. Balaj scored twice against
Ruch Chorzów on 15 September 2013 and Jagiellonia won 6–0 with Balaj scoring two last goals to send in 5 number of goals scored in the season. Balaj scored his 5th goal on 4 November 2013 against
Piast Gliwice to open the score in the 56th minute but it wasn't enough as Jagiellonia got overturned 2–1.
Return to Slavia Prague After being returned to Sparta Prague from Jagiellonia where he was loaned for a year, he signed for the city's rivals
SK Slavia Prague on 10 July 2014. He made it his debut on 26 July 2014 in the opening
2014–15 season's match against
Slovácko, also his debut brought his first goal as well, as he scored the victory goal 1–2, where the match result came from behind 1–0 of the first half. On 11 August 2014 Balaj scored the opening goal in the 17th minute of the match victory 4–1 against
Slovan Liberec. On 1 November 2014 Balaj came in as a substitute in the 84th minute and scored in the 87' the goal of advantage to bring his team the 3–2 victory against
Příbram.
HNK Rijeka On 7 January 2015 Balaj signed a -year contract (with a 2-year extension option) with
HNK Rijeka, the runners-up in the
Croatian First Football League. On 11 February 2015 Balaj made his competitive début in Rijeka's 4–1 win against
NK Lokomotiva in the
first leg of the Croatian Cup quarter-final, also scoring his first goal for the club. Balaj made his league début also scoring a goal. He also scored in the
Adriatic derby between Rijeka and
Hajduk Split on 18 February 2015, which Rijeka won 3–0. Balaj scored his second goal in the second league game in a row and third including both championships against
RNK Split in the 56th minute of the match, to give his team the 1–1 draw. During the season, Balaj scored 9 goals in 15 appearances, helping Rijeka to finished as runners-up and secure a place in the
2015–16 UEFA Europa League - Second qualifying round. Balaj also features in three
2014–15 Croatian Cup matches and scored one goal. Balaj started a new season with Rijeka retaining his starting place on 10 July 2015 in a goalless draw against
Inter Zaprešić, but got substituted off for
Roman Bezjak in the 58th minute. A few days later Balaj made his European debut for Rijeka playing the full 90-minutes in the
2015–16 UEFA Europa League Second qualifying round first-leg match against
Aberdeen. Balaj scored his first goal of the season in his second league appearance, against
Slaven Belupo Koprivnica in a 3–3 draw. During the
2015–16 season, with 9 league goals to his account, he was one of
top 10 goalscorers in the league. Balaj also scored once in the
Croatian Cup.
Akhmat Grozny On 8 June 2016, Balaj completed a move to
Russian Football Premier League side
Terek Grozny for €550,000, signing a three-year contract with the option of another year. He was presented on the same day, where he was handed squad number 18. Balaj was considered a high-quality reinforcement and played an important role in Terek Grozny’s strong start to the season, and was described also as a physically strong forward who contributed both offensively and defensively, fitting well into Terek Grozny’s playing style. It took him four matches to open his scoring account as he netted the first in the 3–1 away win versus
Ufa on 20 August. This was followed by another one eight days later in the 2–1 turnaround win against
Rostov. However those two goals were to open the floodgates of the strikers scoring in Russia, as he managed to score two consecutive braces in the matches against
Ural and
Zenit Saint Petersburg, leading the team to the win against the latter. For his performances Balaj was named Terek Grozny Player of the Month for October. Starting from April's month Balaj became a bench player despite being an important player for the team playing 22 first matches as a starter. On 21 May 2017 Balaj came in as a 73rd-minute substitute during the final league match against
Krylia Sovetov Samara and after 3 minutes he scored the 3rd team goal in a match finished in the 3–1 victory, although the club ultimately finished fifth and narrowly missed qualifying for the
UEFA Europa League by one point. Balaj started the 2017–18 season by providing an assist for the 1–0 winning goal against
FC Amkar Perm on 16 July 2017 scored by
Léo Jabá. On 27 May 2019, Akhmat confirmed that Balaj left the club as a free agent upon the expiration of his contract.
Sturm Graz On 26 July 2019, he signed a contract with Austrian club
Sturm Graz for the term of 2 years with a 1-year extension option.
Nizhny Novgorod On 21 July 2021, he returned to
Russian Premier League and joined
FC Nizhny Novgorod. On 16 January 2022, his contract with Nizhny Novgorod was terminated by mutual consent.
Boluspor On 30 January 2022, Balaj returned to Turkey and signed with
Boluspor.
Vllaznia return On 18 January 2023, Vllaznia announced to have signed Balaj on a three-year contract, with the striker returning to his hometown club after thirteen years. Vllaznia reportedly beat the competition of Tirana and
Partizani, who were also interested in signing the player. He was presented on the same day and reportedly became the highest paid player of the Kategoria Superiore, earning €12,000 a month. In December 2025, Balaj was awarded the "Ballon D'or Albania" as the best footballer in Albania for that year. ==International career==