Josip Pivarić s-a alăturat academiei de tineret a lui GNK Dinamo Zagreb de la o vârstă fragedă. El a fost promovat în prima echipă în primăvara anului 2008. El a fost împrumutat în același an la clubul afiliat NK Lokomotiva Zagreb, jucând 13 meciuri în primul său sezon cu Lokosi. În ianuarie 2009, a semnat un contract pe șapte ani și jumătate cu Dinamo Zagreb, rămânând la Lokomotiva sub formă de împrumut până la sfârșitul sezonului 2011-2012.
În ianuarie 2012, Pivarić a revenit la prima echipă a lui Dinamo. El și-a făcut debutul pentru Dinamo la 25 februarie 2012 într-o victorie scor 0-3 cu NK Karlovac. Primul său gol pentru Modri a venit într-o remiză scor 1-1 cu NK Rijeka la 21 aprilie 2012.
Într-un meci amical cu echipa norvegiană Strømsgodset din ianuarie 2016, Pivarić a suferit o accidentare la ligamentele genunchiului, scoțându-l pe tușă pentru tot restul sezonului 2015-2016 și pierzând convocarea la naționala Croației pentru UEFA Euro 2016.[8] Pivarić a jucat pentru prima dată după accidentare pe 6 iulie 2016, într-o victorie obținută într-un amical jucat înaintea începerii noului sezon, 1-0 cu FC Copenhaga.[9]
Dinamo Kiev
Pe 8 august 2017, Pivarić a semnat un contract pe trei ani cu clubul ucrainean Dinamo Kiev.
În luna mai 2018 a fost numit în lotul lărgit de 32 de jucători al echipei Croației pentru Campionatul Mondial din 2018 din Rusia.[10] De-a lungul turneului Ivan Strinić, titularul Croației din banda stângă a apărării s-a accidentat, fiind suprasolicitat de cele trei meciuri consecutive terminate după prelungiri. Acest lucru i-a permis lui Pivarić să joace pentru Croația în finala Campionatului Mondial din 2018.