He began his professional career with SV Sandhausen of the 3. Liga, winning the title in 2012 and again on loan to Karlsruher SC a year later. After one 2. Bundesliga season with Sandhausen, he joined 1. FC Nürnberg in 2014 on a free transfer, and almost immediately suffered a six-month knee injury. After losing the play-off for promotion to the Bundesliga against Eintracht Frankfurt in 2016, he joined that team, where he was a DFB-Pokal runner-up in 2017 and winner a year later.
He made his professional debut for Sandhausen on 23 March 2010 in the 3. Liga, as a 59th-minute substitute for Daniel Jungwirth in a 3–0 loss away to VfB Stuttgart II, totalling eight games (three starts) in his first season.[2] The following season he was a regular, playing 30 of 38 games, starting all but four.[2]
In 2011–12, Blum's time was split between the field and the bench as Sandhausen were promoted as champions. He scored three goals for them, the first on 19 November in a 2–0 home win over SC Preußen Münster, eight minutes after coming on for Roberto Pinto.[2]
On 5 June 2012, Blum was loaned back into the third tier, joining relegated Karlsruher SC for the season.[3] He was again a league champion despite playing rarely,[1] and scored his one goal on 15 December in a 3–1 home win against VfB Stuttgart II as a late substitute.[2]
In 2013–14, Blum competed with Sandhausen in the 2. Bundesliga, with the team having stayed up due to MSV Duisburg's administrative relegation.[1] He played 19 games in the second tier and scored four goals, the first to open a 2–0 home win over FSV Frankfurt on 3 November.[2]
1. FC Nürnberg
On 23 May 2014, Blum joined fellow 2. Bundesliga team 1. FC Nürnberg on a free transfer.[4] In pre-season, he suffered knee cartilage damage that ruled him out for six months, and was given a 50% chance by his doctor of playing professionally again.[1]
He finally made his FCN debut on 15 February 2016, replacing Peniel Mlapa for the final 12 minutes of a 2–0 win over 1. FC Union Berlin at home. A week later, again from the bench, he scored his first goal to give the lead in a 3–1 win at Fortuna Düsseldorf, eventually totalling three in 12 games (four starts).[2]
In 2015–16, Nürnberg came third and played a play-off against Eintracht Frankfurt for promotion to the Bundesliga, with Blum a late substitute in both legs of the 2–1 aggregate defeat.[2]
Eintracht Frankfurt
On 30 June 2016, Blum's contract ended and he joined Frankfurt on a free transfer. He signed a one-year deal with the option of two more.[5]
In his first league season with Frankfurt, Blum played rarely. His only goal came in the last minute of the season, to achieve a 2–2 home draw with RB Leipzig.[8]
In 2017–18, Blum played only 36 minutes over the whole season,[2] but still scored two goals, one in the second round of the cup in a 4–0 win at 1. FC Schweinfurt 05 on 24 October.[9] Frankfurt won the trophy on 19 May, defeating Bayern Munich 3–1 in the final, but Blum was not in the matchday squad.[10]
On 27 August 2018, Blum moved abroad for the first time in his career, joining Segunda División side UD Las Palmas on a season-long loan deal.[11] Around the turn of the year, he suffered an injury in his left soleus muscle and was ruled out for six to eight weeks, recuperating back at Frankfurt.[12] He played 24 total matches during his time in the Canary Islands, and scored the only goal of a home win against Córdoba CF on 12 May 2019.[13]
VfL Bochum
On 21 May 2019, Blum signed a two-year contract with 2. Bundesliga club VfL Bochum.[14] He scored a penalty on his debut on 28 July, a 3–1 loss at SSV Jahn Regensburg.[15] On 1 March 2020, he scored a hat-trick in a 4–4 draw against former club Sandhausen, with two in the first eight minutes.[16]
APOEL
On 27 July 2022, Blum signed a two-year contract with APOEL in Cyprus.[17]