Nicky Maynard's late goal gave Bristol City all three points
Nicky Maynard struck six minutes from time to stretch in-form Bristol City's unbeaten run to six games and dent Swansea City's play-off charge.
Substitute Ivan Sproule squared from the right for Maynard to fire his 18th goal of the season from two yards out.
Bristol City had earlier seen Danny Haynes and then Maynard failing to bury Jamal Campbell-Ryce's cross.
Gorka Pintado had Swansea's best chance when put in by Darren Pratley, but shot straight at keeper Stephen Henderson.
The result ensured Swansea's poor form continued at such a crucial stage of the season, with just one win in the last seven.
And they dropped to sixth after Leicester won at Peterborough, but stay two points above Blackpool - who sit just outside the play-offs - who lost at Newcastle.
Bristol City have yet to lose since caretaker manager Keith Millen took charge and have won four of their six games, but it may too late for the rejuvenated Robins to make a dramatic surge towards the play-offs.
It looked like one goal would settle this drab affair, as both sides struggled to really pose a threat up front throughout.
But it was the visitors who had an early chance when Andrea Orlandi squared to Pratley on the edge of the box only to see his shot quickly charged down.
The Swans suffered an early setback, losing defender Angel Rangel to injury after just seven minutes, with Albert Serran ending a three-month injury absence by coming on.
That served to give the Robins a bit of a lift, with Haynes and Bradley Orr both wasting chances from good positions.
The hosts were enjoying more of the possession and Campbell-Ryce battled past Ashley Williams to set up Haynes, who fluffed two attempts before Maynard ultimately fired wide.
But Swansea posed a threat of their own going forward and Orlandi curled a 30-yard free-kick just wide of the left-hand post after Paul Hartley fouled former Robins winger David Cotterill.
The Swans best chance came after half-an-hour when Cotterill cut inside from the left and found Pratley on the edge of the box.
The former Fulham midfielder then laid the ball off to Pintado who forced a save out of Henderson, but the Spaniard should have done better with his angled shot.
Neither side were too convincing going forward and it almost took a mistake to break the deadlock three minutes before the break.
Swans keeper Dorus de Vries was almost caught out when, out of nothing, Campbell-Ryce tried a pot-shot which the Dutchman initially spilled before saving.
Bristol City started the second half like they started the first but once again lacked the final ball, and when Swansea had the chance to break they were wasteful.
The Swans made a change five minutes after the break, bringing on Cedric van der Gun for Nathan Dyer in a straight swap on the wing.
Sousa rues lack of Swans goals
Campbell-Ryce was later replaced by the inspirational Sproule and David Clarkson came on for Haynes as Bristol City sensed they could get something out of the game.
They had earlier seen a Hartley free-kick go wide, while Haynes drilled just past the post before coming off.
But at the other end, Henderson gave the home supporters a scare with 20 minutes to go when Cotterill delivered a great ball into the box from the right and the Robins keeper spilled before making amends at the feet of Van der Gun.
Then Cotterill sent a 25-yard free-kick straight at Henderson as the visitors started to enjoy more of the possession.
But it was Maynard who had the last say with six minutes to go, as Sproule beat two defenders with a brilliant run, which included some fortune too, before picking out the former Crewe striker to slot home.
Bristol City caretaker manager Keith Millen: "The chairman has been speaking to other people, but it would be a disappointment if I wasn't involved as either manager or coach.
"We had a very positive talk last week about the management structure without any names being mentioned. I'm just delighted to be involved in the discussions and was able to give my opinions.
"We do need some experience and how we achieve that is down to the chairman.
"I believe I could do the manager's job but, whatever he decides, I will hopefully be part of it."
Swansea manager Paulo Sousa: "We had good opportunities before Bristol scored and it is our main problem at the moment that we aren't scoring when on top.
"If we go in front we have the quality ball players to keep possession and frustrate the opposition.
"By not taking our chances we are putting pressure on ourselves, but I still have great faith in my players and I firmly believe we can still achieve a play-off place."
90:00+4:29 The referee brings the game to a close.
90:00+2:46 Effort on goal by Nicky Maynard from just inside the penalty area goes over the target.
90:00+2:07 Centre by Andrea Orlandi.
89:08 The offside flag is raised against Nicky Maynard. Ashley Williams takes the free kick.
88:33 The ball is sent over by Ivan Sproule, Headed effort from deep inside the area by David Clarkson misses to the left of the
87:43 Marvin Elliott takes a shot. Garry Monk gets a block in.
87:03 Free kick awarded for a foul by Nicky Maynard on Joe Allen. Garry Monk restarts play with the free kick.
85:47 Albert Serran challenges Liam Fontaine unfairly and gives away a free kick. Nicky Maynard restarts play with the free kick.
83:43 Assist by Ivan Sproule.
83:43 GOAL - Nicky Maynard:Bristol City 1 - 0 Swansea Goal scored by Nicky Maynard from inside the six-yard box low into the middle of the goal. Bristol City 1-0 Swansea.
82:43 A cross is delivered by Liam Fontaine, Darren Pratley manages to make a clearance.
81:47 Unfair challenge on Marvin Elliott by Joe Allen results in a free kick. Cole Skuse takes the direct free kick.
81:13 Ivan Sproule delivers the ball, blocked by David Edgar. Corner from the right by-line taken by Cole Skuse, save by Dorus De
79:58 Free kick taken by Cole Skuse.
79:58 Booking The referee shows Joe Allen a yellow card.
79:50 Joe Allen challenges Nicky Maynard unfairly and gives away a free kick.
78:30 Substitution Evander Sno replaces Paul Hartley.
76:40 Substitution Shefki Kuqi is brought on as a substitute for David Cotterill.
74:56 Unfair challenge on Joe Allen by Paul Hartley results in a free kick. David Edgar takes the free kick.
74:31 Foul by Paul Hartley on Joe Allen, free kick awarded. Direct free kick taken by Joe Allen.
73:14 Gorka Pintado fouled by Louis Carey, the ref awards a free kick. Direct strike on goal from the free kick comes in from David
Cotterill, save by Stephen Henderson.
72:58 Darren Pratley fouled by David Clarkson, the ref awards a free kick. Garry Monk takes the direct free kick.
70:37 David Cotterill produces a cross, save made by Stephen Henderson.
69:34 Free kick awarded for a foul by Marvin Elliott on Joe Allen. Free kick taken by Darren Pratley.
68:26 Louis Carey concedes a free kick for a foul on Gorka Pintado. The free kick is delivered left-footed by Andrea Orlandi from
right wing, save by Stephen Henderson.
67:01 Substitution David Clarkson comes on in place of Danny Haynes.
67:01 Ivan Sproule produces a left-footed shot from just outside the penalty box that misses to the left of the goal.
66:17 Free kick awarded for an unfair challenge on Cedric Van der Gun by Bradley Orr. Andrea Orlandi takes the direct free kick.
64:56 Free kick crossed right-footed by Paul Hartley from right channel, clearance by Ashley Williams. Danny Haynes produces a right-footed
shot from outside the penalty box and misses wide left of the target.
64:56 Substitution Jamal Campbell-Ryce goes off and Ivan Sproule comes on.
64:56 Free kick awarded for an unfair challenge on Louis Carey by David Cotterill.
63:46 David Cotterill concedes a free kick for a foul on Jamal Campbell-Ryce. Stephen Henderson restarts play with the free kick.
60:20 Free kick awarded for a foul by Garry Monk on Nicky Maynard. Strike comes in from Paul Hartley from the free kick.
57:11 A cross is delivered by Jamal Campbell-Ryce, David Edgar gets a block in. Outswinging corner taken by Paul Hartley, save by
Dorus De Vries.
55:44 Danny Haynes crosses the ball, Ashley Williams gets a block in. Corner taken by Paul Hartley played to the near post, Ashley
Williams manages to make a clearance.
51:10 Substitution Nathan Dyer goes off and Cedric Van der Gun comes on.
50:04 Paul Hartley challenges Nathan Dyer unfairly and gives away a free kick. Direct free kick taken by Dorus De Vries.
48:41 Booking Booking for David Cotterill for unsporting behaviour.
48:27 Bradley Orr gives away a free kick for an unfair challenge on David Cotterill. Direct free kick taken by David Edgar.
46:24 Outswinging corner taken by Paul Hartley from the right by-line, save by Dorus De Vries.
45:44 Unfair challenge on Danny Haynes by Ashley Williams results in a free kick. Free kick crossed right-footed by Paul Hartley
from right channel, save by Dorus De Vries.
45:25 Jamal Campbell-Ryce sends in a cross, clearance by Garry Monk.
45:01 The referee blows his whistle to start the second half.
45:00+2:26 It is the end of the first-half.
45:00+0:45 Free kick awarded for a foul by Joe Allen on Cole Skuse. Paul Hartley delivers the ball, Lewin Nyatanga takes a shot. Save
made by Dorus De Vries.
44:21 The ball is delivered by Liam Fontaine, Gorka Pintado makes a clearance.
43:41 The ball is swung over by Liam Fontaine, clearance by David Edgar. Corner from right by-line taken by Paul Hartley.
43:22 Jamal Campbell-Ryce takes a shot. Blocked by Ashley Williams.
42:05 Jamal Campbell-Ryce takes a shot. Save by Dorus De Vries.
41:13 Danny Haynes challenges Garry Monk unfairly and gives away a free kick. Dorus De Vries restarts play with the free kick.
39:26 David Cotterill decides to take the corner short.
35:45 Gorka Pintado is ruled offside. Free kick taken by Louis Carey.
34:29 Unfair challenge on Paul Hartley by Darren Pratley results in a free kick. Stephen Henderson takes the free kick.
33:40 Gorka Pintado is flagged offside by the assistant referee. Lewin Nyatanga takes the indirect free kick.
32:10 Darren Pratley takes a shot from just outside the penalty area which clears the crossbar.
31:45 Free kick awarded for a foul by Liam Fontaine on Joe Allen. Andrea Orlandi takes the direct free kick.
31:15 Darren Pratley takes a shot. Save made by Stephen Henderson.
30:25 Unfair challenge on Joe Allen by Nicky Maynard results in a free kick. Direct free kick taken by Ashley Williams.
29:04 Gorka Pintado takes a shot. Save by Stephen Henderson.
27:40 Louis Carey fouled by Gorka Pintado, the ref awards a free kick. Louis Carey takes the direct free kick.
26:09 Unfair challenge on David Cotterill by Paul Hartley results in a free kick. Direct strike on goal from the free kick comes
in from Andrea Orlandi.
23:23 Marvin Elliott challenges Andrea Orlandi unfairly and gives away a free kick. David Edgar takes the free kick.
22:06 Danny Haynes takes a shot. Joe Allen gets a block in. Danny Haynes takes a shot. Joe Allen gets a block in. Nicky Maynard
has an effort at goal from deep inside the area missing to the left of the target.
20:11 Marvin Elliott takes a shot. Save by Dorus De Vries.
Correction - 14:04 Shot on goal by Bradley Orr from just inside the area goes over the target.
14:04 Effort on goal by Bradley Orr from just inside the area clears the crossbar.
12:45 Handball decision goes against Andrea Orlandi. Indirect free kick taken by Paul Hartley.
11:10 The referee blows for offside. Garry Monk takes the free kick.
8:12 David Edgar concedes a free kick for a foul on Danny Haynes. Free kick taken by Paul Hartley.
7:44 Shot by Danny Haynes from deep inside the penalty area misses to the right of the target.
6:13 Substitution Albert Serran joins the action as a substitute, replacing Angel Rangel.
3:42 The offside flag is raised against Liam Fontaine. Free kick taken by Dorus De Vries.
3:09 Gorka Pintado gives away a free kick for an unfair challenge on Louis Carey. Free kick taken by Lewin Nyatanga.
2:09 Darren Pratley takes a shot. Blocked by Liam Fontaine. Corner taken left-footed by Andrea Orlandi from the right by-line to
the near post, Jamal Campbell-Ryce makes a clearance.
0:00 The match has kicked off.
Live text and data provided by The Press Association.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.