Spurs’ Celin Bizet grabbed the opener against the run of play, but Shaw’s close-range header on the stroke of half-time restored parity.
The Jamaican doubled her advantage from the spot soon after the restart, before completing the scoring late in the second half.
It means the forward has now equalled the record for the most goals scored by a City Women’s player in a single season (24), matching Nikita Parris’ 2018/19 tally.
It wasn’t a free-scoring display from Gareth Taylor’s side, but we dug deep to ensure we extended our unbeaten WSL run to an impressive 12 matches.
What happened
City, sporting a unique kit inspired by Mancunian Emmeline Pankhurst ahead of International Women’s Day, were the team in control from the get-go at the Academy Stadium, creating several clear-cut chances inside the opening 15 minutes.
Shaw flashed a low shot wide of the post from a tight angle after being fed by Alex Greenwood early on, with a teasing ball in from Chloe Kelly scrambled behind by Millie Turner at the vital moment soon after.
Switching flank with Hemp, Kelly continued to be a thorn in Spurs’ side, cutting in on her right foot before curling a vicious effort just wide with Tinja-Riikka Korpela scrambling.
But after soaking up the early onslaught, Rehanne Skinner’s side gradually began to feel their way into proceedings as the half-hour mark approached.
Rosella Ayane was convinced she should’ve had a penalty on 25 minutes when she went down in a tangle with Leila Ouahabi, but referee Abigail Byrne waved away the protests.
But that was soon forgotten, when Bizet ghosted in at the far post and fired into the roof of the net after City had failed to clear a cross in from the left.
Undeterred, Gareth Taylor’s side pressed forward, with Shaw forcing a spectacular save from Korpela after she rose highest from an Alex Greenwood corner.
The Spurs stopper was called into action twice in quick succession soon after, denying Kelly and Shaw with smart reaction saves, but the Jamaican wouldn’t be denied again.
Indeed, the striker headed home on the rebound from close-range for her 22nd goal of the season after Spurs had failed to clear a teasing cross from the left.
And the game would be turned on its head inside 60 seconds of the restart, when Kelly was bundled down by Ash Neville inside the area.
Shaw once again stepped up to do the honours and made no mistake, sending Korpela the wrong way from 12 yards to hand the hosts the advantage.
In an entertaining encounter, the pendulum almost swung back into the visitors’ favour when Ellie Roebuck was forced into a fine reaction save to deny Ayane.
The Moroccan had been sent clean through down the right but her composure evaded her at the crucial moment in what would prove her final act of the game before being substituted.
Not content with a one-goal advantage, City pressed forward in the hope of putting some daylight between the two sides, with Kelly’s inviting ball across the face of goal falling agonisingly out of Shaw’s reach with 10 to play.
But number three would follow, with the Jamaican volleying home at the second time of asking after beating a Spurs defender to Hemp’s near-post cross.
Player of the Match: Khadija ‘Bunny’ Shaw
Just seven days after grabbing four goals against Bristol City, Bunny Shaw’s incredible scoring run continued at the Academy Stadium.
A constant menace, she now has 24 goals from just 21 appearances this season, while her league tally stands at 13 in 14 matches.
How we lined up
Ellie Roebuck started between the sticks, shielded by a back four of Laia Aleixandri, Steph Houghton, Alex Greenwood and Leila Ouahabi.
Yui Hasegawa started at the base of the midfield, with Filippa Angeldahl and Laura Coombs given licence to get forward and support the attack.
At the sharp end, Chloe Kelly and Lauren Hemp started on the flanks with Khadija ‘Bunny’ Shaw at centre-forward.
City XI: Roebuck, Aleixandri, Houghton (C) (Morgan 84’), Greenwood, Ouahabi (Stokes 88’), Hasegawa, Angeldahl, Coombs (Castellanos 84’), Kelly, Shaw (Fowler 88’), Hemp (Blakstad 84’)
Subs: MacIver, Casparij, Dahou
Spurs XI: Korpela, Turner, Bartrip, Harrop, Karczewska (Gunning Williams 90+2’), Bizet, James, Iwabuchi, Ayane (Graham 61’), Spence, Neville
Subs: Cho, Ale, Ubogagu, Spencer, Houghton
What it means
With neither Chelsea or Arsenal in league action until Wednesday due to the Continental Cup final, victory moves City up to second in the table.
We sit one point above Emma Hayes’ side and six above the fourth-placed Gunners, although both have two games in hand on Gareth Taylor’s side.
Up next
City face Brighton in our next encounter on Sunday 12 March.
Kick-off is set for 14:00 (UK) at the Broadfield Stadium.
News about Man City v Spurs
Shaw proud of gutsy City display
Khadija 'Bunny' Shaw was pleased with how City 'ground out' an important 3-1 Barclays Women's Super League win over Tottenham Hotspur. Watch more
City 3-1 Spurs: WSL Highlights
Watch the best of the action as City moved to second in the Barclays Women’s Super League table with victory over Tottenham at the Academy Stadium. Watch more
Taylor reflects on City progress after Spurs win
Gareth Taylor has praised the culture that his players have created this season following another important Barclays Women’s Super League triumph. Read more
Taylor reaches City century
Gareth Taylor celebrated his 100th match as Manchester City boss in our 3-1 WSL triumph over Tottenham Hotspur. Read more
City v Spurs: WSL full-match replay
Watch every kick from City’s Barclays Women’s Super League meeting with Spurs at the Academy Stadium. Watch more