Expense Tracking in Google Sheets
By BankStatementReader Team ·
Google Sheets is a practical home for personal or small-business expense tracking. It runs in a browser, saves automatically, and handles formulas, summaries, and charts without extra software. This guide walks through a workable structure, the formulas that do the heavy lifting, and how to bring bank transactions in so you are not typing every row by hand. If you want a broader look at the general approach, see the expense tracking spreadsheet overview.
Start with a clean transaction table
Everything else builds on a single table where each row is one transaction. Put the headers in the first row and keep one column per piece of data:
- Date — the transaction date
- Description — the merchant or payee
- Category — a label you choose (groceries, rent, fuel, and so on)
- Amount — the value spent or received
- Account — which card or bank account it came from
Keep this table free of blank rows and merged cells. Formulas, pivot tables, and the QUERY function all read a clean, rectangular range far more reliably than a table with gaps. Referencing the data through a named range or a table-style range can make your formulas easier to read and maintain, though it does not by itself guarantee that new rows pick up existing formatting or fall inside a pivot or QUERY source range — you may still need to extend the range or refresh the pivot as the table grows.
Decide your categories first
Categories are the backbone of any expense report, so settle on a short, consistent list before you start entering data. A handful of broad buckets — housing, food, transport, utilities, entertainment, savings — is usually easier to maintain than dozens of narrow ones. Consistency matters more than precision: "Groceries" and "groceries" and "Food" will be treated as three separate categories by every summary formula, so pick one spelling and stick to it.
To enforce that, you can attach a dropdown list to the Category column using the data validation feature. It restricts each cell to your approved categories, which prevents typos from quietly splintering your totals. Most versions of Sheets expose this through the Data menu; the exact wording of the menu item varies by interface and language, so look for the validation or dropdown option rather than a fixed path.
Total each category with SUMIF
Once transactions are flowing in, the first question is usually "how much did I spend on X?" The
SUMIF function answers that directly. It adds up every amount whose category matches a value
you specify.
=SUMIF(Transactions!C:C, "Groceries", Transactions!D:D)
Here the first range is the Category column, the middle argument is the category to match, and the last range is the Amount column. Point the match argument at a cell instead of typed text and you can build a small summary table that totals every category automatically:
=SUMIF(Transactions!C:C, F2, Transactions!D:D)
If you need to match on two conditions at once — say a category and a month — SUMIFS extends
the same idea with multiple criteria. List each range-and-condition pair, and only rows that
satisfy all of them get added.
Summarize everything with a pivot table
When you want to slice spending several ways without writing a formula for each combination, a pivot table is the better tool. Select your transaction range and insert a pivot table; Sheets builds a separate summary area where you drag fields into rows, columns, and values.
A common setup is Category in the rows, the date grouped by month in the columns, and the sum of Amount as the value. That produces a month-by-category grid in a few clicks, and it refreshes as you add transactions. Pivot tables are well suited to monthly reviews because you can regroup the same data — by account, by category, by week — without disturbing the underlying rows.
Pull custom views with QUERY
For anything a pivot table cannot express cleanly, the QUERY function lets you interrogate your
data with a SQL-like syntax inside a single cell. It returns a live range that updates as the
source changes.
=QUERY(Transactions!A:E, "SELECT C, SUM(D) WHERE D > 0 GROUP BY C ORDER BY SUM(D) DESC", 1)
That example selects the Category and the summed Amount, groups by category, and sorts the
totals from largest to smallest. The trailing 1 tells QUERY the source has one header row. It
assumes expenses are stored as positive numbers in the Amount column (D), so D > 0 returns your
spending. If your bank export uses negative numbers for money out instead, flip the condition to
D < 0 so you total expenses rather than income. You can filter by date ranges, exclude
transfers, or limit results to a single account by adjusting the WHERE clause. QUERY rewards a
little practice, but it can replace a stack of helper formulas with one readable statement.
Import a CSV of bank transactions
Typing transactions by hand is the slow part, and it is avoidable. Most banks let you export activity, and Sheets can read a CSV file directly. The general flow is: download or export your transactions as a CSV, then bring that file into a sheet — either by opening it, importing it into the current spreadsheet, or pasting and splitting the text. When importing, you choose whether to create a new sheet, replace the current one, or append rows, and how to handle the separator character.
The catch is that exported files rarely match your column order or your category labels out of the box. You will usually need to map the bank's columns to your Date / Description / Category / Amount layout, then assign categories yourself, since the bank does not know your buckets. A dropdown on the Category column makes that cleanup quick.
If your bank only provides PDF statements, convert them to a clean CSV first. See bank statement to CSV for the approach, or run a statement through the bank statement converter to get structured rows you can paste straight into your tracker.
Keep it maintainable
A few habits keep the system useful over time. Enter transactions regularly rather than in one end-of-month rush, so the data stays accurate while it is fresh. Reconcile the sheet against your actual bank balance periodically to catch missing or duplicated rows. And resist the urge to over-engineer: a clean table, a SUMIF summary, one pivot table, and a monthly import will carry most people further than an elaborate template they stop updating.
With the structure above in place, Google Sheets gives you a flexible, no-cost expense tracker that grows with your needs — and the CSV import step means the data entry mostly takes care of itself.
Related reading
How to Build and Use an Expense Tracking Spreadsheet
How to build and use an expense tracking spreadsheet from your bank statement rows — columns, categories, and totals by category explained step by step.
Small Business Expense Tracking: Methods That Scale
A practical guide to small business expense tracking — spreadsheets, accounting software, receipt capture, and bank-statement-driven workflows.
Categorizing Bank Transactions: A Practical Workflow
A practical workflow for how to categorize bank transactions — build a scheme, apply rules, review the gaps, and stay consistent month to month.