Ligue 1 Wrap: PSG battle to victory at Toulouse
The haul took the Swede's Ligue 1 tally to 22 for the season, but Laurent Blanc's men were made to work hard for victory at Stade Municipal.
Ibrahimovic reached the 20-goal mark from the penalty spot after Ezequiel Lavezzi had been fouled by Uros Spajic in the area, before a Wissam Ben Yedder volley levelled matters before the break.
Lavezzi put PSG back ahead after 56 minutes, and Ibrahimovic flicked home Yohan Cabaye's free-kick to make it 3-1.
Ben Yedder netted his second 18 minutes from time to leave PSG sweating, but Sweden international Ibrahimovic completed his hat-trick with a rebound from his own penalty in the closing stages.
The win sees PSG re-establish a five-point gap to second-placed Monaco, while Toulouse stay 10th.
Lille missed the chance to close the gap on second-placed Monaco as they were held to a goalless draw by Lyon.
Nolan Roux almost broke the deadlock for Lille with a powerful effort in the 26th minute, before Salomon Kalou had a header saved by Anthony Lopes.
Alexandre Lacazette had the visitors' best chance 17 minutes from time, forcing Vincent Enyeama to push over his crossbar.
Despite the draw, Lille climbed back to third in the French top flight.
In the day's remaining fixture, Rennes gave their chances of survival a huge boost as they claimed a convincing 3-0 victory at Nantes in the Breton derby.
Paul-Georges Ntep gave the visitors a 1-0 lead at the break, before Anders Konradsen and Ola Toivonen made sure of a valuable three points in the second half.
The win takes Rennes level on points with their local rivals and nine points clear of the relegation zone.