The game turned in a 3-minute sequence in the first half when Giovinco played provider for Marky Delgado in the 29th minute and scored himself in the 32nd.
Substitute Conor Casey, a former TFC player, scored in stoppage time for the Union after making room for a low shot that beat a diving Joe Bendik.
Giovinco came close to a third goal in the 40th minute after a through ball from Jozy Altidore put him away. He beat onrushing goalkeeper Brian Sylvestre, but sent the ball just wide of the post.
Giovinco has 12 goals and nine assists this season.
Toronto improved to 8-7-3, and Philadelphia dropped to 6-11-4.