Jon Stead's fifth-minute goal was enough to help Bristol City end Swansea's unbeaten home record and climb out of the npower Championship relegation zone with a 1-0 victory at the Liberty Stadium.
The former Blackburn forward was on hand to tuck home the only goal of the contest after Jamal Campbell-Ryce's shot had been blocked by Dorus De Vries.
Third-placed Swansea, unbeaten in seven league games before tonight, pushed for an equaliser and dominated possession but they lacked the craft to break down a well-organised Robins defence which left David James with little to do in goal, with the visitors extending their own unbeaten run to five games.
Swansea, buoyed by their derby win over Cardiff, were able to recall influential midfielder Darren Pratley to their starting XI as he returned from suspension and there was also a start for Kemy Agustien, while Bristol City restored Campbell-Ryce to their side after he missed the draw against Preston.
City made a bright start and Stead was not too far away from connecting with Albert Adomah's cross in the opening minute.
The Swans failed to heed that warning and another tricky Adomah run in the fifth minute teed up Campbell-Ryce, his shot was somehow kept out by De Vries, but it fell to Stead for the striker to slot home the first league goal Swansea had conceded in more than nine hours.
David James made a comfortable save from Andrea Orlandi's free-kick as Swansea dominated possession in their search for a rapid response and Pratley was off target with an ambitious effort from distance.
But the Welsh side were creating little and it took an excellent intervention from skipper Garry Monk to prevent Danny Haynes putting the Robins 2-0 up after more excellent work by the energetic Adomah.
Adomah's trickery was constantly troubling Swansea and a mistake from Alan Tate saw the winger hit the crossbar from an acute angle after Stead had played him in on the right side of the area in the 30th minute.
The Swans finally created a clear-cut chance in the 40th minute as Nathan Dyer slipped in Scott Sinclair on the edge of the area, the striker lifted his effort over the advancing James but wide of the post.
Swansea boss Brendan Rodgers withdrew Orlandi and Pratley at the break and replaced them with Joe Allen and Mark Gower respectively and a neat run into the box from Allen saw James do well to cut off his pass to Marvin Emnes.
Steven Caulker headed straight at De Vries at the other end but Swansea should have levelled in the 66th minute.
James failed to deal with a ball into the box and Emnes saw his effort cleared off the line before Tate was also denied by a goalline clearance.
City broke quickly and Adomah cut inside the box with ease before firing in a shot that De Vries did well to palm away.
Gower got free down the right for the hosts moments later, but Emnes could not control his effort as he slid in at the far post.
Sinclair came close to adding to his 11 goals for the season as he fired just wide from the angle of the area with five minutes left.
Seconds later the striker found room and squared the ball across the box and Tate appeared to be hauled down as he attempted to reach the ball, but the protests were waved away.
And the final chance was wasted as Sinclair diverted a goalbound Ashley Williams header over the bar.
Copyright (c) PA Sport 2009, All Rights Reserved.