Skip to main content

The Best Hotels In Canada



photo of the Fairmont Banff Springs
Canada’s Castle, Fairmont Banff Springs.

Some hotels take the art of hospitality so seriously that magic happens and you want to live in them forever, like Eloize on the “tippy top floor” of the Plaza. The places on this list of the Best Hotels in Canada are like that, but with Canadian scenery and friendly Canadians en plus! Why not dig in and find your dream getaway?

Methodology: This is a list of the top hotel in each province and territory in Canada, followed by the 50 hotels in Canada according to Yelp. All the businesses on this list are in the Hotels category on Yelp. “Best” is measured using an algorithm that looks at the number of reviews and star rating for a business, among other things.

photo of one of the best hotels in canada, lane;s privateer's inn, and a picnic
Lane’s Privateer Inn picnic lunch!

Top Hotels in Canada by Province and Territory:

The top hotel in each province and territory in Canada seemed worth highlighting separately since Newfoundland and P.E.I. may not have as many Yelp reviews as Vancouver, but man they sure are pretty! And you should know where to stay when you get there!

Best Hotel in Alberta: Le Germain Hotel in Calgary.

Best Hotel in British Columbia: Abigail’s Hotel in Victoria.

Best Hotel in Manitoba: Mere Hotel in Winnipeg.

Best Hotel in New Brunswick: The Algonquin Resort St. Andrews by-the-Sea in St. Andrews.

Best Hotel in Newfoundland and Labrador: Neddies Harbour Inn in Norris Point.

Best Hotel in Northwest Territories: Explorer Hotel in Yellowknife.

Best Hotel in Nova Scotia: Lane’s Privateer Inn in Liverpool.

Best Hotel in Nunavut: Hotel Arctic in Iqaluit.

Best Hotel in Ontario: Sterling Inn and Spa in Niagara Falls.

Best Hotel in Prince Edward Island:  Dalvay by the Sea in York.

Best Hotel in Quebec: Le Petit Hotel in Montréal.

Best Hotel in Saskatchewan: The Hotel Saskatchewan, Autograph Collection in Regina.

Best Hotel in Yukon: Airport Chalet in Whitehorse.

Auberge Saint-Antoine in Quebec City
Auberge Saint-Antoine all snowed in!

Here are a couple sweet highlights we found in the data, followed by the big list of the Best Hotels in Canada. There are truly some outstanding places we think you’ll want to visit. Interesting to note, the top 5 hotels in Canada according to Yelpers are all boutique hotels offering unique services and décor that are a direct reflection of the cities they inhabit. Anyway, enjoy exploring, and do share your reviews and photos with us when you go!

#2 BC Victoria Abigail’s Hotel, honeymooners favourite: “We arrived to beautifully laid out extras– a bottle of champagne and roses and chocolate strawberries. The bed was so comfortable, pillows were fantastic, and the room, cozy. The bathroom on its own was incredible, with a tub the both my husband and I could comfortably sit in.” Maya B.

#5 QC Québec Auberge Saint-Antoine, next level service: “Best hotel we’ve stayed at and there is not a close second. My wife and I are big Atlanta United supporters and we asked the staff about a bar we could possibly find the match at, but they said they would be happy to allow us to watch it in their movie theatre. They definitely went above and beyond for us and seemed happy to do so.” Jason R.

#16 The Fairmont Banff Springs, a heritage site midst the mountains: “Early on you’ll get a sense of history and luxury associated with this majestic building (it’s actually a UNESCO world heritage site). The views in and around the property are breathtaking. Banff is so beautiful to begin with and this property overlooks it all.” Kevin L. Bonus: Want to experience Canada’s Castle with a friendly gang of Yelpers? Sign up for Yelp Winter Break Banff ASAP and get a special rate!

#37 AB Lake Louise Post Hotel & Spa, deep, deep relaxation: “The staff was friendly; the complimentary afternoon tea was wonderful. The room with a fireplace and king-sized bed was comfortable and romantic, and the spa treatments were heavenly! We got the 90 min couples massage and it was probably the best massage I’ve ever received.” Clara W.

Top 50 Hotels in Canada

1 BC Victoria Magnolia Hotel & Spa

2 BC Victoria Abigail’s Hotel

3 QC Montréal Le Petit Hotel

4 BC Vancouver L’Hermitage Hotel

5 QC Québec Auberge Saint-Antoine

6 BC Vancouver Fairmont Pacific Rim

7 AB Calgary Le Germain Hotel

8 BC Vancouver Loden Hotel

9 BC Whistler Nita Lake Lodge

10 BC Vancouver Rosewood Hotel Georgia

rosewood hotel georgia pool
Indoor saltwater lap pool at the Rosewood Hotel Georgia.

11 QC Montréal Ritz-Carlton

12 BC Vancouver OPUS Hotel Vancouver

13 QC Québec Hôtel le Germain-Dominion

14 BC Whistler Four Seasons Resort and Residences Whistler

15 ON Niagara Falls Sterling Inn and Spa

16 AB Banff The Fairmont Banff Springs

17 QC Montréal Hôtel Gault

18 QC Québec Hôtel du Vieux-Québec

19 BC Vancouver Times Square Suites

20 QC Montréal Hôtel Nelligan

stone walls, down pillows, fireplace in the rooms
Hôtel Nelligan in the heart of Vieux Montréal.

21 QC Montréal Le Square Phillips

22 QC Québec Hotel Manoir D’auteuil

23 QC Montréal Montreal Central

24 ON Toronto Delta Hotels by Marriott Toronto

25 BC Vancouver Fairmont Waterfront

