If you’ve ever tried to track your spending in Excel but gave up because it took too long to enter transactions manually ... this guide is for you.
In this tutorial, I’ll show you how to build an automated personal finance tracker in Excel that lets you simply import or paste your bank transactions, and then Excel automatically:
- Classifies every transaction
- Updates your savings goals
- Refreshes your dashboard
- Shows your financial progress in one clean, visual summary

Plus, it includes a fully integrated Savings Goals tracker that automatically allocates your savings, calculates remaining balances, and estimates how many months you’ll need to reach each goal.

This is the perfect project to kick off the year with control, clarity, and confidence.
Table of Contents
- Watch the Step-by-step Video
- Get the Free Automated Finance Tracker Template
- What You’ll Learn in This Tutorial
- Create the Transactions Table
- Import or Paste Your Bank Transactions
- Add the Income/(Expense) Formula
- Build the Category Mapping Table
- Automatically Classify Transactions with XLOOKUP
- Building the Dashboard: Your Year-to-Date Money Story at a Glance
- PivotTables: The Engine Behind the Insights
- Savings Goals: Automatically Allocate Your Savings by Priority
- Keeping the Model Updated: One Step, Zero Rework
- Final Thoughts
- Automate Getting Bank Transactions
Watch the Step-by-step Video

Get the Free Automated Finance Tracker Template
Enter your email address below to download the free file.
What You’ll Learn in This Tutorial
- How to build a Transactions Table that automatically categorises your data
- How to create a Category Mapping Table for instant classification
- How to cleanly organise your data with structured references
- How to prepare your workbook for dashboards and PivotTables
- How to create a savings goal tracker that automatically udpates
Let’s get started with the Transactions sheet — the heart of your tracker.
1. Create the Transactions Table
Your Transactions sheet is the only place you’ll ever paste data from your bank.
No manual entry. No typing. No double-handling.

1.1 Insert Your Transactions Sheet
- Insert a new worksheet
- Rename it Transactions
1.2 Create Your Table Headers
Enter the following headers:
- Account
- Date
- Description
- Debit (Spend)
- Credit (Income)
- Income/(Expense)
- Subcategory
- Category
- Category Type
1.3 Convert to an Excel Table
Select the headers, then:
Home tab → Format as Table:

Tick “My table has headers”:

Rename the table to:
tblTrans (Table Design → Table Name)

This ensures formulas fill automatically and PivotTables always expand.
2. Import or Paste Your Bank Transactions
Here’s where your time savings begin.
Instead of typing transactions manually, simply:
- Download your bank statement (CSV, Excel, or copy from your banking app)
- Paste directly into tblTrans under:
- Account
- Date
- Description
- Debit (Spend)
- Credit (Income)
Debits represent money going out.
Credits represent money coming in.
We will take care of the rest with formulas.
3. Add the Income/(Expense) Formula
To make analysis easier, we convert Debit and Credit into a single “net impact” column.
In the Income/(Expense) column, first data row (inside the table), enter:
=[@[Credit (Income)]] - [@[Debit (Spend)]]

This gives:
- Positive numbers for income
- Negative numbers for spending
Because this is inside a table, Excel auto-fills down instantly.
4. Build the Category Mapping Table
To classify each transaction automatically, we use a simple lookup table.
4.1 Create a New Sheet
Insert a new worksheet and name it Category Table.
4.2 Add Category Headers
Enter the following headers:
- Description
- Subcategory
- Category
- Category Type
Convert this range to a table and rename is tblCat
4.3 Enter Your Mapping Rows
Fill in key words that appear in your bank transaction descriptions and map each to a category:
| Description | Subcategory | Category | Category Type |
| ACME Pty Ltd | Salary | Fixed Income | Income |
| Event Cinemas | Entertainment | Discretionary | Expense |
| Fuel | MV Fuel | Transport | Expense |
Tip:
You don’t need to type full bank descriptions — just a distinctive keyword.
Excel will search for that keyword inside each transaction’s Description column.

