Nato il 1° gennaio 1995 nella città iraniana di Gonbad-e Kāvūs, nella provincia del Golestan, che si trova al centro del Paese asiatico, Azmoun ha iniziato a giocare a calcio in tenera età, militando dapprima con il club cittadino dell'Oghab Gonbad, poi con lo Shamoushak Gorgan e quindi con l'Etka Gorgan.
La svolta arriva all'età di 15 anni, quando si trasferisce al Sepahan, che nella stagione 2011/12 lo manda in campo in qualche amichevole. Azmoun è pronto a spiccare il volo: nel 2012 si trasferisce in forza ai russi del Rubin Kazan, che inizialmente lo aggregano alla squadra giovanile.
L'anno seguente, a 18 anni, è promosso in Prima squadra e inizia l'avventura da calciatore professionista: attaccante mobile e tecnico, è dotato di velocità e fiuto del goal, qualità che inizia da subito a far valere nel calcio russo e nelle Coppe europee.
Milita in totale 3 anni nel Rubin Kazan, dal 2013 al gennaio 2015 e poi dal 2017 al febbraio 2019, totalizzando 17 goal e 14 assist in 77 presenze complessive. In mezzo due anni e mezzo al Rostov, prima in prestito poi a titolo definitivo, con 25 goal e 6 assist in 77 gare e l'esordio in Champions League il 26 luglio 2016.
Dopo il ritorno al Rubin Kazana parametro zero, nel febbraio 2019 passa allo Zenit San Pietroburgo, collezionando 104 presenze, 62 goal e 23 assist, e vincendo praticamente tutto nel calcio russo: 3 Scudetti, una Coppa di Russia e una Supercoppa.
A livello personale conquista il titolo di capocannoniere del Campionato russo nel 2019/20 (17 i goal realizzati) e nel 2020/21 è votato come miglior giocatore del torneo. In Nazionale maggiore inizia il suo percorso a 19 anni il 26 maggio 2014 nell'amichevole di Podgorica pareggiata 0-0 con il Montenegro.
Per le sue qualità si ritaglia il soprannome in patria di 'Messi iraniano'. Con l'Iran partecipa ai deludenti Mondiali di Russia 2018, al termine dei quali annuncia un prematuro ritiro dalla Nazionale, poi rientrato l'anno seguente. Ha conquistato la Coppa d'Asia 2023 e la finale vinta 1-0 con l'Uzbekistan è anche al momento l'ultima delle sue 71 gare in Nazionale, condite da 45 reti.
A livello di club, invece, le ultime esperienze lo hanno visto vestire la divisa del Bayer Leverkusen in Bundesliga per un anno e mezzo (44 presenze e 5 goal), prima di trasferirsi a fine agosto 2023 alla Roma in prestito e di debuttare in Serie A il 17 settembre nei minuti finali del successo per 7-0 sull'Empoli, festeggiando il primo goal in giallorosso nel 2-1 contro il Lecce.