The Panthers used a 29-8 stretch over 12 minutes of the second half to turn a 50-34 deficit into a 63-58 lead and held on for the upset.
North Carolina misses injured guard Marcus Paige. If the top-ranked Tar Heels didn't fully realize that before, they do now after being upset on the road by Northern Iowa.
Northern Iowa also got 19 points from Matt Bohannon and 14 points from Paul Jesperson.
This is the Panthers' second win over a No. 1 team. Northern Iowa famously knocked off Kansas in the NCAA tournament round of 32 in 2010.
Justin Jackson had 25 points for the Tar Heels (3-1), who scheduled a trip to Cedar Falls so senior Marcus Paige could play in his home state.
Paige didn't play because of a broken bone in his right hand. The Tar Heels could have used him, as Paige's replacement, Joel Berry, had just five points on 2-of-7 shooting and the Tar Heels committed 12 turnovers.
The Panthers (2-1) also beat the Tar Heels in the paint, 24-22, after Kennedy Meeks scored the first eight points for UNC.