João Pedro returned to Serie A on 30 August 2014, signing for Cagliari for around €1 million and exchange with Matías Cabrera. The team suffered relegation in his first season, but he scored 13 times in 38 games as they won the 2015–16 Serie B, including a hat-trick in a 6–0 home win over Brescia on 16 April. In August 2017, João Pedro signed a new contract to last until 2021. The following 16 May, he was given a six-month ban after testing positive for banned diuretic hydrochlorothiazide following a match against Sassuolo in February. João Pedro signed a new contract in November 2018, to last until 2022. On 21 December 2019 he scored in a 2–1 loss at Udinese to reach 50 for the Sardinians, seventh in their all-time scorers.