The Hawks got their first win over the Spurs in five years.
Joe Johnson's jumper with 1:21 remaining in overtime gave Atlanta a 113-111 lead. After a missed 3-pointer by San Antonio's Matt Bonner, Al Horford hit a jumper as the shot clock expired to push the lead to four points with 35 seconds remaining.
Horford had 22 points and 18 rebounds and Johnson had 20 points with 13 assists as the Hawks ended a seven-game losing streak against the Spurs.
The Spurs had a rough start to perhaps their toughest stretch of the season. They are facing games against Oklahoma City, the Los Angeles Lakers, Cleveland and Boston.
A tip-in by Horford tied the game at 105-all with 52 seconds remaining in regulation. After a miss by Ginobili, Johnson missed two shots on the Hawks' final possession of regulation.
The Hawks, who trailed by 14 in the first half, matched their biggest comeback of the season.
Atlanta kept the lead most of the third period and second half but the Spurs stayed close.
The Hawks clinched their third straight playoff spot and moved back into a tie with Boston for third place in the Eastern Conference. They have won five of their past six games.
The Spurs had their third loss in their last 12 games.
Williams answered coach Mike Woodson's call for more offense. Williams, averaging 10.2 points, scored 20 or more points for only the third time this season.
Williams scored 11 points in the last 5:17 of the first half, including a steal and jumper before the buzzer to give the Hawks a 53-51 halftime lead — their first lead since 4-2.
Williams' shot capped a 23-9 run to end the half. Another highlight of the run was Josh Smith's left-handed jam on an alley-oop pass from Johnson.
Notes: The Spurs' previous loss to the Hawks came on Dec. 10, 2005, in Atlanta. ... Williams' 18 points in the first half marked his high points total for a game in his past nine games. ... The Spurs fell to 16-17 away from San Antonio with their second straight road loss.