26 AB Edmonton Fairmont Hotel Macdonald

27 BC Victoria Hotel Rialto

28 BC Vancouver Shangri-La Hotel

29 ON Niagara Falls Rex Motel

30 BC North Vancouver Pinnacle Hotel at the Pier

North Vancouver Waterfront, home of the Pinnacle Hotel at the Pier.
North Vancouver Waterfront, home of the Pinnacle Hotel at the Pier.

31 ON Toronto The Ritz-Carlton Toronto

32 QC Montréal Petite Auberge Les Bons Matins

33 QC Montréal Loews Hotel Vogue

34 ON Toronto Le Germain Hotel Toronto Maple Leaf Square

35 ON Toronto The Grand Hotel & Suites

36 QC Montréal Auberge Du Vieux Port

37 AB Lake Louise Post Hotel & Spa

38 BC Richmond Fairmont Vancouver Airport

39 QC Montréal L’Hotel le Germain

40 BC Cranbrook Elizabeth Lake Lodge

41 BC Vancouver Barclay House

42 BC Victoria Helm’s Inn

snowy entrance to the ice hotel
Québec’s Ice Hotel! It’s cozy on the inside!

43 QC Québec Hôtel de Glace

44 BC Tofino The Wickaninnish Inn

45 BC Whistler Fairmont Chateau Whistler

46 BC Vancouver Vancouver Marriott Pinnacle Downtown Hotel

47 BC Vancouver St. Regis Hotel

48 QC Québec Fairmont le Château Frontenac

49 QC Montréal Le St-Martin Hotel Particulier

50 AB Edmonton Courtyard by Marriott Edmonton West

[gravityform id="4" title="false" ajax="true"]
<script type="text/javascript">var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[n][o]&&((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==n?t.apply(null,r):r[0]=t.apply(null,r)})),"filter"==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&&(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&&i!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][n]=r)}});</script> <div class='gf_browser_unknown gform_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_4' ><div id='gf_4' class='gform_anchor' tabindex='-1'></div> <div class='gform_heading'> <span class='gform_description'></span> </div><form data-form-name='Newsletter Signup Popup' method='post' enctype='multipart/form-data' target='gform_ajax_frame_4' id='gform_4' action='/community/best-hotels-canada/#gf_4' novalidate> <div class='gform_body gform-body'><ul id='gform_fields_4' class='gform_fields top_label form_sublabel_below description_below'><li id="field_4_1" class="gfield field_sublabel_below field_description_below hidden_label gfield_visibility_visible gf-email" data-field-class="gf-email" data-js-reload="field_4_1"><label class='gfield_label screen-reader-text' for='input_4_1' >youremail@address.com</label><div class='ginput_container ginput_container_email'> <input name='input_1' id='input_4_1' type='email' value='' class='large' placeholder='youremail@address.com' aria-invalid="false" /> </div></li><li id="field_4_2" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_4_2"><label class='gfield_label' for='input_4_2' >Email</label><div class='ginput_container'><input name='input_2' id='input_4_2' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_4_2'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_4' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} jQuery("#gform_4").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=4&amp;title=&amp;description=1&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_4' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='4' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_4' value='WyJbXSIsImE0YjFiMmUxY2IxMWVhYTljM2FhNzdkODk4NDUzZmY0Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_4' id='gform_target_page_number_4' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_4' id='gform_source_page_number_4' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_4' id='gform_ajax_frame_4' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script> gform.initializeOnLoaded( function() {gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_4').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_4');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_4').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_4').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_4').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_4').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_4').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_4').val();gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [4, current_page]);window['gf_submitting_4'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_4').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_4').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [4]);window['gf_submitting_4'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_4').text());}, 50);}else{jQuery('#gform_4').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [4, current_page]);} );} ); </script>
[gravityform id="4" title="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_4' ><div id='gf_4' class='gform_anchor' tabindex='-1'></div> <div class='gform_heading'> <span class='gform_description'></span> </div><form data-form-name='Newsletter Signup Popup' method='post' enctype='multipart/form-data' target='gform_ajax_frame_4' id='gform_4' action='/community/best-hotels-canada/#gf_4' novalidate> <div class='gform_body gform-body'><ul id='gform_fields_4' class='gform_fields top_label form_sublabel_below description_below'><li id="field_4_1" class="gfield field_sublabel_below field_description_below hidden_label gfield_visibility_visible gf-email" data-field-class="gf-email" data-js-reload="field_4_1"><label class='gfield_label screen-reader-text' for='input_4_1' >youremail@address.com</label><div class='ginput_container ginput_container_email'> <input name='input_1' id='input_4_1' type='email' value='' class='large' placeholder='youremail@address.com' aria-invalid="false" /> </div></li><li id="field_4_2" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_4_2"><label class='gfield_label' for='input_4_2' >Name</label><div class='ginput_container'><input name='input_2' id='input_4_2' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_4_2'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_4' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} jQuery("#gform_4").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=4&amp;title=&amp;description=1&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_4' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='4' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_4' value='WyJbXSIsImE0YjFiMmUxY2IxMWVhYTljM2FhNzdkODk4NDUzZmY0Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_4' id='gform_target_page_number_4' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_4' id='gform_source_page_number_4' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_4' id='gform_ajax_frame_4' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script> gform.initializeOnLoaded( function() {gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_4').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_4');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_4').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_4').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_4').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_4').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_4').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_4').val();gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [4, current_page]);window['gf_submitting_4'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_4').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_4').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [4]);window['gf_submitting_4'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_4').text());}, 50);}else{jQuery('#gform_4').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [4, current_page]);} );} ); </script>