Kadri also had an assist, Philipp Grubauer had 21 saves and Andre Burakovsky scored for the Avalanche.
''It's a nice character win for us,'' Kadri said. ''We stayed patient and really bore down in the last part of the game.''
Colorado swept a two-game set for the first time this season.
''Playing in these tight games is a benefit for us because if we skate and play our game there's not many teams that can beat us,'' Grubauer said.
The Avalanche scored 15 goals over its previous two home games, including seven in Tuesday's win against San Jose, but offense was hard to come by Thursday. The Avalanche had just 18 shots on goal through two periods and also hit the post a few times.
''I didn't sense any frustration from our guys after the first two periods,'' Colorado coach Jared Bednar said. ''The message was simple: just stick with it and let's not pass up on any of our shots.''
Devan Dubnyk had 35 saves for San Jose, which finished 3-5 on its eight-game trip to open the season.
Colorado played most of the game with only 11 forwards after fourth-line center Pierre-Edouard Bellemare suffered a left leg injury when Ryan Donato skid into him late in the first period. Bellemare went to the locker room and didn't return.
The Avalanche then lost defenseman Devon Toews early in the third period when he took a puck to the skate and limped off the ice. He returned later in the period and took a penalty.
Soon after Toews went to the locker room, Colorado broke the tie. Kadri put an initial shot on net, and after a couple of saves by Dubnyk and a scrum in front of the net, Kadri knocked in a loose puck at 9:55.
''I think we had a strong first, second and then third, and next thing you know a scramble out in front, hits off a couple of skates, couple of sticks and ends up on an Avs' player stick,'' San Jose forward Kevin Labanc said. ''I thought we played really good. Sometimes you don't get the right bounces. They got the right bounces tonight.''
Less than two minutes later, Kadri fed Burakovsky as he came down the slot, and Burakovsky redirected it at 11:53. Kadri added a power-play goal, his third of the season, at 18:54.
''I felt good tonight, just disappointed that I gave up the third one on the power play, with PK working so hard all night, but at the end of the day it didn't matter,'' Dubnyk said.
San Jose forward Sasha Chmelevski was slated to make his NHL debut Thursday night but was ruled out before the opening faceoff due to roster issues with the taxi squad. Marcus Sorensen took his place on the fourth line.
''From what I know just the transaction wasn't completed in time,'' Sharks coach Bob Boughner said of the roster issue.
LONG ROAD HOME
San Jose's hasn't been at home in more than a month, and Boughner said that had an impact on Thursday's game.
''We looked like a tired team and we didn't have a lot of gas in the tank in the second half of the game,'' he said, adding ''this is our 34th or 35th day on the road; it looks like a team that's been on the road for 35 days.''
Sharks: Scheduled to play their first home game - in Arizona - against the Vegas Golden Knights on Monday.
Avalanche: At the Wild on Monday for the first of two games in St. Paul.
More AP NHL: https://apnews.com/NHL
Copyright 2021 STATS LLC and Associated Press. Any commercial use or distribution without the express written consent of STATS LLC and Associated Press is strictly prohibited.