Danny Graham scored a stoppage-time equaliser to deny Aston Villa victory at the Liberty Stadium.
Christian Benteke appeared to have given Villa victory with an 85th-minute penalty after Nathan Dyer had fouled Andreas Weimann.
But Graham fired home from eight yards to clinch a point for the hosts.
Wayne Routledge's early strike had given Swansea the lead while Michu twice hit the post, before Weimann equalised before just half-time.
The thrilling finale had seemed unlikely in the opening stages when Swansea, with top scorer Michu returning as one of five changes, cut Villa to shreds.
But Villa, after conceding 15 goals in their previous three games, showed a fighting spirit which had been lacking over Christmas.
Manager Paul Lambert's policy of giving youth a chance saw him select the youngest Villa team ever to take the field in the Premier League with an average age of just 23 years and 119 days.
Swansea dominated the first half but went in at half-time all square after missing a host of good chances.
Villa's holiday nightmare
- Sun 23 Dec: Chelsea 8-0 Aston Villa
- Wed 26 Dec: Aston Villa 0-4 Tottenham
- Sat 29 Dec: Aston Villa 0-3 Wigan
- Tue, Jan 1: Swansea City 2-2 Aston Villa
Routledge fired the Swans ahead in the ninth minute with his second opening of the match, after good work by Leon Britton and Pablo Hernandez.
Within a minute Michu hit the post and then Graham fired a left-foot shot wide when he should have scored.
Michu produced a sublime drag-back inside the box to leave the Villa defence flat-footed, but goalkeeper Brad Guzan got enough on the shot to guide it onto the post.
Then Swansea were caught against the run of play just before the interval.
Benteke controlled well in midfield and his pass wrong-footed Ashley Williams to find Weimann, who fired a first-time shot low past Michel Vorm's outstretched right hand.
It was Villa's first goal since their 3-1 win at Liverpool on 17 December.
Villa had a let-off early in the second half when referee Mark Halsey ruled Joe Bennett handled the ball outside the box, though it was a close call.
But Villa were showing a lot more fight than in recent weeks, with Marc Albrighton making a nuisance of himself and Bennett looking lively down the left flank.
And Benteke and Weimann caused panic as Chico Flores failed to clear, but Weimann's shot was well wide.
Dyer cleared a powerful Benteke header off the line, but the little winger brought down Weimann as he attempted to retrieve the ball and conceded the penalty.
Benteke stepped up and sent Vorm the wrong way.
The Swans threw everything at Villa in a bad-tempered finale, and finally got their reward when the ball fell to Graham eight yards out and he needed two attempts to beat Guzan with a powerful right-foot shot.
Swansea manager Michael Laudrup: "We could have been 4-0 up after 12 minutes. Incredible.
"Aston Villa really fought after three defeats. They wanted to do everything to get a point and got close to getting three points. It was a great fight back from us, we showed character. We could have lost but should have won.
"Obviously it should have been two penalties. The Aston Villa player had two feet on the line and last time I read the rules on the line is in the box. His hand is also in the box so it should have been a penalty but that's life."
Aston Villa manager Paul Lambert: "It is hard to take because at 30 seconds to go, you expect to see it through. In the first half, Swansea were right on top but in the second half we were very good.
"We have a lot of injuries so you have to give credit to the players. It is a big point for us.
"I've got a lot of faith in what we're doing and we won't deviate from it. Even after the heavy defeats we were keeping spirits up."
- 01 Vorm
- 04 Chico
- 06 Williams
- 22 Rangel
- 33 Davies
- 07 Britton (Agustien - 79' )
- 09 Michu
- 11 Pablo
- 15 Routledge (Dyer - 66' )
- 20 De Guzman (Ki Sung-Yeung - 62' )
- 10 Graham
- 25 Tremmel
- 16 Monk
- 21 Tiendalli
- 12 Dyer
- 24 Ki Sung-Yeung
- 26 Agustien
- 17 Shechter
- 22 Guzan
- 06 Clark Booked
- 27 Bennett
- 29 Stevens Booked (Holman - 68' )
- 34 Lowton
- 12 Albrighton (Bowery - 85' )
- 15 Westwood (Bannan - 81' )
- 16 Delph Booked
- 31 Herd
- 20 Benteke
- 26 Weimann Booked
- 01 Given
- 30 Lichaj
- 07 Ireland
- 25 Bannan
- 40 Carruthers
- 14 Holman
- 21 Bowery
Live Text Commentary
Full Time The game is over, as the referee blows his whistle.90:00 +5:27
Pablo Hernandez takes a shot. Matthew Lowton gets a block in. Kemy Agustien produces a right-footed shot from just outside the penalty box that misses to the left of the target.90:00 +4:07
Danny Graham takes a shot. Blocked by Ciaran Clark.90:00 +3:57
Assist on the goal came from Sung-Yeung Ki.90:00 +3:57 Goal scored
Goal! - Danny Graham - Swansea 2 - 2 A Villa Goal scored by Danny Graham from just inside the penalty area low into the middle of the goal. Swansea 2-2 Aston Villa.90:00 +3:44
Chico takes a shot. Ciaran Clark gets a block in.90:00 +1:44
Christian Benteke concedes a free kick for a foul on Chico. Ashley Williams takes the free kick.87:21
Pablo Hernandez fouled by Matthew Lowton, the ref awards a free kick. Sung-Yeung Ki delivers the ball from the free kick right-footed from left wing, Ciaran Clark makes a clearance.85:26
Brett Holman concedes a free kick for a foul on Nathan Dyer. Chico takes the direct free kick.83:41 Substitution
Substitution Marc Albrighton leaves the field to be replaced by Jordan Bowery.83:41
Andreas Weimann provided the assist for the goal.83:41 Goal scored
Goal! - Christian Benteke - Swansea 1 - 2 A Villa Placed penalty scored by Christian Benteke. Swansea 1-2 Aston Villa.82:04
Outswinging corner taken left-footed by Barry Bannan, Christian Benteke takes a shot. Nathan Dyer gets a block in. Penalty awarded for a foul by Nathan Dyer on Andreas Weimann.80:04 Substitution
Substitution Barry Bannan replaces Ashley Westwood.80:04
Pablo Hernandez takes a shot. Bradley Guzan makes a save. Shot by Nathan Dyer from deep inside the penalty area misses wide to the left of the target.78:28 Substitution
Substitution (Swansea) makes a substitution, with Kemy Agustien coming on for Leon Britton.76:09
Foul by Sung-Yeung Ki on Fabian Delph, free kick awarded. Ciaran Clark takes the free kick.71:27
Christian Benteke takes a shot. Blocked by Chico. Andreas Weimann has an effort at goal from close in which goes wide right of the goal.70:36
The offside flag is raised against Christian Benteke. Michel Vorm takes the indirect free kick.69:22
Sung-Yeung Ki takes a outswinging corner from the right by-line played to the near post, clearance made by Joe Bennett.
Unfair challenge on Chico by Christian Benteke results in a free kick. Leon Britton restarts play with the free kick.67:02 Substitution
Substitution (Aston Villa) makes a substitution, with Brett Holman coming on for Enda Stevens.65:20 Substitution
Substitution Wayne Routledge leaves the field to be replaced by Nathan Dyer.63:28
Free kick awarded for a foul by Marc Albrighton on Ben Davies. Sung-Yeung Ki has an effort direct from the free kick.61:39 Substitution
Substitution Sung-Yeung Ki is brought on as a substitute for Jonathan de Guzman.58:38
Handball by Joe Bennett. Pablo Hernandez crosses the ball, Danny Graham takes a shot. Save by Bradley Guzan.58:01
Handball by Christian Benteke. Direct free kick taken by Chico.57:45
Chris Herd fouled by Danny Graham, the ref awards a free kick. Free kick taken by Chris Herd.54:31
Miguel Michu takes a shot. Bradley Guzan makes a save.52:52
Centre by Matthew Lowton.52:25
A cross is delivered by Danny Graham.49:51
Foul by Enda Stevens on Pablo Hernandez, free kick awarded. Free kick crossed by Jonathan de Guzman, save made by Bradley Guzan.48:55
Effort from inside the area by Pablo Hernandez misses to the right of the target.45:13
Chico concedes a free kick for a foul on Christian Benteke. Direct free kick taken by Ciaran Clark.45:01
The match restarts for the second half.45:00 +2:11 Half time
Half Time The half-time whistle blows.45:00 +0:33
Jonathan de Guzman has a direct shot on goal from the free kick. Miguel Michu produces a left-footed shot from just outside the area that goes harmlessly over the bar.45:00 +0:33 Booking
Booking Caution for Enda Stevens.45:00 +0:28
Free kick awarded for an unfair challenge on Pablo Hernandez by Enda Stevens.43:29
The assist for the goal came from Christian Benteke.43:29 Goal scored
Goal! - Andreas Weimann - Swansea 1 - 1 A Villa A goal is scored by Andreas Weimann from inside the area to the bottom left corner of the goal. Swansea 1-1 Aston Villa.41:55
Unfair challenge on Leon Britton by Fabian Delph results in a free kick. Free kick taken by Leon Britton.40:15 Booking
Booking Fabian Delph receives a yellow card for dissent.40:11 Booking
Booking Andreas Weimann is shown a yellow card for dissent.39:13 Booking
Booking Ciaran Clark receives a caution for unsporting behaviour.36:20
Free kick awarded for an unfair challenge on Chico by Christian Benteke. Chico takes the free kick.35:47
Pablo Hernandez is flagged offside by the assistant referee. Bradley Guzan takes the free kick.33:58
Shot by Marc Albrighton from deep inside the penalty area misses to the right of the target.33:12
Wayne Routledge fouled by Matthew Lowton, the ref awards a free kick. Ben Davies restarts play with the free kick.32:43
Leon Britton takes a shot. Blocked by Ciaran Clark.30:53
Joe Bennett is adjudged to have handled the ball. Chico takes the direct free kick.29:26
Outswinging corner taken from the right by-line by Jonathan de Guzman.28:58
Unfair challenge on Wayne Routledge by Matthew Lowton results in a free kick. Jonathan de Guzman takes the free kick.26:39
Free kick awarded for a foul by Ashley Williams on Andreas Weimann. Free kick taken by Marc Albrighton.25:58
Miguel Michu takes a shot from inside the six-yard box that bounces off the post. Shot by Pablo Hernandez from deep inside the penalty area misses wide to the left of the target.24:54
Ciaran Clark gives away a free kick for an unfair challenge on Pablo Hernandez. Jonathan de Guzman takes the direct free kick.22:12
Corner from the right by-line taken by Ashley Westwood, Christian Benteke takes a shot. Michel Vorm makes a save. The referee blows for offside. Indirect free kick taken by Michel Vorm.21:07
Shot from just outside the box by Pablo Hernandez goes over the crossbar.19:58
Shot from outside the area by Angel Rangel misses to the left of the goal.18:49
Unfair challenge on Danny Graham by Ciaran Clark results in a free kick. Jonathan de Guzman takes the free kick.18:04
Christian Benteke takes a shot. Save by Michel Vorm.17:15
Jonathan de Guzman fouled by Fabian Delph, the ref awards a free kick. Direct free kick taken by Chico.16:49
Wayne Routledge concedes a free kick for a foul on Matthew Lowton. Direct free kick taken by Matthew Lowton.15:44
The official flags Danny Graham offside. Bradley Guzan takes the indirect free kick.15:20
Jonathan de Guzman decides to take a short corner.11:18
Free kick awarded for an unfair challenge on Ashley Williams by Andreas Weimann. Direct free kick taken by Michel Vorm.10:32
Shot by Danny Graham from deep inside the penalty area misses to the left of the goal.9:19
Effort from inside the penalty area by Miguel Michu bounces off the post.8:21
Assist by Pablo Hernandez.8:21 Goal scored
Goal! - Wayne Routledge - Swansea 1 - 0 A Villa Wayne Routledge gets on the score sheet with a goal from deep inside the penalty box low into the middle of the goal. Swansea 1-0 Aston Villa.7:28
Andreas Weimann takes a shot. Michel Vorm makes a save.6:55
Free kick awarded for an unfair challenge on Marc Albrighton by Ben Davies. Direct free kick taken by Chris Herd.3:18
Miguel Michu takes a shot. Save by Bradley Guzan.2:59
Wayne Routledge takes a shot. Save by Bradley Guzan.0:00
The game gets underway.
Live data and text provided by our data suppliers