Larsson verruilde in januari 2010 IK Zenith voor IFK Göteborg. Hij debuteerde voor IFK Göteborg in 2012. In het voetbalseizoen 2013 speelde hij 29 competitiewedstrijden, waarin hij vier doelpunten maakte en acht assists gaf. Met IFK Göteborg werd Larsson in 2013 landskampioen.[1]
Voor sc Heerenveen maakte hij zijn competitiedebuut op 23 augustus 2014 in een duel tegen SBV Excelsior. Hij scoorde in die wedstrijd in de 89ste minuut op aangeven van Yanic Wildschut, waarmee hij de eindstand op 2–0 bepaalde. In zijn debuutseizoen bij sc Heerenveen kwam Larsson tot 31 wedstrijden en 8 doelpunten.[2] In zijn hele periode bij de club speelde hij 104 keer en scoorde hij 23 keer.
Op 21 augustus 2017 ondertekende Larsson een contract van 4 jaar bij Feyenoord.[3] Hij debuteerde voor die club op 9 september 2017 tegen Heracles Almelo door in minuut 68 Jean-Paul Boëtius te vervangen. Tevens scoorde hij zijn eerste doelpunt door het laatste doelpunt in een 4–2 winst te scoren (het doel was leeg). Op 13 september debuteerde Larsson in de groepsfase van een Europees toernooi. Zijn invalbeurt tegen Manchester City in de Champions League had kon een 4–0 verlies niet voorkomen. In de bekerwedstrijd tegen VV Gemert op 25 oktober 2017 scoorde de Zweed een hattrick in de met 4–1 gewonnen wedstrijd. In hetzelfde toernooi maakte hij al eerder zijn basisdebuut tegen ADO Den Haag.
Larsson debuteerde in 2013 in het Zweeds voetbalelftal onder 21, waarvoor hij één doelpunt maakte in zes interlands. Daarvóór speelde hij voor Zweden -19. Larsson debuteerde op 15 november 2016 in het Zweeds voetbalelftal, tijdens een met 0–2 gewonnen oefeninterland in en tegen Hongarije. Die wedstrijd maakte hij ook zijn eerste interlanddoelpunt, de 0–1 in de dertigste minuut.