5. Automatically Classify Transactions with XLOOKUP
Now return to your Transactions sheet.
We’ll use a combination of SEARCH, ISNUMBER, and XLOOKUP to detect keywords and automatically classify the transactions.
5.1 Subcategory Column
In the Subcategory column, first data row:
=XLOOKUP(
TRUE,
ISNUMBER(SEARCH(Categories[Description],[@Description])),
Categories[Subcategory],
"Uncategorised"
)
This formula classifies each transaction by Subcategory based on the text in its Description.
The Categories table contains “keywords” in Categories[Description] and the corresponding Categories[Subcategory].
So the logic is:
“Look through the list of Description keywords and find the first one that appears anywhere inside this transaction’s Description. When you find it, return the matching Subcategory. If nothing matches, return ‘Uncategorised’.”
SEARCH performs and array calculation that tries each keyword in Categories[Description] inside the string [@Description].
The result is an array of numbers and errors, one per row in Categories[Description], where:
- Number = keyword was found (position in the text).
- #VALUE! error = keyword not found.
We wrap SEARCH in ISNUMBER which takes that array of numbers and errors and converts it into TRUE/FALSE:
- ISNUMBER(1) → TRUE
- ISNUMBER(#VALUE!) → FALSE
So now you have an array like:
{FALSE; FALSE; TRUE; FALSE; ...}
This tells you, for each row in Categories, whether that keyword is present in the transaction description.
We then use XLOOKUP to scan down the lookup_array and look for the first TRUE:
=XLOOKUP(
TRUE, // lookup_value
ISNUMBER(SEARCH(...)), // lookup_array → {FALSE; FALSE; TRUE; ...}
Categories[Subcategory], // return_array
"Uncategorised" // if_not_found
)
Once XLOOKUP finds the first TRUE, it returns the corresponding item from Categories[Subcategory] (the return_array).
If no keyword in Categories[Description] appears in the transaction Description, then SEARCH(...) returns only errors, ISNUMBER(...) returns only FALSE values, and XLOOKUP doesn’t find any TRUE.
In that case, XLOOKUP returns the if_not_found argument: “Uncategorised”.
So, any description you haven’t yet added to the Categories table shows up as Uncategorised, making them easy to filter and classify later.
5.2 Category Column
We then copy the formula to the Category column and change the return array to the ‘Category’:
=XLOOKUP(
TRUE,
ISNUMBER(SEARCH(Categories[Description],[@Description])),
Categories[Category],
"Uncategorised"
)
5.3 Category Type Column
Copy the formula again and change the return array to the ‘Category Type’ column:
=XLOOKUP(
TRUE,
ISNUMBER(SEARCH(Categories[Description],[@Description])),
Categories[Category Type],
"Uncategorised"
)
Result:
Every time you paste new transactions, Excel instantly classifies every row.
No manual categorisation. No data cleanup.
6. Building the Dashboard: Your Year-to-Date Money Story at a Glance
With your data and categories set up, the dashboard transforms hundreds of rows of transactions into a clean, visual overview of:
- Income by month
- Expenses by month
- Net income
- Spending by category
- A waterfall breakdown of where your money goes
- Savings goal progress
All charts and metrics update with a single click.

The dashboard uses:
- PivotTables for summarising your data
- Column charts for Income, Expenses and Net Position
- A Waterfall chart for understanding how each category influences your overall results
- A Treemap for visualising category spend as a proportion of total expenses
- A Donut chart for savings progress
Each visual is built intentionally to help you spot patterns faster and understand the story behind your spending.
7. PivotTables: The Engine Behind the Insights
The dashboard is powered by several PivotTables located on an Analysis sheet. The PivotTables for the Total Income, Total Expenses and Net Income charts are shown below:

Watch the video for step-by-step instructions for building the PivotTables.
Monthly Income PivotTable
Filters by Category Type = Income, groups dates by month/year, and sums the Credit column.
Monthly Expense PivotTable
Filters by Category Type = Expense, and sums the Debit column.
Net Income PivotTable
Combines both income and expense using the Income/(Expense) column.
Profit & Loss PivotTable

This PivotTable breaks down your income and expenses by category and month so you can:
- Compare fixed vs discretionary spending
- Spot unusually high months
- Understand your true net position year-to-date
This P&L becomes the starting point for your Waterfall chart.
Waterfall Chart: Where Your Money Really Goes

The Waterfall chart is ideal for answering the question:
“What categories contribute the most to my financial position?”
It gives you a running total of income vs expenses across categories, making overspending stand out instantly.
Treemap Chart: The Fastest Way to Compare Category Spending

While the Waterfall shows direction (adds/subtracts), the Treemap shows proportion.
It helps you quickly see:
- Which category is your biggest expense
- Which areas are growing over time
- How discretionary vs essential spending compares
The Waterfall and Treemap charts don’t accept PivotTables as their source data, so:
- Copy the PivotTable
- Paste it as values
- Insert a Treemap
- Re-point the source to the PivotTable cells
The result is a bold visual snapshot of your spending structure linked to dynamic PivotTables for automatic updates.
8. Savings Goals: Automatically Allocate Your Savings by Priority
One of the best parts of this model is the Savings Goals sheet: it takes your overall savings balance and automatically allocates it to your goals in order of priority. No manual juggling of numbers.

8.1 Set up the Savings Summary
Insert a new sheet for the Savings Goals, start with a small summary block at the top.

Add headings
- Opening Balance
- enter your current savings balance (e.g. 1000)
- Transfers in/out Savings
- Total Net Savings
You’ll also set up a couple of summary labels on the right (we’ll use them later):
- Overall Progress
- Months to all goals
- Target Saved/Month
Calculate transfers into/out of savings
In C5, enter:
=-SUMIFS(tblTrans[Income/(Expense)], tblTrans[Subcategory], "Savings")
- This sums all Income/(Expense) values where Subcategory = "Savings".
- The leading minus sign converts the net effect into a positive “amount added to savings”.
Total net savings available for goals
In C6, enter:
=SUM(C4:C5)
This is your Total Net Savings: opening balance plus net transfers.
Now give C6 a named range:
- Select C6 → Formulas → Define Name → Name: TotalSavings.
8.2 Create the Savings Goals Table
Next, create a table for your individual goals.

Below these headers (rows 10 onward), enter your goals, priorities (1 = highest priority), and target amounts, for example:
- Vacation, Emergency Fund, New Car, Tech Upgrade, Travel Gear, etc.
Turn it into a Table
- Select B9:I (including the headers and your goal rows).
- Insert → Table → tick “My table has headers”.
- Name the table tblGoals (Table Design → Table Name).
- Turn on the Totals Row for tblGoals (Table Design → Total Row).
8.3 Cum. Target – Cumulative target by priority
The Cum. Target column adds up all target amounts up to each priority level.
Cum. Target formula
In E10 (first data row of Cum Target inside tblGoals), enter:
=SUMIFS([Target], [Priority], "<=" & [@Priority])
- [@Priority] is the priority of the current row.
- The formula sums all Target values where Priority ≤ current Priority, giving you a running total of your targets by priority.
8.4 Allocated – Allocate savings by priority
Now we tell Excel how much of your TotalSavings goes to each goal, based on its priority and the cumulative targets.
Allocated formula with LET function
In F10 (first Allocated row), enter:
=LET(
total, TotalSavings,
prev, [@[Cum Target]] - [@Target],
avail, total - prev,
MAX(0, MIN([@Target], avail))
)
What this does:
- total = the named range TotalSavings (cell C6) – the total savings to allocate.
- prev = cumulative target before this goal (Cum Target – Target).
- avail = what’s left after funding all higher-priority goals (total - prev).
- MIN([@Target], avail) = the smaller of:
- the goal’s target, and
- the savings available for this goal.
- MAX(0, …) ensures we never allocate a negative amount.
You’ll see that the total of the Allocated column matches TotalSavings, spread across goals in priority order.
8.5 Remaining and % Funded
Remaining amount
In G10, enter:
=[@Target] - [@Allocated]
This shows how much is still needed for each goal.
% Funded
In H10, enter:
=IF([@Target]=0, 0, [@Allocated]/[@Target])
Copy down.
- If a goal has no target, it returns 0.
- Otherwise, it returns the fraction of the goal that’s funded.
You can then apply Conditional Formatting → Data Bars to the % Funded column for a quick visual progress bar, and adjust the colour to match your theme.
8.6 Months to Goal
To estimate how many months it will take to reach each goal, you’ll set a monthly savings target and use that in the formula.
Target Saved/Month
In G6, enter your planned monthly savings amount (for example, 400), next to the label in E6: Target Saved/Month.

Then define a name:
- Select G6 → Formulas → Define Name → Name: TargetSavedMonthly.
Months to Goal formula
In I10, enter:
=IF(
TargetSavedMonthly<=0,
"",
MAX(
0,
ROUNDUP(([@[Cum Target]] - TotalSavings) / TargetSavedMonthly, 0)
)
)
Explanation:
- If TargetSavedMonthly is 0 or less, the formula returns an empty string (no calculation).
- Otherwise, it:
- Takes Cum Target – TotalSavings (how much you still need to have saved overall by this point),
- Divides by your monthly savings target,
- Rounds up to whole months, and
- Wraps it in MAX(0, …) so you don’t see negative months if you’re already ahead.
This gives a realistic “months remaining” estimate for each goal, based on your current savings and how much you plan to save each month.
8.7 Summary Metrics in the Header
Finally, link the goals table back to the header summary so you can chart overall progress.
Overall progress
In G4, enter:
=tblGoals[[#Totals],[% Funded]]
This pulls the Total row of % Funded from tblGoals.
In H4, enter:
=1 - G4
You can now select G4:H4 and insert a Doughnut chart to visualise the proportion of your total goals that’s funded vs unfunded.

See video for the doughnut chart step-by-step.
Months to all goals
In G5, enter:
=MAX(tblGoals[Months to Goal])
This returns the largest “Months to Goal” value, i.e. how long it will take to complete all goals at your current monthly savings rate.
With this Savings Goals tracker in place, your dashboard shows where your money went and how close you are to the things you actually care about: trips, emergency funds, a new car, or anything else you’re saving for.
9. Keeping the Model Updated: One Step, Zero Rework
Updating this tracker is designed to be effortless.
Whenever you want to refresh the report:
- Download or copy your latest bank transactions
- Paste them into the next empty row of the Transactions table
- Fix any uncategorised descriptions by adding them to the Category Table
- Press Refresh All
All calculations, PivotTables, charts, and your Savings Goals update automatically. No formulas to adjust, no charts to rebuild.
Final Thoughts
This system gives you total clarity:
- Where your money is going
- How much you're saving
- Whether you're on track for your goals
- How your spending is trending month-to-month
Use it weekly or monthly, and you’ll always know your financial position at a glance.
Automate Getting Bank Transactions
If you want to take this tracker to the next level, the smartest upgrade is automating the bank-transaction import. Instead of copying and pasting, Power Query can fetch and clean your data for you. Get started with Power Query here.

Hello, Great video!
Am wondering what you’d suggest is the best way to recategorize the “uncategorized” expenses in the transactions, say if you have lots of unique purchases. I have all of my recurring already in the category table automater but lots of unique items in the description column that aren’t being reported in the dashboard. Many thanks!
The uncategorised transaction descriptions have to be added to your category table so they can have categories added to them in the transaction table and then feed through to your reports like you see me do in the video. There’s no shortcut to this as such.
Just want to learn more about creating spreadsheets in Excel. Your video was very interesting.
Glad to hear you enjoyed it!
Hi Mynda – love your tutorials. Here’s an issue I ran into when building this workbook… how to treat transfers? For example, my transactions include credit card statements, plus chequing account statements (manually copy/pasted into the “Transactions” table). But, the chequing account statement includes entries for paying off the credit card – which is effectively just a transfer. Off the top of my head, I am thinking create a “Transfer” category, then just filter it out of the transactions table (and if that doesn’t carry though to all the pivot tables, then filter out from those as well). Would love to hear your thoughts on how to approach this!
Hi Elisa,
This is exactly right and if you look at my completed file, you’ll see that’s how I’ve classified transfers so as not to double count them.
Mynda
Hi Mynda,
I love your video, and thank you. Also, thank you for the suggestion of how to split debit and credits from 1 amount column, as I had the same problem. My problem is that I ran into an issue trying the 3rd pivot table. I don’t get the ‘Multiple Items’ setting, so it doesn’t combine Income & Expenses. It shows them separately. Have you seen this before? Am I missing a setting, and how do I find or get that setting? Again, thank you for the video, but I’m stuck now. I’m hoping that you can help.
Paul
Hi Paul,
Select multiple items appears automatically when your dataset has more than one item in the source data column. If you only have Expenses, then you won’t have the option to select multiple. If you click on the Category Type filter button, and you see multiple items, but no ‘select multiple items’ option, then I wonder if you’re using Excel for Windows, or something else.
If you’re still stuck, please post your question on our Excel forum where you can also upload a sample file and we can help you further.
Mynda
I see an issue, on your sample file, you have called your ‘Categorys’ tab, ‘Categories’ but in your video you have called it ‘tblCat’, so if you copy your formula from your sample file, it fails. 🙂
Sorry for the confusion, Richard. Glad you figured it out.
My bank statement data is laid out differently (in a bad way) than the way you have laid yours out. The only columns I get on an excel export is: Date, Type (transaction), Description (very wordy), Value (negative value and positive in same column). Can your template be modified to upload my statement format without too much work? I am not an excel guru but would really like to undertake some analysis on my spend vs income and your template looks good – although i am hopeless at excel formulas. Thanks
Hi Scott,
You can extract the debits and credits into their own columns with an IF formula e.g. for the negative values:
And for the positive values:
Mynda
Mynda
Hello. Quick Question.
Shouldn’t the Positive Value be >0 ?
Oh, yeah! Typo. Thanks for pointing that out. I’ll edit it above.
Dear Mynda,
This tool is absolutely brilliant. Thank you so much.
Gabor
Great to hear, Gabor!
Hello, and greetings from Ottawa, Canada. I got started on your personal finance tracker last week after coming across one of your YouTube videos. It’s fantastic! Now I am on the to the automated transaction classification endeavour. Again, your samples and tutorials are excellent. I have a request. My banking transactions do not come in the same format as your Transactions table (e.g. “Debit” and “Credit” are in the same column, and the amounts are positiver and negative, and my credit card transactions have a Status column – Pending or posted). Therefore, I made a Power Query sequence to transform them in to the format required by your template, but I would much rather copy and paste them straight into the transactions table in the format they get downloaded. However, that means I need to alter the logic in the template, the pivot tables, power queries etc. I believe need to unlock the worksheet to do that, or else I need to start clean, and build everything from scratch in my own new worksheet. I would gladly pay a fee to unprotect the workbooks so I can continue with modifying your template. Can I purchase an unprotected template from you? I don’t really need to take one of your courses (I’m retired), but I would gladly pay for full access to your template. If you agree, then let me know a reasonable price and I can send a PayPal transfer. Your work is excellent!
Hi Steve,
My template is not password protected, so you can modify it to suit the format your transactions are available in. If you rename/change the column names the PivotTables reference, you’ll have to rebuild the PivotTables as they will be looking for the original column names that no longer exist.
Mynda