Photo by Giorgio Tomassetti on Unsplash
Key terms explained
- Debt snowball: A repayment strategy where you pay off debts in order from smallest balance to largest, regardless of interest rate. Clearing small balances quickly builds momentum.
- Debt avalanche: A repayment strategy where you pay off debts in order from highest annual interest rate to lowest. This minimises total interest paid over time.
- Minimum payment: The lowest monthly amount a lender requires you to pay to keep the account in good standing. You always pay at least this amount on every debt.
- Extra monthly payment: Any amount you can afford above the combined minimum payments. This extra money is directed entirely at the current target debt.
- Payment rollover: When a debt is fully paid off, its minimum payment (and any extra payment) is redirected to the next target debt, accelerating payoff.
- Monthly interest rate: The annual interest rate divided by 12. For a 18% annual rate, the monthly rate is 1.5% (0.015 as a decimal).
- Amortisation: The process of paying down a loan through regular payments that cover both interest and principal.
- Principal: The remaining balance you owe on a debt, not counting future interest.
- GS2Web Calculator: A GSheetPress add-on feature that turns a specially formatted Google Sheet into a hosted, interactive web calculator.
What this guide covers and what it excludes
This guide models up to five debts with fixed minimum payments, a single extra monthly payment amount, and constant interest rates. It does not model variable interest rates, promotional 0% periods, fees, penalty charges, or income-based repayment plans. The comparison assumes you make payments every calendar month without gaps. Verify your actual minimum payments and interest rates with each lender before making financial decisions.
Prerequisites
- A Google account with access to Google Sheets.
- The GSheetPress GS2Web add-on installed from the Google Workspace Marketplace. Visit GSheetPress to create or match your account and confirm your subscription includes the Calculator entitlement before starting.
- A dedicated sample workbook — do not use a spreadsheet containing real personal financial data, because the sharing step later makes the file editable by anyone with the link.
Build the debt data table
The foundation of the model is a plain data table listing each debt. Open your sample workbook, create a new tab and name it DebtData.
Enter the debt table headers and sample data
In row 1, type the following headers exactly as shown:
| Cell | Header text |
|---|---|
| A1 | Debt Name |
| B1 | Current Balance ($) |
| C1 | Annual Rate (%) |
| D1 | Minimum Payment ($) |
| E1 | Snowball Order |
| F1 | Avalanche Order |
In rows 2 through 6, enter the five sample debts below. These figures are illustrative only — replace them with your own when testing.
| A — Debt Name | B — Balance ($) | C — Annual Rate (%) | D — Min Payment ($) |
|---|---|---|---|
| Credit Card A | 1200 | 22 | 35 |
| Personal Loan | 4500 | 11 | 95 |
| Credit Card B | 800 | 19 | 25 |
| Car Loan | 9000 | 7 | 180 |
| Medical Debt | 600 | 0 | 50 |
Add the strategy order columns
The snowball method targets the smallest balance first. The avalanche method targets the highest interest rate first. Rather than sorting the whole table (which would break row references), use RANK formulas to assign a priority number to each debt.
Click cell E2 and paste this formula, then press Enter:
=RANK(B2, $B$2:$B$6, 1)This ranks the balance in B2 among all five balances in ascending order (1 = smallest). Copy E2 down to E3:E6.
Click cell F2 and paste this formula, then press Enter:
=RANK(C2, $C$2:$C$6, 0)This ranks the interest rate in C2 among all five rates in descending order (1 = highest). Copy F2 down to F3:F6.
You now know which debt gets attacked first (rank 1), second (rank 2), and so on, for each strategy.
Build the monthly schedule helper tables
Create a second tab named Schedules. This tab will hold two side-by-side amortisation tables — one for each strategy — running for up to 120 months (10 years). If your debts will not clear within 120 months with the chosen extra payment, extend the row count accordingly.
Snowball schedule — column layout
Start the snowball schedule at column A. In row 1, type these headers:
| Cell | Header |
|---|---|
| A1 | Month |
| B1 | SB_Bal1 |
| C1 | SB_Bal2 |
| D1 | SB_Bal3 |
| E1 | SB_Bal4 |
| F1 | SB_Bal5 |
| G1 | SB_Interest |
| H1 | SB_Payment |
Each SB_Bal column tracks the remaining balance on one debt (ordered by snowball rank). Start the avalanche schedule at column J, using the same structure with AV_ prefixes. Leave column I blank as a separator.
Map debts to strategy order
Create a small lookup table on the DebtData tab starting at cell H1 to map rank numbers to the correct rows. In H1 type SB_Rank, in I1 type AV_Rank.
In H2, paste:
=MATCH(1, DebtData!$E$2:$E$6, 0) + 1This finds the row offset of the debt ranked 1 by snowball order. Repeat for ranks 2–5 in H3:H6 by replacing the first argument with 2, 3, 4, 5. Do the same in I2:I6 using the avalanche rank column F.
These helper cells let you pull the correct balance, rate, and minimum payment in schedule formulas without hardcoding row numbers.
Snowball schedule — month 0 (starting balances)
In the Schedules tab, row 2 represents month 0 (today). In A2 type 0.
In B2, paste the starting balance for the debt with snowball rank 1:
=INDEX(DebtData!$B$2:$B$6, MATCH(1, DebtData!$E$2:$E$6, 0))Repeat for C2 through F2, changing the MATCH first argument to 2, 3, 4, 5 respectively.
Leave G2 and H2 blank (no interest or payment in month 0).
Snowball schedule — month 1 onward
Row 3 represents month 1. In A3 type =A2+1.
The logic for each balance column is: apply monthly interest, subtract the payment directed at this debt this month, but never go below zero. The payment on the current target debt (rank 1) is all minimum payments combined plus the extra payment. Once the target clears, the next-ranked debt gets the rollover.
For a working model that fits a beginner, use the following approach in B3 (rank-1 debt balance for month 1):
=MAX(0, B2 * (1 + INDEX(DebtData!$C$2:$C$6, MATCH(1, DebtData!$E$2:$E$6, 0)) / 1200) - H3)Here, INDEX(...)/1200 converts the annual percentage to a monthly decimal. H3 holds the total payment directed at this debt this month (built below). MAX(0,...) prevents negative balances.
For C3 through F3 (debts ranked 2–5), the formula is similar but the payment is only the minimum payment for that debt when it is not the current target:
=MAX(0, C2 * (1 + INDEX(DebtData!$C$2:$C$6, MATCH(2, DebtData!$E$2:$E$6, 0)) / 1200) - INDEX(DebtData!$D$2:$D$6, MATCH(2, DebtData!$E$2:$E$6, 0)))Adjust the MATCH first argument (2, 3, 4, 5) for each column. When a debt's balance is already 0, MAX(0,...) keeps it at 0.
Calculate total monthly interest and payment
In G3, sum the interest accrued across all five debts this month:
=B2 * INDEX(DebtData!$C$2:$C$6, MATCH(1, DebtData!$E$2:$E$6, 0)) / 1200 + C2 * INDEX(DebtData!$C$2:$C$6, MATCH(2, DebtData!$E$2:$E$6, 0)) / 1200 + D2 * INDEX(DebtData!$C$2:$C$6, MATCH(3, DebtData!$E$2:$E$6, 0)) / 1200 + E2 * INDEX(DebtData!$C$2:$C$6, MATCH(4, DebtData!$E$2:$E$6, 0)) / 1200 + F2 * INDEX(DebtData!$C$2:$C$6, MATCH(5, DebtData!$E$2:$E$6, 0)) / 1200In H3, enter the extra payment amount directed at the current target. Because the extra payment and the released minimum payments all pile onto the rank-1 debt until it is cleared, then move to rank-2, you need a small helper. For simplicity, reference a named cell. Go to the DebtData tab, click cell K1 and type ExtraPayment as a label. In K2, enter the extra monthly amount — type 200 for the worked example.
Back in Schedules H3, the payment aimed at the rank-1 debt is all five minimum payments plus the extra, but only while the rank-1 balance remains positive. If rank-1 is already zero, H3 should be 0 (the minimum payment for rank-1 was redirected and already baked into the next target's column). For the full rollover logic, use this in H3:
=IF(B2 > 0, SUM(INDEX(DebtData!$D$2:$D$6, MATCH(1, DebtData!$E$2:$E$6, 0)), INDEX(DebtData!$D$2:$D$6, MATCH(2, DebtData!$E$2:$E$6, 0)), INDEX(DebtData!$D$2:$D$6, MATCH(3, DebtData!$E$2:$E$6, 0)), INDEX(DebtData!$D$2:$D$6, MATCH(4, DebtData!$E$2:$E$6, 0)), INDEX(DebtData!$D$2:$D$6, MATCH(5, DebtData!$E$2:$E$6, 0))) + DebtData!$K$2, IF(C2 > 0, SUM(INDEX(DebtData!$D$2:$D$6, MATCH(2, DebtData!$E$2:$E$6, 0)), INDEX(DebtData!$D$2:$D$6, MATCH(3, DebtData!$E$2:$E$6, 0)), INDEX(DebtData!$D$2:$D$6, MATCH(4, DebtData!$E$2:$E$6, 0)), INDEX(DebtData!$D$2:$D$6, MATCH(5, DebtData!$E$2:$E$6, 0))) + DebtData!$K$2, 0))This formula checks whether rank-1 still has a balance. If yes, it directs all five minimum payments plus the extra at it. Once rank-1 clears, it checks rank-2, and so on. For a full five-debt rollover, extend the nested IF chain through all ranks. The pattern is consistent: each level removes the cleared debt's minimum from the sum and adds the extra payment to the next target.
Copy rows 3 (A3:H3) down to row 122 (months 1 through 120).
Avalanche schedule
Build the avalanche schedule in columns J through Q using exactly the same structure, but replace all MATCH first arguments for rank lookups with references to the avalanche rank column F instead of the snowball rank column E. The formulas are otherwise identical in shape. This is the power of the rank-map approach — you change one lookup column reference and the whole schedule reorders itself.
Build the comparison summary table
Create a third tab named Summary. This is where the calculator's result cells will live. You can also explore how GSheetPress table tools can help you present structured financial summaries on the web.
Summary formulas
In cell A1, type Metric. In B1, type Snowball. In C1, type Avalanche.
In A2, type Months to payoff. In B2, paste:
=MATCH(0, Schedules!B3:B122 + Schedules!C3:C122 + Schedules!D3:D122 + Schedules!E3:E122 + Schedules!F3:F122, 0)Press Ctrl+Shift+Enter (or Cmd+Shift+Enter on Mac) to enter this as an array formula — Google Sheets will wrap it in ARRAYFORMULA automatically if needed; alternatively type it with ARRAYFORMULA explicitly:
=ARRAYFORMULA(MATCH(0, Schedules!B3:B122 + Schedules!C3:C122 + Schedules!D3:D122 + Schedules!E3:E122 + Schedules!F3:F122, 0))This finds the first month where all snowball balances sum to zero. In C2, build the same formula pointing to the avalanche columns (J through N in Schedules).
In A3, type Total interest paid ($). In B3:
=SUM(Schedules!G3:G122)In C3, use the equivalent sum for the avalanche interest column.
In A4, type Total paid ($). In B4:
=SUM(Schedules!H3:H122)And the avalanche equivalent in C4.
In A5, type Interest saved vs other method ($). In B5:
=C3 - B3A positive number here means the snowball costs more interest than the avalanche. In C5:
=B3 - C3Expected results for the worked example
Using the five sample debts and a $200 extra monthly payment, you should see results approximately as follows. Small rounding differences are normal depending on whether interest is rounded each month.
| Metric | Snowball | Avalanche |
|---|---|---|
| Months to payoff | ~38 | ~36 |
| Total interest paid ($) | ~$2,150 | ~$1,820 |
| Total paid ($) | ~$18,250 | ~$17,920 |
| Interest saved vs other ($) | — | ~$330 |
These are approximate figures for the worked inputs. Your actual results will differ based on your real balances, rates, and extra payment amount. For a deeper explanation of how these strategies compare mathematically, see the Consumer Financial Protection Bureau's explanation of debt repayment methods.
Alternative scenario
Reduce ExtraPayment in DebtData K2 from 200 to 50. The months to payoff for both strategies will increase noticeably (expect roughly 55–65 months), and the interest saving from the avalanche method will grow larger in absolute terms. This illustrates why the extra payment size matters as much as the strategy chosen.
Build the web calculator with GSheetPress GS2Web
The Summary tab holds the results, but to let users enter their own debt figures without editing formulas, publish an interactive calculator. The calculator will accept seven inputs: five debt balances (the model currently works with fixed names and rates in the helper table, so for the web form we will accept the five balances and two strategy-level inputs — total minimum payments and extra payment — keeping the form practical and bounded).
You can review the GSheetPress Calculator feature overview before starting.
Open the Calculator wizard
- In your sample workbook, click Extensions in the top menu.
- Hover over GS2Web SaaS (or the name of your installed add-on).
- Click Calculator, then click New Calculator.
- When prompted, enter the name Debt Payoff Comparison.
- Set the number of inputs to 7 (do not count the Calculate button).
- Choose whether to include graphs — for this model, graphs are optional; you may skip them.
- Click the tab the wizard creates. The add-on generates headers in row 1: Labels, Input Type, Required, Data, Default, ToolTips, Inputs, Rules across columns A through H. Do not edit these headers.
Input row setup — seven inputs, rows 2 through 8
For seven inputs the layout is: rows 2–8 for inputs, row 9 for the button, row 10 for the merged result separator, row 11 for result headings, and results begin at row 12.
Row 2 — Debt 1 balance
- A2 — Label: Debt 1 Balance ($)
- B2 — Input Type: Number
- C2 — Required: Check the checkbox (tick it)
- D2 — Data: Leave blank
- E2 — Default: 1200
- F2 — ToolTips: Enter the current outstanding balance for your first debt.
- H2 — Rules: min:0
Row 3 — Debt 2 balance
- A3 — Label: Debt 2 Balance ($)
- B3 — Input Type: Number
- C3 — Required: Check the checkbox
- D3 — Data: Leave blank
- E3 — Default: 4500
- F3 — ToolTips: Enter the current outstanding balance for your second debt.
- H3 — Rules: min:0
Row 4 — Debt 3 balance
- A4 — Label: Debt 3 Balance ($)
- B4 — Input Type: Number
- C4 — Required: Check the checkbox
- D4 — Data: Leave blank
- E4 — Default: 800
- F4 — ToolTips: Enter the current outstanding balance for your third debt. Enter 0 if unused.
- H4 — Rules: min:0
Row 5 — Debt 4 balance
- A5 — Label: Debt 4 Balance ($)
- B5 — Input Type: Number
- C5 — Required: Check the checkbox
- D5 — Data: Leave blank
- E5 — Default: 9000
- F5 — ToolTips: Enter the current outstanding balance for your fourth debt. Enter 0 if unused.
- H5 — Rules: min:0
Row 6 — Debt 5 balance
- A6 — Label: Debt 5 Balance ($)
- B6 — Input Type: Number
- C6 — Required: Check the checkbox
- D6 — Data: Leave blank
- E6 — Default: 600
- F6 — ToolTips: Enter the current outstanding balance for your fifth debt. Enter 0 if unused.
- H6 — Rules: min:0
Row 7 — Combined minimum payments
- A7 — Label: Total Monthly Minimums ($)
- B7 — Input Type: Number
- C7 — Required: Check the checkbox
- D7 — Data: Leave blank
- E7 — Default: 385
- F7 — ToolTips: Add up the minimum monthly payments on all your debts and enter the total here.
- H7 — Rules: min:1
Row 8 — Extra monthly payment
- A8 — Label: Extra Monthly Payment ($)
- B8 — Input Type: Number
- C8 — Required: Check the checkbox
- D8 — Data: Leave blank
- E8 — Default: 200
- F8 — ToolTips: Enter any extra amount you can pay each month above your minimums. Enter 0 if none.
- H8 — Rules: min:0
Row 9 — Calculate button (generated, do not delete)
- A9 — Label: Calculate
- B9 — Input Type: Button
- D9 — Data: main
- E9: Leave blank (E is Reset for buttons, not used here)
Rows 10 and 11 — separator and result headings (generated)
Row 10 is the merged Result Fields separator generated by the wizard. Row 11 is where you type result column headings. Type Result in A11, Snowball in B11, and Avalanche in C11.
Connect inputs to the DebtData worksheet
Column G (Inputs) holds the values entered by users at runtime. Column E holds the defaults used when testing before publishing. Before writing result formulas, copy the default values from E to G so your formulas return real numbers during testing.
- Select cells E2:E8.
- Press Ctrl+C (or Cmd+C).
- Click cell G2.
- Go to Edit → Paste special → Values only.
Now G2:G8 contain the default numbers. Update the DebtData tab to reference these G cells. On the DebtData tab:
- In B2, change the hardcoded 1200 to
=CalculatorTabName!G2, replacing CalculatorTabName with the actual name of the calculator tab the wizard created. - Repeat for B3 through B6, pointing to G3, G4, G5, G6 respectively.
- In K2 (the ExtraPayment cell), enter
=CalculatorTabName!G8. - The combined minimum payments input (G7) does not feed directly into per-debt schedules in this model, but you can display it in a result row as a cross-check against the scheduled payments.
When a user submits the web form, G2:G8 are overwritten with their values, all schedule formulas recalculate automatically, and the Summary results update. Never put result formulas in column G, as it is overwritten on every submission.
Enter result formulas — rows 12 onward
Each result row has a label in column A and values in B and C. Click each cell, type the leading = sign, paste the formula, and press Enter.
Row 12 — Months to payoff
- A12: Months to Payoff
- B12:
=Summary!B2 - C12:
=Summary!C2
Row 13 — Total interest paid
- A13: Total Interest ($)
- B13:
=ROUND(Summary!B3, 2) - C13:
=ROUND(Summary!C3, 2)
Row 14 — Total amount paid
- A14: Total Paid ($)
- B14:
=ROUND(Summary!B4, 2) - C14:
=ROUND(Summary!C4, 2)
Row 15 — Interest saving
- A15: Interest Saving (Avalanche vs Snowball, $)
- B15: Leave blank
- C15:
=ROUND(Summary!C5, 2)
Row 16 — Faster payoff by
- A16: Faster Payoff (months)
- B16: Leave blank
- C16:
=Summary!B2 - Summary!C2
A positive number in C16 means the avalanche finishes faster. A zero means both strategies take the same number of months (common when the highest-interest debt also has the smallest balance). You can also learn about presenting multi-column results from the GSheetPress support resources.
Frequently asked questions
What if two debts have the same balance or the same interest rate?
RANK assigns the same rank to tied values, which causes MATCH to find whichever matching row comes first. If two debts have identical balances or rates, add a small tiebreaker — for example, add 0.001 to one rate — so every rank is unique. In a production model you could build a more robust tiebreaker using helper columns that combine rank with row number, but for a five-debt worked model the manual tiebreaker is sufficient.
Can I add more than five debts?
Yes. Extend the DebtData table with rows 7 and beyond, update all MATCH range references from $B$2:$B$6 to $B$2:$B$7 (and so on), add corresponding balance columns to the Schedules tab, update the Summary formulas to include the new columns, and add extra input rows in the calculator tab (remembering to increment all row numbers below accordingly). You do not need to create a new calculator — add more inputs within the same wizard or extend the existing calculator tab rows manually, keeping the button and result section below the new inputs.
Why does the avalanche not always save a large amount of interest?
The interest saving from the avalanche method depends on the spread between your highest and lowest interest rates and on how long each debt survives. If your highest-rate debt also happens to have the smallest balance, it clears quickly under either method, so the two strategies behave similarly and the saving is small. The avalanche produces its largest savings when you have a high-rate debt with a large balance that would otherwise linger for many months under the snowball method.
Troubleshooting
MATCH returns a #N/A error
This usually means no debt has the rank you are looking for — typically because two debts share the same balance or rate (see the FAQ above on ties). Check that E2:E6 and F2:F6 each contain the values 1, 2, 3, 4, 5 with no duplicates. If they do not, add tiebreakers to the raw data.
All balances show 0 from month 1
The payment column H3 is larger than the starting balance plus interest. Check that your extra payment value in DebtData K2 is reasonable relative to the total balance. Also confirm that the SUM of minimum payments in H3 references the correct minimum payment column (D in DebtData).
Summary B2 or C2 returns #N/A
This means the MATCH did not find a month where all balances sum to zero — the debts are not paid off within the 120-row schedule. Either extend the schedule to row 242 (months 1–240) or reduce the extra payment scenario to one that clears within the modelled period. Never wrap this error in IFERROR(...,0) because a zero would be misleading (it would appear to say all debts are paid in month 0).
G cells are empty after publishing
Before the first submission, G cells may be empty, causing formula errors. Always paste the default values from E2:E8 into G2:G8 using Paste Special → Values Only before publishing. This ensures the spreadsheet has valid numbers to calculate with until a user submits the form.
Avalanche result columns show the same figures as snowball
The two schedules reference the same rank lookup column. Confirm that the avalanche schedule formulas use MATCH against column F (AV rank) and the snowball formulas use column E (SB rank). A quick check: the rank-1 debt for snowball should be Medical Debt ($600 balance) in the worked example, and the rank-1 debt for avalanche should be Credit Card A (22% rate).
Publish and test your web calculator
- Make sure you are on the calculator tab the wizard created (not DebtData, Schedules, or Summary).
- Share the workbook so the add-on can publish it. Click Share in the top-right corner of Google Sheets. Under General access, change the setting to Anyone with the link and set the role to Editor. Click Done. Important: this setting means anyone who obtains the spreadsheet URL can edit the file. Use only your dedicated sample workbook — never a file containing real personal or financial data.
- Click Extensions → GS2Web SaaS → Calculator → Publish Calculator. Wait until you see the confirmation message that publishing is complete.
- In the same Calculator menu, click Calculator Link. A sheet opens listing your published calculators. Find the row whose Sheet Name matches Debt Payoff Comparison.
- Click Get Links if the row appears incomplete or empty. This refreshes the published URL list.
- In column C of that row you will see the public Link. Open it. Do not open the Edit Link in column B — that opens the spreadsheet editor, not the public form.
- On the public calculator page, enter the five worked-example balances (1200, 4500, 800, 9000, 600), total minimums (385), and extra payment (200). Click Calculate.
- Confirm that the results match the expected values in the comparison table earlier in this guide: approximately 38 months for snowball, 36 months for avalanche, and roughly $330 of interest saved by the avalanche method.
- If you embed the calculator on a website, copy the iframe code from column D of the Calculator Link sheet and paste it into an HTML block on your page. Republishing the same calculator in the future retains its existing public link — you do not need to update embedded iframes. You can also explore additional GSheetPress tools to complement your published calculator.