A monthly expense report is something almost every team produces and almost every team wastes too much time on. The goal is simple: show what was spent, broken down by category, compared to what was budgeted. Here's how to build one in Google Sheets that takes minutes to update each month, not hours.
Your Expense Log
Start with a flat log of all expenses: one row per transaction. Columns: date, description, category, amount, payment method, submitted by, and approved by (if you need an approval trail).
Keep the category list short and consistent. Use data validation to enforce it — 8 to 12 categories is usually enough. Common categories: Travel, Software, Marketing, Office, Meals, Contractors, Training, Miscellaneous. The more granular you make it, the harder it is to maintain consistently.
Monthly Summary by Category
Insert a pivot table from your expense log. Add Category to Rows, add a Month helper column (use =TEXT(A2,"MMM YYYY") in a new column in your log) to Columns, and add Amount to Values set to SUM.
This gives you a grid: categories in rows, months in columns, with spending totals at every intersection. Add a Grand Total row and column automatically via the pivot table editor.
Comparing to Budget
Add a Budget column next to your pivot table with your monthly budget for each category. Calculate variance:
=C4-B4
Where C4 is actual spend and B4 is budget. Apply conditional formatting: red if actual exceeds budget, green if under.
Add a % of Budget column:
=C4/B4
Format as percentage. Categories above 100% are over budget. This is often more useful than the dollar variance when categories have very different budget sizes.
Top Expenses This Month
Add a LARGE formula to pull the top 5 individual expenses:
=LARGE(ExpenseLog!D:D, 1)
Use INDEX/MATCH to pull the description alongside it:
=INDEX(ExpenseLog!B:B, MATCH(LARGE(ExpenseLog!D:D, 1), ExpenseLog!D:D, 0))
This surfaces your biggest line items without scrolling through hundreds of rows.
Making It Easy to Share
Format the summary sheet cleanly — hide the raw log tab from view (right-click the tab, Hide sheet), keep only the summary visible. Go to File, Share, and set view-only access for anyone who needs to see it. Anyone with the link can view the report without editing the underlying data.
The Easy Way: Using SheetXAI in Google Sheets
Example 1: You have expense records already in the sheet.
"I have an expense log on Sheet 1 with columns for date, category, description, and amount. Build a monthly expense report showing spending by category, compare to the budget on Sheet 2, and highlight any category that's over budget."
SheetXAI reads both sheets, builds the category summary, adds the budget comparison, and applies the conditional formatting.
Example 2: Your expenses come from a finance or expense management system.
"Pull this month's expenses from our accounting system and build a summary report showing spending by category with budget vs. actuals and a list of the top 10 individual expenses."
SheetXAI connects to your system, pulls the data, and builds the full expense report.
Try SheetXAI free and see what it builds for you.
Published May 2026. See also: How to Build a Budget vs. Actuals Report in Excel, How to Build a Profit and Loss Report in Google Sheets, and Google Sheets AI Guide.