Dan Biggar hit the post with a last-gasp touchline conversion as Saints were beaten 17-15 in torrid conditions at Bath.
Tom Collins sprinted in for a late score that looked set to help his side salvage a share of the spoils, but Biggar could not make the difficult kick as Bath celebrated a scrappy win.
Saints had taken the lead during the first half as Cobus Reinach finished off an untidy move.
But Reinach went from hero to villain as his pass was intercepted by Freddie Burns, who sprinted home from his own 22 to score.
The scores were level at 7-7 at the break, with Saints' lineout and scrum stuttering badly.
And Bath looked like they had done enough to win it thanks to five more points from the boot of Burns and a try from Joe Cokanasiga.
Biggar's penalty and Collins' score gave Saints late hope of a draw, but that was extinguished when the conversion attempt hit the right post with the final kick of the game.
Saints had spent the opening couple of minutes of the match on the front foot but the pressure was released by some brilliance from Bath wing Semesa Rokoduguni, who sidestepped, cleared and chased superbly to give his team a platform for an attack.
Bath soon won a penalty at the scrum, but fly-half Burns fired it wide to keep the game scoreless.
And despite the fact their lineout was creaking in wet and windy conditions, Saints went on to take the lead, launching an attack through Piers Francis and finishing it via Reinach.
Reinach used his speed to hunt down the bouncing ball, getting there first to ground it.
Biggar added the extras and Saints had the advantage after a disjointed opening 20 minutes.
Saints were pushing for more with Bath struggling to get out, but a Reinach pass gifted them a try as Burns intercepted on the edge of his own 22 and sprinted home for the score.
The fly-half converted and, out of nowhere, Bath were level.
They had the chance to go ahead when Lewis Ludlam was penalised, but Burns missed the kick to leave it all square at the break.
Saints introduced Australian ace Andrew Kellaway for his debut in place of centre Andy Symons, who suffered a knee injury during the first half.
But the game was largely a forward battle, which Saints were struggling with. They shipped penalty after penalty at the scrum and couldn't secure hardly any lineout ball.
And Bath eventually claimed the lead for the first time as Teimana Harrison was penalised and Burns finally landed a penalty.
Saints still couldn't get anything going and Bath grabbed what looked likely to be a crucial score when Elliott Stooke's fine long pass found wing Cokanasiga, who dived over the line.
Burns converted well from close to the touchline and Saints were 10 points down heading into the final 15 minutes of the match.
The men in maroon and white finally got some forward momentum, coming agonisingly close to the line before being given a penalty.
Saints opted to go for goal, with Biggar notching the three points to reduce the deficit to seven.
Bath were now under real pressure and after Saints finally got a lineout right, replacement scrum-half Alex Mitchell pushed forward and offloaded for Collins to score.
But Biggar was unable to hit the target with his conversion attempt as his side suffered a third defeat in four Gallagher Premiership games this season.
Bath: Atkins; Rokoduguni, Brew (Wright 8), Willison, Cokanasiga; Burns, Green (Cook 58); Catt (van Rooyen 73), Dunn (Walker 56), Thomas (Perenise 73); Attwood, Charteris (c) (Stooke 56); Ellis, Underhill (Mercer 58), Faletau.
Saints: Tuala; Naiyaravoro (Mallinder 56), Symons (Kellaway 40), Francis, Collins; Biggar, Reinach (Mitchell 63); Waller (cc) (van Wyk 61), Hartley (cc) (Haywood 61), Franks (Painter 50); Ribbans (Rayuniyarawa 68), Lawes; Gibson, Ludlam, Harrison (Eadie 68).
Referee: Karl Dickson