Tally — monthly budget

Pro workbook: Budget, Transactions, Year, Setup, Formulas. Sample data, real formulas.

Monthly budgetMonthSeptember 2026
Yellow cells are yours to fill. Actuals come from the Transactions sheet for the month in Setup.
IncomePlannedActualDifference
Salary3,900.003,900.000.00
Freelance400.00450.0050.00
Other income0.000.000.00
Total income4,300.004,350.0050.00
ExpensesPlannedActualDifference% of income
Housing1,400.001,400.000.0032.2%
Utilities180.00151.4028.603.5%
Groceries520.00519.950.0512.0%
Transport210.0089.00121.002.0%
Insurance120.00120.000.002.8%
Debt payments300.00300.000.006.9%
Savings600.00600.000.0013.8%
Health90.00140.00-50.003.2%
Personal250.0096.00154.002.2%
Other150.0060.0090.001.4%
Total expenses3,820.003,476.35343.6579.9%
Bottom linePlannedActualDifference
Left over (income − expenses)480.00873.65393.65
Savings rate (savings ÷ income)14.0%13.8%
How to use: type this month's plan in the yellow Planned cells, log spending on the Transactions sheet.
Difference for expenses is Planned − Actual: red means you overspent, green means you came in under.
Add a category: insert a row inside the Expenses block; the totals and formatting extend automatically.
Transactions
One row per payment or income. Category must match the Setup list — the cell offers a dropdown.
DateDescriptionCategoryAmount
2026-09-01September salarySalary3,900.00
2026-09-01RentHousing1,400.00
2026-09-03ElectricityUtilities96.40
2026-09-04Weekly shopGroceries131.20
2026-09-05Transit passTransport89.00
2026-09-06Car insuranceInsurance120.00
2026-09-08Student loanDebt payments300.00
2026-09-08Transfer to savingsSavings600.00
2026-09-11Weekly shopGroceries118.75
2026-09-12Logo jobFreelance450.00
2026-09-14DentistHealth140.00
2026-09-18Weekly shopGroceries142.10
2026-09-20Concert ticketsPersonal96.00
2026-09-22InternetUtilities55.00
2026-09-25Weekly shopGroceries127.90
2026-09-27Birthday presentOther60.00
2026-08-01August salarySalary3,900.00
2026-08-01RentHousing1,400.00
2026-08-09Weekly shopGroceries510.30
2026-08-15HolidayPersonal640.00
Rows outside the month chosen in Setup are greyed out: they still count on the Year sheet, just not in this month's Budget.
These 20 rows are examples — delete them and start logging.
The formulas read rows 5–400 (about a year of daily entries). Need more? Change 400 to 2000 in the Budget and Year formulas — the Formulas sheet lists them.
Year at a glance
Twelve months from the Setup month back. Income, expenses and what was left, from the Transactions sheet.
MonthIncomeExpensesLeft overSavings rate
Oct 20250.000.000.000.0%
Nov 20250.000.000.000.0%
Dec 20250.000.000.000.0%
Jan 20260.000.000.000.0%
Feb 20260.000.000.000.0%
Mar 20260.000.000.000.0%
Apr 20260.000.000.000.0%
May 20260.000.000.000.0%
Jun 20260.000.000.000.0%
Jul 20260.000.000.000.0%
Aug 20263,900.002,550.301,349.700.0%
Sep 20264,350.003,476.35873.6513.8%
Total8,250.006,026.652,223.357.3%
Setup
Pick the month to budget and keep the category list here. Both feed every other sheet.
Month (first day)2026-09-01Type the 1st of any month — Budget and Year follow it.
Currency symbol$
Categories (income)Categories (expenses)
SalaryHousing
FreelanceUtilities
Other incomeGroceries
Transport
Insurance
Debt payments
Savings
Health
Personal
Other
Rename a category here and the Budget sheet, the Transactions dropdown and the Year sheet all update.
Keep income and expense names different from each other — the budget tells them apart by name.
How the formulas work
Every formula in this workbook, in plain words. Nothing is hidden and nothing needs a macro. Formulas are shown without the leading = sign.
WhereFormulaWhat it does
Budget · ActualSUMIFS(Transactions!D5:D400, Transactions!C5:C400, A5, Transactions!A5:A400, ">="&Setup!B3, Transactions!A5:A400, "<="&EOMONTH(Setup!B3,0))Adds every Transactions amount whose category matches this row and whose date falls inside the Setup month. EOMONTH(date,0) is the last day of that month. Ranges stop at row 400 on purpose — whole-column references make Google Sheets slow; raise the number if you log more.
Budget · Difference (income)C5-B5Actual minus planned. Positive = earned more than planned.
Budget · Difference (expenses)B11-C11Planned minus actual, so a negative number always means overspent. Conditional formatting colours it red.
Budget · % of incomeIF($C$8=0,0,C11/$C$8)Share of actual income this category consumed. The IF stops a #DIV/0! error before any income is logged.
Budget · Left overC8-C21Total actual income minus total actual expenses.
Budget · Savings rateIF(C8=0,0,C17/C8)The Savings category as a share of income. Rename the category in Setup and this still works — it points at the row, not the word.
Transactions · CategoryData validation: list =AllCatsA dropdown fed by the named range AllCats (Setup!A7:C16). Typing a category that isn't in the list is refused, so SUMIFS never misses a row because of a typo.
Transactions · grey rowsConditional format: =AND($A5<>"", OR($A5<Setup!$B$3, $A5>EOMONTH(Setup!$B$3,0)))Rows dated outside the Setup month are shown in grey. They still feed the Year sheet.
Year · MonthEOMONTH(Setup!$B$3,-12)+1EOMONTH(date,-12) is the last day of the month a year earlier; +1 makes it the first day of the month eleven months before the Setup month; each row below moves one month forward, so the table always ends on the current month.
Year · IncomeSUMPRODUCT((dates>=A5)*(dates<=EOMONTH(A5,0))*ISNUMBER(MATCH(cats,IncomeCats,0))*amounts)One SUMPRODUCT instead of a SUMIFS per category: multiplies three yes/no tests (in month, is an income category) by the amount and adds up. MATCH against the named range IncomeCats decides what counts as income.
Year · ExpensesSame, with ExpenseCatsIdentical shape, tested against the expense list instead.
Year · Savings rate (total)SUMPRODUCT(E5:E16,B5:B16)/B17A weighted average: each month's rate weighted by that month's income, so a big month counts more than a small one.