Is your feature request related to a problem? Please describe.
Sub-issue of:
🐴 Epic card
Describe the solution you'd like
Pyvat handles postal codes since v1.0.2 (Spain regions).
Pyvat is capable of handling non-EU countries (see Egypt).
Make Pyvat handle VAT rates for regions of Canada using their postal codes.
The first letter of the postal code indicates the province/territory.
Explicit what happens for Canadians without a postal code (see Fallback section below).
Then update Monies and update automated tests.
Tax Rates by Province
📑 Canada - tax rates by province (Dec 2025)
Use the Total Tax column. Rates range from 5% to 15%.
⚠️ Registration constraint: We can only charge the provincial tax (PST/QST/RST) where we are registered. Where we are NOT registered, charge only the federal GST (5%). This means some provinces may currently be charged at 5% (GST only) even if the table shows a higher total rate. Tax values must be easy to update as new provincial registrations are finalized.
| Prefix |
Province/Territory |
Total Tax (when registered) |
Notes |
Example Postal Code |
| (none) |
No postal code |
13% |
Fallback: Ontario rate |
N/A |
| A |
Newfoundland and Labrador |
15% |
HST |
A1A 5T9 |
| B |
Nova Scotia |
14% |
HST |
B3H 1Y2 |
| C |
Prince Edward Island |
15% |
HST |
C1A 4P3 |
| E |
New Brunswick |
15% |
HST |
E2L 4H8 |
| G |
Quebec |
14.975% |
GST + QST — not currently registered → charge 5% |
G1A 0A2 |
| H |
Quebec |
14.975% |
GST + QST — not currently registered → charge 5% |
H1A 0A1 |
| J |
Quebec |
14.975% |
GST + QST — not currently registered → charge 5% |
J1A 1A1 |
| K |
Ontario |
13% |
HST |
K1A 0B1 |
| L |
Ontario |
13% |
HST |
L5B 4M7 |
| M |
Ontario |
13% |
HST |
M5V 3L9 |
| N |
Ontario |
13% |
HST |
N2L 3G1 |
| P |
Ontario |
13% |
HST |
P7B 5E1 |
| R |
Manitoba |
12% |
GST + RST — not currently registered → charge 5% |
R2C 0A1 |
| S |
Saskatchewan |
11% |
GST + PST (registered) |
S7K 1A1 |
| T |
Alberta |
5% |
GST only |
T5J 0N3 |
| V |
British Columbia |
12% |
GST + PST (registered) |
V6B 4N6 |
| X |
Northwest Territories / Nunavut |
5% |
GST only |
X0A 0H0 |
| Y |
Yukon |
5% |
GST only |
Y1A 0A1 |
Registration Numbers
These must appear in the free text section of Canadian invoices:
- Federal GST/HST: 77733 7361 RT0001
- British Columbia PST: 77733 7361 BT0001
- Saskatchewan PST: Account #8158362 — Business #777337361
Print all relevant registration numbers for the province of the invoice. Display them even if it means printing all of them, unless we can determine which ones are applicable.
Invoice Free Text Requirements
For all Canadian invoices, the free text section must include:
- The applicable PST rate % and GST rate % separately (their sum = total tax rate on the invoice).
- All applicable registration numbers (see above).
- For customers without a postal code: a sentence encouraging them to add their address in their account dashboard, e.g.:
"Your tax rate is based on the Ontario default. To ensure accurate tax calculation, please update your address in your account dashboard."
B2B Handling
- No VAT exemption for B2B: Canadian B2B customers are subject to the same tax as B2C.
- VAT/GST numbers may be collected but have no effect on pricing or tax application.
Fallback for Missing Postal Code
- If a customer has no postal code → apply Ontario rate (13%) as default.
- This fallback must be configurable.
- For renewals of customers without a postal code: apply the fallback rate and include the free text notice (see above).
⚠️ Quebec and Manitoba rates pending finance team confirmation — charge GST-only (5%) in the meantime.
Monitoring
- Metabase: track Canadian invoices — none should have 0% VAT after this is live.
- Track how many existing customers update their address/postal code after launch, to evaluate invoicing accuracy over time.
- Klaviyo: check Canada segment, and observe Renewal Discount/Regular Price property are updated (meaning no Canada customer should pay Single $59 but a little less)
Create a Canada folder in https://data.wp-media.me/collection/69-vat
Tasks
Release
Describe alternatives you've considered
N/A
Is your feature request related to a problem? Please describe.
Sub-issue of:
🐴 Epic card
Describe the solution you'd like
Pyvat handles postal codes since v1.0.2 (Spain regions).
Pyvat is capable of handling non-EU countries (see Egypt).
Make Pyvat handle VAT rates for regions of Canada using their postal codes.
The first letter of the postal code indicates the province/territory.
Explicit what happens for Canadians without a postal code (see Fallback section below).
Then update Monies and update automated tests.
Tax Rates by Province
📑 Canada - tax rates by province (Dec 2025)
Use the Total Tax column. Rates range from 5% to 15%.
Registration Numbers
These must appear in the free text section of Canadian invoices:
Print all relevant registration numbers for the province of the invoice. Display them even if it means printing all of them, unless we can determine which ones are applicable.
Invoice Free Text Requirements
For all Canadian invoices, the free text section must include:
B2B Handling
Fallback for Missing Postal Code
Monitoring
Create a Canada folder in https://data.wp-media.me/collection/69-vat
Tasks
Release
/_scripts/script-klaviyo-user-force-update.php?country=CADescribe alternatives you've considered
N/A