On 1 February 2016, he signed for Udinese in a €4 million deal. In his first half-season with Udinese, Balić made the bench on 15 occasions, but failed to make a first team appearance. The next season was much the same for Balić, sitting on the bench 28 times without making an appearance before making his senior team debut on 7 May 2017 in a 1–1 draw with Atalanta Bergamo at the Stadio Friuli, playing the first 60 minutes before being replaced by Sven Kums. He would go on to appear in the three following matches and score his first goal for Udinese in a 5–2 loss to Inter Milan at the San Siro. Balić made just one appearance in the first 11 rounds of the 2017–18 Serie A season, but following the appointment of Massimo Oddo, he became more prevalent in the first eleven once more.