Features

I’ll never use regular roaming after travelling with a Canada/U.S. plan

Cheap Canada/U.S. roaming plans are widely available now, and they're by far the best option for frequent flyers

Last year, I signed up with Public Mobile and got a Canada/U.S./Mexico plan. However, I’ve only used it in Canada… until now.

I just got back from a trip to Seattle, Washington to attend Microsoft’s annual Build developer conference, which gave me my first real test of the U.S. part of my Canada/U.S./Mexico plan. And, well, I don’t think I can go back after this. For anyone who travels frequently, I strongly recommend getting a plan like this.

During my time in Seattle, I was mostly connected to Verizon and usually had 5G service, though it occasionally dropped down to LTE. Despite that, I had excellent, reliable connectivity that enabled me to use my phone just like at home with no worries at all.

Cost, obviously, is a factor, and plans like this — even the expensive ones from the Big Three — offer significant savings compared to the daily roaming rates providers offer. Rogers, Bell, and Telus, along with their respective flanker brands, charge anywhere from $12 to $16 per day for roaming, depending on the destination.

To put that in perspective, my four days in the U.S. would have cost me $48 on the $12/day rate, which is $13 more than what I pay Public Mobile for a month of service. It’s easy to see how quickly those roaming costs pile up.

Canadians aren’t the only ones frustrated with the high cost of roaming. The Canadian Radio-television and Telecommunications Commission (CRTC) asked telcos to share their plans to reduce roaming costs in October 2024. A month later, the Big Three told the commission they already took steps to reduce roaming costs, despite the daily U.S. roaming rate doubling since the Big Three launched the program in 2017. In November 2024, Freedom Mobile launched a petition calling out the Big Three for their high roaming rates.

Canada/U.S. plans take the guesswork out of roaming

But more than the cost is the peace of mind of not having to think about or manage roaming at all. It just works, from the moment you touch down and turn off airplane mode until you’re back on the plane to go home.

On past trips, I’d try to be strategic with my roaming, knowing that the daily fee would give me 24 hours of use. I’d pick days when I wouldn’t need data and turn off my roaming to avoid charges. Then on the days where I knew I’d need to roam, I’d try to turn it on as early as possible to maximize the time I was connected.

But with a plan like this that includes roaming, you don’t have any of that additional mental load. Even better, you don’t have that nagging thought in the back of your head that your next phone bill is going to be almost double what it usually is. It’s extremely liberating.

So, with all that in mind, I’d strongly recommend getting a plan with bundled roaming features like this if you travel a lot, assuming of course you frequently travel to the U.S. or Mexico. There are some other good options out there, like Freedom’s Roam Beyond, which gives further peace of mind for travel to other destinations beyond Mexico and the U.S. And where Canadian carriers don’t have a good offer, there’s always eSIM.

MobileSyrup may earn a commission from purchases made via our links, which helps fund the journalism we provide free on our website. These links do not influence our editorial content. Support us here.

Related Articles

Fatal error: Uncaught Aws\S3\Exception\PermanentRedirectException: Encountered a permanent redirect while requesting https://ms-staging-baselayer-static-assets.s3.ca-central-1.amazonaws.com/?list-type=2&delimiter=%2F&prefix=uploads%2Fwpcf7_uploads%2F. Are you sure you are using the correct region for this bucket? in /var/www/html/vendor/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php:49 Stack trace: #0 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(209): Aws\S3\PermanentRedirectMiddleware->Aws\S3\{closure}(Object(Aws\Result)) #1 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\Promise\Promise::callHandler(1, Object(Aws\Result), NULL) #2 /var/www/html/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}() #3 /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(163): GuzzleHttp\Promise\TaskQueue->run() #4 /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(189): GuzzleHttp\Handler\CurlMultiHandler->tick() #5 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\Handler\CurlMultiHandler->execute(true) #6 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\Promise\Promise->invokeWaitFn() #7 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending() #8 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList() #9 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending() #10 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList() #11 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\Promise\Promise->waitIfPending() #12 /var/www/html/vendor/aws/aws-sdk-php/src/AwsClientTrait.php(58): GuzzleHttp\Promise\Promise->wait() #13 /var/www/html/vendor/aws/aws-sdk-php/src/ResultPaginator.php(151): Aws\AwsClient->execute(Object(Aws\Command)) #14 /var/www/html/vendor/aws/aws-sdk-php/src/functions.php(52): Aws\ResultPaginator->valid() #15 /var/www/html/vendor/aws/aws-sdk-php/src/functions.php(69): Aws\map(Object(Aws\ResultPaginator), Object(Closure)) #16 [internal function]: Aws\flatmap(Object(Aws\ResultPaginator), Object(Closure)) #17 /var/www/html/wp-content/plugins/s3-uploads/inc/class-stream-wrapper.php(695): Generator->valid() #18 [internal function]: S3_Uploads\Stream_Wrapper->dir_readdir() #19 /var/www/html/wp-content/plugins/contact-form-7/includes/file.php(362): readdir(Resource id #734) #20 /var/www/html/wp-includes/class-wp-hook.php(322): wpcf7_cleanup_upload_files() #21 /var/www/html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #22 /var/www/html/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #23 /var/www/html/wp-includes/load.php(1280): do_action('shutdown') #24 [internal function]: shutdown_action_hook() #25 {main} thrown in /var/www/html/vendor/aws/aws-sdk-php/src/S3/PermanentRedirectMiddleware.php on line 49