How do you set up a zero-based budget in Google Sheets?
Make two tabs: a Budget tab with your income and one row per category, and a Transactions tab where you log spending. On the Budget tab, one cell computes "left to assign" as income minus the sum of all planned amounts; you keep assigning money until it shows 0. A SUMIFS formula pulls each category's spending from the Transactions tab, so you see what is left per category.
Step 1: Build the Transactions tab
Create a tab named Transactions with three columns: A Date, B Category, C Amount (spending as positive numbers). Format column A as a date (Format → Number → Date), otherwise the month filter below will not work.
Step 2: Build the Budget tab
Create a tab named Budget with this layout:
| Cell | Content | What it does |
|---|---|---|
| A1 / B1 | Month / =DATE(2026,10,1) | First day of the month this tab covers |
| A2 / B2 | Income / 4200 | Money you expect this month (take-home) |
| A3 / B3 | Left to assign / =B2-SUM(B6:B30) | Must reach exactly 0 |
| Row 5 | Category · Planned · Carry-over · Spent · Left | Headers for columns A to E |
| A6:A30 | Your categories | One per row |
| B6:B30 | Planned amounts | Typed by you |
| C6 | 0 (or last month's Left, see step 5) | Money carried into this month |
| D6 | =SUMIFS(Transactions!$C:$C, Transactions!$B:$B, $A6, Transactions!$A:$A, ">="&$B$1, Transactions!$A:$A, "<"&EDATE($B$1,1)) | Spending in this category and month |
| E6 | =B6+C6-D6 | What is left in the category |
Copy C6:E6 down to row 30. The $ signs keep the Transactions columns and the month cell fixed while the category reference moves with each row. SUMIFS adds up amounts that match all conditions: the category, a date on or after the first of the month, and a date before the first of next month (EDATE adds one month).
Using a European locale? If your spreadsheet uses a comma as the decimal separator (for example Germany or France under File → Settings → Locale), Google Sheets expects semicolons between arguments: =SUMIFS(Transactions!$C:$C; Transactions!$B:$B; $A6; …).
Step 3: Add guard rails
- Category dropdown: select Transactions!B2:B, then Data → Data validation → Add rule → Dropdown (from a range) →
Budget!A6:A30(Google help). A typo in a category would otherwise never be counted. - Zero check: select B3, Format → Conditional formatting, "Custom formula is"
=B3<>0, red fill. The cell turns red until every dollar has a job. - Overspending: select E6:E30, conditional format "Less than" 0, red text.
Worked example: assigning $4,200
October income is $4,200. The first draft of planned amounts added up to $3,935, so B3 showed $265 left to assign. That $265 went to the emergency fund (+$200) and a gifts category ($65). Yearly costs are turned into monthly amounts: car repairs $900 a year = $75 a month, holidays $1,200 a year = $100 a month.
| Category | Planned |
|---|---|
| Rent | 1,450 |
| Groceries | 520 |
| Utilities | 180 |
| Phone and internet | 95 |
| Transport | 160 |
| Insurance | 140 |
| Car repairs fund ($900 / 12) | 75 |
| Holiday fund ($1,200 / 12) | 100 |
| Debt minimum payments | 210 |
| Extra debt payment | 250 |
| Emergency fund (300 + 200) | 500 |
| Eating out | 150 |
| Fun money | 200 |
| Subscriptions | 45 |
| Personal care | 60 |
| Gifts | 65 |
| Total planned | 4,200 |
| Left to assign (B3) | 0 |
By 10 October the Transactions tab has three grocery entries (84.30, 112.45 and 67.80) and one eating-out entry (38.00). The SUMIFS in the Groceries row returns 264.55, so Left shows 520 − 264.55 = 255.45. The eating-out entry is not counted in Groceries because its category does not match.
Check your own plan
Step 4: Use it every month
- Plan before the month starts. Enter expected income in B2, adjust planned amounts until B3 is 0.
- Log spending a few times a week. Or paste your bank's export into Transactions and fill in the category column.
- Move money, not the total. If Groceries runs out, lower another category by the same amount. B3 stays at 0 and the plan stays honest.
Step 5: Start a new month
Right-click the Budget tab → Duplicate, rename it (for example Nov 2026) and change B1 to =DATE(2026,11,1). For sinking funds such as car repairs, point the Carry-over cell to the previous tab, for example ='Oct 2026'!E12, so unspent money keeps building up. For everyday categories, leave Carry-over at 0 and give any leftover a new job when you plan the month.
Common mistakes
- Planning with money you do not have yet. If your income varies, put only the amount you are sure of in B2 and assign extra money when it arrives.
- Dates stored as text. Pasted bank data often arrives as text. If SUMIFS returns 0 for a category you know you spent in, check that column A is a real date (it aligns right by default).
- Forgetting yearly bills. Every annual cost needs its own monthly row, or it will blow up the month it is due.
- Too many categories. Fifteen to twenty rows are plenty to start. You can split a category later.
Follow-up questions
Is zero-based the same as spending everything? No. Savings, extra debt payments and sinking funds are categories too. Zero means every dollar has a job, not that every dollar is spent.
Does this work in Excel? Yes, SUMIFS, EDATE and the layout work the same in Excel. There too, European locales use semicolons between arguments.
Can I track income with actual payments too? Add an Income category to Transactions and replace B2 with a SUMIFS on that category, but then B3 changes as money arrives. Many people prefer a typed, conservative income figure.
Sources: Google Docs Editors Help on SUMIFS, EDATE and dropdowns. The example figures are illustrative.
Disclosure: Stillpenny makes a Budget Spreadsheet for Excel and Google Sheets (6.90 EUR, one-time purchase on Etsy). It is a workbook with the formulas already built in: 12 monthly tabs with budget vs. actual per category, a year dashboard, bills tracker, sinking funds and a debt payoff sheet; you open it in Google Sheets by uploading the .xlsx file. It is optional: the steps and calculator on this page are free.
General information, not financial advice.