Home / Sheets questions cookbook / Budget vs actual
Google Sheets · Question cookbook

How to Build a Budget vs Actual Report in Google Sheets

Budget and actual side by side for each category, with the variance in dollars and percent. Two SUMIFS that read from two tabs over the same dates.

By · Published November 8, 2026

The short answer: one SUMIFS totals the budget tab for the period, another totals the expenses tab for the same period, and the variance is =Actual - Budget. In the sample data, Q3 2026 spending was $127,653 against a $124,550 budget, $3,103 over, driven by payroll at $3,663 over its line.

The sample data

ABCD
1DateVendorCategoryAmount
22026-01-01Warehouse leaseRent4800
32026-01-02Accounting softwareSoftware90
42026-01-02Online store platformSoftware299
52026-01-03Inventory appSoftware129
62026-01-03Office suiteSoftware96
…202 more rows
Expenses

Sample data: a tab named Expenses with 207 operating expenses from January to October 2026, one row per bill or payment. Download expenses.csv and import it (File → Import) to follow along. The business is fictional.

ABC
1CategoryMonthBudget
2Payroll2026-01-0120800
3Rent2026-01-014800
4Shipping & freight2026-01-019000
5Marketing2026-01-013000
6Software2026-01-01650
…91 more rows
Budget

Sample data: a tab named Budget with 96 monthly budget lines for 2026, one row per category per month. Month is the first day of the month. Download budget.csv and import it (File → Import) to follow along. The business is fictional.

The classic way: SUMIFS on both tabs

The Budget tab has Category (A), Month (B, the first of the month) and Budget (C). The Expenses tab has Date (A), Category (C) and Amount (D). On a new tab, type the categories in A2:A9, then in row 2, copied down:

=SUMIFS(Budget!$C:$C, Budget!$A:$A, $A2, Budget!$B:$B, ">="&DATE(2026,7,1), Budget!$B:$B, "<"&DATE(2026,10,1))
=SUMIFS(Expenses!$D:$D, Expenses!$C:$C, $A2, Expenses!$A:$A, ">="&DATE(2026,7,1), Expenses!$A:$A, "<"&DATE(2026,10,1))
=C2-B2
=IFERROR(D2/B2, "")

B is the quarter's budget, C the actual spend, D the variance in dollars (positive means over budget) and E the variance as a percent of budget. The Total row sums B, C and D and divides the totals for E. Put the start and end dates in cells and point the formulas at them, and the same sheet reports any month or quarter.

Example on sample data
fx=SUMIFS(Expenses!$D:$D, Expenses!$C:$C, $A2, Expenses!$A:$A, ">="&DATE(2026,7,1), Expenses!$A:$A, "<"&DATE(2026,10,1))
ABCDE
1CategoryBudgetActualVarianceVariance %
2Payroll$62,400$66,063$3,6635.9%
3Rent$14,400$14,400$00.0%
4Shipping & freight$27,000$27,886$8863.3%
5Marketing$11,600$11,947$3473.0%
6Software$1,950$2,012$623.2%
7Utilities$3,000$2,920-$80-2.7%
8Travel$3,300$1,440-$1,860-56.4%
9Office & supplies$900$985$859.4%
10Total$124,550$127,653$3,1032.5%
SummaryExpensesBudget

Computed from the sample CSVs above. Cells formatted as currency and percent.

Make the overruns visible. Select D2:D9 and add a conditional format rule "Greater than" 0 with red fill. On the sample data, Payroll is the overrun that matters: a hire started in July that the budget did not include.

Gotchas

The one-cell way: =QUIRIZ

With the Quiriz add-on for Google Sheets, you type the question instead of building the formula. =QUIRIZ does not read the cells around it: it answers from the datasets in your Quiriz account. For this example, upload expenses.csv as a dataset, or connect QuickBooks, and upload budget.csv as a second dataset. You can also add a Google Sheet itself as a dataset that refreshes on a schedule. Then, in any empty cell:

=QUIRIZ("budget vs actual by expense category for Q3 2026 (July to September), with the variance in dollars and as a percent of budget, plus a total row", "table")

The "table" mode spills the answer down and to the right from that cell, header row first:

Example on sample data
fx=QUIRIZ("budget vs actual by expense category for Q3 2026 (July to September), with the variance in dollars and as a percent of budget, plus a total row", "table")
ABCDE
1CategoryBudgetActualVarianceVariance %
2Payroll$62,400$66,063$3,6635.9%
3Rent$14,400$14,400$00.0%
4Shipping & freight$27,000$27,886$8863.3%
5Marketing$11,600$11,947$3473.0%
6Software$1,950$2,012$623.2%
7Utilities$3,000$2,920-$80-2.7%
8Travel$3,300$1,440-$1,860-56.4%
9Office & supplies$900$985$859.4%
10Total$124,550$127,653$3,1032.5%
Sheet1

Same figures as the formula result above, from the same sample data. The spilled cells are plain numbers, so you can format them, total them or chart them; here they are formatted as currency and percent. Column headings are written with each answer and may be worded differently.

The other modes: "verbose" (the default) answers in a sentence, "bullets" writes two to four points one per cell, and "notes" adds how the figure was calculated. Install Quiriz for Google Sheets and try the question on your own data.

Ask the question, get the table

Quiriz answers business questions in a Google Sheets cell, from your imported files, scheduled Google Sheets and connected tools. Free to start.

Install for Google Sheets →

Free on the Google Workspace Marketplace. Or try it on sample data first, no signup.

Frequently asked questions

How do I calculate budget variance in Google Sheets?
Variance = actual - budget. As a percent: =(actual - budget) / budget, or =IFERROR(D2/B2, "") with the variance in D and budget in B. For expense lines a positive variance means over budget.
How do I pull actuals for a date range into a budget sheet?
Use SUMIFS on the expenses tab with the category and two date conditions: =SUMIFS(amount, category, A2, date, ">="&start, date, "<"&end). Put start and end in cells so the whole report changes period in one place.
Should budget vs actual be monthly or quarterly?
Both. Monthly shows problems early but is noisy because of payment timing. Quarterly or year to date smooths timing differences and shows real overspending.