The Dutch rider for the Belkin-Pro team edged out Frenchman Arthur Vichot on the final sprint to win the one-day Grand Prix Cycliste de Quebec on Friday afternoon.
The 27-year-old became the first to post victories in the two UCI WorldTour events held annually in Canada, having won in Montreal in 2010. He also has second and third-place finishes in Quebec City.
"In a race like this, nine times out of 10 it comes down the last lap," Gesink, who was fifth at last week's Tour of Alberta, said of the hilly circuit through city streets. "The team did good work to get me in position for the final push.
"(Peter) Sagan is very fast and usually I'd have no chance to hold him off on the sprint, but I did it."
The world's top teams will travel to Montreal for another race on Sunday afternoon.
Gesink completed the 201.6-kilometre race, run in 12.6-kilometre laps, in four hours 58 minutes 13 seconds, just ahead of Vichot and Belgian Greg Van Avermaet.
Sagan looked to have the race in hand as he surged into the lead on the final lap, but the Slovak ran out of gas on the false flat at the end and finished 10th.
Garmin Sharp team leader Ryder Hesjedal of Victoria was the top Canadian in 39th place, just ahead of Vancouver's Ryan Anderson of the Canadian national squad.
"I think Montreal suits me better," said Hesjedal.
Anderson came in just ahead of Tour de France champion Chris Froome of Britain, who was 41st. Two-time Tour winner Alberto Contador of Spain was 52nd.
"They started racing pretty hard with six laps to go, and it was really hard for the rest of the day," Anderson told the Cycling Canada website. "I didn't quite have it at the end.
He had praise for the only two North American stops on the Tour, saying they get "better and more pristine" each year.
"Each year it gets bigger, and becomes even more important to win. It's a special event, and I am glad it's in Canada.”
The Quebec City and Montreal races are in their fourth years.