Silkeborg Early years Madsen discovered football on a vacation in Sweden at age 4, and shortly afterwards began playing for Gl. Rye IF in his hometown, where the team was coached by his father. At the age of 13, Madsen joined
Silkeborg, the major team in the area. He was admitted to the Talent Team of Silkeborg and after graduating from elementary school, he joined Silkeborg Football College.
First team In October 2016, Madsen signed his first professional contract with the club; a four-year deal. Alongside the new contract, he was promoted to the first-team squad in the summer 2017, and become a full-time professional. On 10 October 2016, Madsen made his debut for
Silkeborg at the age of 18. Madsen started on the bench and replaced
Sammy Skytte in the 87th minute in a 1–1 draw against
Lyngby. He made his first start in 0–5 defeat against
AaB in the
Danish Cup on 2 March 2017. Madsen made three appearances during the 2017–18 season. However, he suffered relegation with Silkeborg at the end of the season after play-offs against
Esbjerg fB. In March 2019, he scored his first goal for Silkeborg and his first goal in the second-tier
1st Division in a 4–2 win over
HB Køge. In the 2018–19 season, he made 28 appearances in the 1st Division, in which he scored one goal. As winners of the second tier, Madsen and Silkeborg were able to accomplish promotion back to the
Danish Superliga. In February 2020, Madsen was appointed
team captain of Silkeborg at the age of 22.
LASK On 29 June 2020,
Austrian Bundesliga club
LASK announced his signing on a four-year contract until 2024. He made his debut on 29 August in the first round of the
Austrian Cup in a 0–3 win over ASV Siegendorf. His debut in the Austrian Bundesliga came less than a month later, on 19 September in a 1–1 away draw against
WSG Swarovski Tirol where he came on as a second-half substitute for
James Holland. The following month, Madsen made his first start for the club in the cup match against
SV Wörgl. The match ended in a 3–0 win for LASK, and Madsen played the full game. On 26 November, Madsen made his first European appearance in the group stage of the
2020–21 UEFA Europa League, playing as a starter in the 0–2 home loss to
Royal Antwerp. He would also score his first goal for LASK in Europe, helping secure a 3–1 away win over
Ludogorets on 10 December. LASK finished third in the group, and were knocked out of European contention. He finished the first half of the season with 15 appearances for the club and one goal, and played convincingly in all three competitions. He got his debut for the club on 14 August 2021 against
Mladá Boleslav.
AGF On 1 July 2022, Madsen returned to his homeland, as he signed a deal until the end of 2026 with
Danish Superliga club
AGF. After a great start to the 2024-25 season with goals and assists, Madsen was named player of the month in the
Danish Superliga in August.
Copenhagen On 1 September 2025,
Danish Superliga club
F.C. Copenhagen signed Madsen on the last day of the fall transfer window. Madsen joins the defending double-winning club with the team sitting in first place in the Superliga and preparing to start league play in the
2025-26 UEFA Champions League ==International career==