Calculators are made available to you as tools for independent use and are not intended to provide advice. We cannot and do not guarantee their applicability or accuracy. All examples are hypothetical and are for illustrative purposes only. Please visit your branch to seek personalized advice from qualified professionals for all personal finance issues.
GIC Calculator
See how your deposit grows over the term and compare standard and booster GIC returns.
GIC growth
What will your GIC be worth?
Enter your deposit, rate, and term to see the guaranteed value at maturity.
Your GIC
Deposit
The amount you invest. GICs are guaranteed — you can't lose the principal.
GIC
Choose one of our GICs, or adjust the inputs below to model your own term and rate.
GIC type
Standard pays one fixed rate for the whole term. Booster rates step up each year.
Term
Full years compound annually. A partial year (like 6 months) earns simple interest for that portion — rate × months ÷ 12.
(setOwnField)('years', val))(Math.max(0.5, Math.min(5, parseFloat(String($event.target.value).replace(/[^0-9.-]/g, '')) || years)))"
@blur="$event.target.value = fmtYearsOrMonths(years)"
/>
(setOwnField)('years', val))(+$event.target.value)"
@pointerdown="dragging = true"
@pointerup.window="dragging = false"
@pointercancel="dragging = false"
@blur="dragging = false"
:style="`background: linear-gradient(to right, var(--theme-card-accent) 0%, var(--theme-card-accent) ${(((years) - (0.5)) / ((5) - (0.5))) * 100}%, var(--theme-separator) ${(((years) - (0.5)) / ((5) - (0.5))) * 100}%, var(--theme-separator) 100%)`"
/>
Interest rate
Annual rate, fixed for the whole term.
(setOwnField)('rate', val))(Math.max(0.25, Math.min(10, parseFloat(String($event.target.value).replace(/[^0-9.-]/g, '')) || rate)))"
@blur="$event.target.value = fmtPct2(rate)"
/>
(setOwnField)('rate', val))(+$event.target.value)"
@pointerdown="dragging = true"
@pointerup.window="dragging = false"
@pointercancel="dragging = false"
@blur="dragging = false"
:style="`background: linear-gradient(to right, var(--theme-card-accent) 0%, var(--theme-card-accent) ${(((rate) - (0.25)) / ((10) - (0.25))) * 100}%, var(--theme-separator) ${(((rate) - (0.25)) / ((10) - (0.25))) * 100}%, var(--theme-separator) 100%)`"
/>
Term
Booster GICs run in whole years — the rate steps up each year.
(setOwnField)('boosterYears', val))(Math.max(1, Math.min(5, parseFloat(String($event.target.value).replace(/[^0-9.-]/g, '')) || boosterYears)))"
@blur="$event.target.value = fmtYears(boosterYears)"
/>
(setOwnField)('boosterYears', val))(+$event.target.value)"
@pointerdown="dragging = true"
@pointerup.window="dragging = false"
@pointercancel="dragging = false"
@blur="dragging = false"
:style="`background: linear-gradient(to right, var(--theme-card-accent) 0%, var(--theme-card-accent) ${(((boosterYears) - (1)) / ((5) - (1))) * 100}%, var(--theme-separator) ${(((boosterYears) - (1)) / ((5) - (1))) * 100}%, var(--theme-separator) 100%)`"
/>
Rate per year
Each year of the term compounds at its own rate. Booster rates typically rise year over year.
Total interest
Growth
Value at maturity
You'll earn
in guaranteed interest over .
At maturity
Deposit vs interest
At maturity
Growth over time
Deposit
Interest earned
Year by year
| Year | Rate | Interest | Balance |
|---|---|---|---|
Compare
Which term earns the most?
Compare the same deposit across different rates and terms.
Deposit
Every scenario below invests this same amount.
At maturity
GIC
GIC type
Term
((field, val) => setScenarioOwnField(i, field, val))('years', val))(Math.max(0.5, Math.min(5, parseFloat(String($event.target.value).replace(/[^0-9.-]/g, '')) || scenario.years)))"
@blur="$event.target.value = fmtYearsOrMonths(scenario.years)"
/>
((field, val) => setScenarioOwnField(i, field, val))('years', val))(+$event.target.value)"
@pointerdown="dragging = true"
@pointerup.window="dragging = false"
@pointercancel="dragging = false"
@blur="dragging = false"
:style="`background: linear-gradient(to right, var(--theme-card-accent) 0%, var(--theme-card-accent) ${(((scenario.years) - (0.5)) / ((5) - (0.5))) * 100}%, var(--theme-separator) ${(((scenario.years) - (0.5)) / ((5) - (0.5))) * 100}%, var(--theme-separator) 100%)`"
/>
Interest rate
((field, val) => setScenarioOwnField(i, field, val))('rate', val))(Math.max(0.25, Math.min(10, parseFloat(String($event.target.value).replace(/[^0-9.-]/g, '')) || scenario.rate)))"
@blur="$event.target.value = fmtPct2(scenario.rate)"
/>
((field, val) => setScenarioOwnField(i, field, val))('rate', val))(+$event.target.value)"
@pointerdown="dragging = true"
@pointerup.window="dragging = false"
@pointercancel="dragging = false"
@blur="dragging = false"
:style="`background: linear-gradient(to right, var(--theme-card-accent) 0%, var(--theme-card-accent) ${(((scenario.rate) - (0.25)) / ((10) - (0.25))) * 100}%, var(--theme-separator) ${(((scenario.rate) - (0.25)) / ((10) - (0.25))) * 100}%, var(--theme-separator) 100%)`"
/>
Term
((field, val) => setScenarioOwnField(i, field, val))('years', val))(Math.max(1, Math.min(5, parseFloat(String($event.target.value).replace(/[^0-9.-]/g, '')) || scenario.years)))"
@blur="$event.target.value = fmtYears(scenario.years)"
/>
((field, val) => setScenarioOwnField(i, field, val))('years', val))(+$event.target.value)"
@pointerdown="dragging = true"
@pointerup.window="dragging = false"
@pointercancel="dragging = false"
@blur="dragging = false"
:style="`background: linear-gradient(to right, var(--theme-card-accent) 0%, var(--theme-card-accent) ${(((scenario.years) - (1)) / ((5) - (1))) * 100}%, var(--theme-separator) ${(((scenario.years) - (1)) / ((5) - (1))) * 100}%, var(--theme-separator) 100%)`"
/>
Rate per year
setScenarioOwnField(i, field, val))('boosterRates', withRateAt(scenario.boosterRates, yi, parseFloat(String($event.target.value).replace(/[^0-9.]/g, ''))))"
@blur="$event.target.value = fmtPct2((scenario.boosterRates)[yi])"
/>
Interest earned
Growth