News

Koodo’s $45/60GB plan returns, but it’s still not worth your money

There are cheaper, better plans out there

Koodo logo on a smartphone.

Telus-owned Koodo launched a new $45/60GB plan, effectively rendering two of its other wireless plans redundant. Unfortunately, the new plan doesn’t really offer a discount either.

Check out Koodo’s current plan options below (new options in bold). Note that each price includes a $10/mo auto-pay discount if you pay via your bank account. Additionally, all the plans have 4G data speeds capped at 100Mbps and unlimited Canada-wide calling and texting, plus one free perk with options varying from plan to plan.

  • $35/10GB
  • $45/40GB
  • $45/60GB
  • $50/60GB
  • $60/100GB

The $45/60GB plan makes Koodo’s $45/40GB and $50/60GB plans redundant. There’s no point getting the 40GB plan when you get 20GB more data for the same price, and likewise there’s no point paying $5/mo for the exact same plan.

Koodo plans as of July 4, 2025.

It’s not entirely clear how long the $45/60GB plan will be around. It’s marked as a promotional plan, but almost every other plan on Koodo’s website is, so that doesn’t mean much.

Notably, the $45/60GB actually returns Koodo to what it offered back in mid-June. Last month, Koodo and Virgin offered $40/60GB plans, and then increased the price to $45 to match Fido. Sometime between June 18 and now, Koodo upped the $45/60GB plan again to $50/60GB, but now the cheaper (but not the cheapest) version is back. At the time of writing, Virgin and Fido offered $45/60GB options.

As I’ve said many times before, however, there are cheaper options out there. I don’t think it makes sense for anyone to get the $45/60GB plan from Koodo when Public Mobile has a $36/60GB 5G plan with Canada/U.S./Mexico roaming, or while Freedom Mobile has a $39/60GB 5G Canada/U.S./Mexico plan.

Those in the market for a new plan should check out MobileSyrup‘s plan search tool to help find the best wireless deals.

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