Gonzaga had few answers for Portland's strong shooting.
Bryce Pressley had 16 points and nine assists and the scrappy Pilots beat the 22nd-ranked Bulldogs 82-73 on Thursday night, snapping a 20-game losing streak in the series between the two teams.
The loss also snapped Gonzaga's 22-game winning streak in West Coast Conference games.
"Portland was way hungrier tonight and played a lot more assertively than we did," Gonzaga coach Mark Few said.
The last time Portland (10-7, 2-3) beat Gonzaga at home was in 1996 and the Pilots' last victory in the series came in 2003 in Spokane. Portland had not defeated a ranked opponent since 2009 against then-No. 22 Minnesota.
Gonzaga (14-3, 4-1) had won four straight to open the conference season after a 72-62 loss to Kansas State on Dec. 21. Playing in their first league game away from home, the Bulldogs were coming off an 86-54 victory over Pacific last Saturday. The Zags won their first four conference games by an average margin of victory of 21.5 points, and they'd held their last six opponents to fewer than 62 points.
However, the Pilots (10-7, 2-3) were determined from the start, stretching their lead to 17 points in the second half.
"They were flying around and beating us to pretty much every ball that was available," Few said. "They played with way more energy and way more passion, which is what we'd been doing the first four league games. Portland did a good job of bringing it tonight."
Back-to-back jumpers from Riley Barker and Bryce Pressley put the tenacious Pilots up 49-37 with 15:26 left. Portland pushed the lead to 53-37 on Kevin Bailey's falling-down jumper and a free throw — and Gonzaga appeared to be pressing.
All this after the Bulldogs had pulled to 39-35 early in the second half.
"We got it to four early in the (second) half and then I think they scored on six or seven straight possessions after that," Few said. "We were doing some good things there and then our offense kind of dried up and our defense wasn't capable of getting consecutive stops.
"People are going to be aggressive against us, especially at home. We just never got our feet set it seemed like all night defensively."
The Pilots never trailed in the game and shot 51.9 percent (27 of 52) from the field, including 8 of 14 from 3-point range.
"We played zone and we'd get three or four stops in a row and then we'd give up eight points in three possessions." Few said. "We'd go back to man-to-man and we'd play a little decent man and then, boom, we'd give up six or eight points in three possessions."
Gerard Coleman's layup and two free throws narrowed it to 76-65 for the Bulldogs before Drew Barham's layup made it 78-71 with 1:05. However, Portland held off the Zags as time wound down and Portland's purple-clad fans rushed the court in celebration.
"I'm glad we beat them when they're pretty good," Pilots coach Eric Reveno said. "They're maybe not as dominant as the No. 1 seed they were last year, but they're a good basketball team. It would have soured it for me if they weren't a good basketball team. I do enjoy beating a good basketball team, darn straight."
Alec Wintering had 14 points for the Pilots and Bailey added 13.
Sam Dower led Gonzaga with 14 points off the bench.
The Pilots were coming off a 72-63 loss to St. Mary's. The game against Gonzaga wrapped up a five-game conference homestand for the Pilots.
Portland is now 7-54 all-time against ranked opponents. Earlier this season the Pilots fell 82-67 at then-No. 1 Michigan State.
Portland jumped out to an early 11-5 lead, paced by Bailey with six points, but Kevin Pangos hit a 3-pointer and Angel Nunez dunked to narrow it for the Zags.