Canada started well and took the lead with a try from skipper Lucas Rumball.
Scotland hit back with scores from Josh Bayliss, Dylan Richardson (2) and Arron Reed to lead at the break.
Gus Warr extended Scotland's lead after the break before Canada narrowed the gap with a try by Kyle Baillie.
Warr went over for his second try of the game before Reed grabbed his own double.
Jamie Dobie put Harry Paterson in for Scotland's eighth try and the Glasgow scrum-half added a try of his own shortly after.
Stafford McDowall touched down for Scotland's tenth try and Kyle Steyn finished things off with the last play of the game.
Ross Thompson and Ben Healy kicked the rest of the points.