Short version for busy Canadian merchants
If you are under the federal small-supplier threshold, you may not need to register for GST/HST yet. Once you cross it, most merchants need to turn on GST or HST collection fast, because backdating the tax bill out of your own margin is brutal.
The second trap is thinking GST/HST is the whole Canadian tax story. It is not. WooCommerce merchants, Shopify stores, and Stripe-led custom checkouts all run into the same provincial edge cases: BC PST, Saskatchewan PST, Manitoba RST, and Quebec QST.
Where merchants usually get burned
Shopify: the tax engine can calculate rates cleanly, but only after you enter the registrations you actually have. If you register late, Shopify does not magically know which old orders should have included tax.
Stripe: subscription and SaaS businesses love Stripe because Stripe Tax is powerful, but it still depends on your registration map, product tax codes, and nexus settings. Wrong product classification equals wrong tax collection at scale.
WooCommerce: tax flexibility is great, but the burden is on you. If your store adds provinces one by one and rates were entered manually, stale tax tables are a classic source of Canadian checkout errors.
| Merchant type | Most common miss | Why it hurts |
|---|---|---|
| Shopify store | GST/HST is on, QST/PST registrations are not | Checkout looks fine in Ontario and quietly wrong in Quebec or BC |
| Stripe SaaS | Product tax code left generic | Digital supplies get mis-taxed across multiple provinces |
| WooCommerce store | Manual rate table never updated | Old tax logic sticks around long after the business expanded |
| Hybrid online + local pickup | Pickup orders treated like shipped orders | The merchant assumes one rate fits every flow |
Bottom line
If your business is growing and you sell across more than one province, treat tax setup as part of checkout architecture — not bookkeeping cleanup. The right processor matters, but so do tax registrations, rate tables, and product taxability rules.