Expense Sorted

Categorize Bank CSV Without Cloud: 5 Rows, 14 Categories

By Anonymous|Guides|bank CSV, categorization, offline, privacy, no bank linking, local

To categorize a bank CSV without the cloud, download the file from your online banking, open it with software that runs on your own computer, and match each transaction's description against your own list of phrases mapped to categories. Nothing is uploaded, no bank login is shared, and you can see why each row got its category. Below is that process worked through on five real-format rows from an ANZ (New Zealand) export and a 64-phrase seed list across 14 categories.

What "without cloud" actually rules out

Most tools that auto-categorize transactions do it on someone else's server. Bank-linked apps pull your transactions through an aggregator. Upload-based tools ask for the file. Pasting a CSV into a chat assistant sends it to that provider. Even a Google Sheet lives on Google's servers.

Categorizing without the cloud means three things stay on your machine:

  • The CSV file you downloaded from your bank.
  • The category list you match against.
  • The result, in a local file or database you back up yourself.

That leaves you three practical options: a desktop spreadsheet saved to a local folder, a small script, or a local app. All three work the same way underneath: a description goes in, the closest known phrase wins, and its category comes out.

The input: five rows from an ANZ export

This is the layout of an ANZ everyday account export, with placeholder names:

Type,Details,Particulars,Code,Reference,Amount,Date,ForeignCurrencyAmount,ConversionCharge
Payment,Test Person A,Dinner,,,68.50,15/09/2026,,
Direct Credit,Example Employer Ltd,Salary,,,2000.00,16/09/2026,,
Visa Purchase,COUNTDOWN ALBANY,,,,-35.20,17/09/2026,,
Automatic Payment,Example Power Co,Power,,,-120.00,18/09/2026,,
Direct Debit,Example Insurance,Premium,,,-45.00,19/09/2026,,

The text worth categorizing is split across two columns. Details is who the money went to or came from; Particulars is what it was for. Joined and lowercased, the five descriptions become:

  1. test person a dinner
  2. example employer ltd salary
  3. countdown albany
  4. example power co power
  5. example insurance premium

For a full walkthrough of the columns, dates and sign conventions in this file, see Bank CSV expense tracker: 2 bank export layouts compared.

The category list: 14 categories, 64 seed phrases

A categorizer is only as good as the list it matches against. The one used here is the cold-start seed list from Expense Sorted Local: 64 short phrases, each mapped to one of 14 categories.

CategorySeed phrasesExample phrases
Groceries6countdown supermarket groceries; pak n save supermarket groceries
Shopping6amazon retail shopping store; the warehouse shopping store
DinnerBars6mcdonalds restaurant dinner food; starbucks coffee restaurant food
Medical5pharmacy chemist medical prescription; gp medical centre visit clinic
Transport6bp petrol fuel transport fill; z energy petrol fuel transport
Utility5genesis energy electricity utility bill; mercury power electricity utility bill
Travel5air new zealand flight travel airline; booking hotel stay travel lodging
Kids4daycare childcare kids fees school; school stationery kids fees
Business4office supplies business software tools; linkedin premium business subscription
Living5netflix streaming living subscription; spotify music living subscription
Tax3ird income tax payment tax office; tax agent accounting fee tax office
Transfer2bank transfer own account transfer; internal account transfer between accounts
Income3salary payroll credit income wages; employer wage deposit income salary
Debt Repayment4mortgage home loan debt repayment; credit card debt repayment payment

Two things to notice. The phrases are generic merchant and activity words, not anyone's real transactions, so the list contains no personal data. And each phrase carries extra context words ("supermarket", "utility bill", "income"), which gives a meaning-based matcher more to work with than a bare merchant name.

If you are building your own expense categories list, this is a reasonable starting shape: one category per real spending decision, plus Transfer and Income so that money moving in is never counted as spending.

Worked example: matching the five rows

Here is each description next to the closest seed phrase by wording, and what should happen to it.

#DescriptionAmountClosest seed phraseCategory it points toRight answer
1test person a dinner+68.50local pub dinner drinks restaurantDinnerBarsNot spending. Money in from a person: a repayment, so Transfer or Income
2example employer ltd salary+2,000.00employer wage deposit income salaryIncomeIncome
3countdown albany-35.20countdown supermarket groceriesGroceriesGroceries
4example power co power-120.00mercury power electricity utility billUtilityUtility
5example insurance premium-45.00none close(unclear)Needs a human. No seed phrase mentions insurance

Three of the five are easy. "Countdown" is a supermarket name in the seed list. "Employer" and "salary" both appear in an Income phrase. "Power" appears in a Utility phrase.

The other two are the rows that break categorizers, cloud or not.

Row 1: the word says dinner, the amount says money in

The description contains "dinner", so a matcher that reads only text will suggest DinnerBars. But the amount is +68.50: someone paid you back. Filing it as restaurant spending would add 68.50 to your eating-out total for a meal you have already paid for once. The fix is a rule that runs before matching: positive amounts on an account file are never spending categories. They go to Income, Transfer, or a review queue.

Row 5: nothing in the list resembles it

None of the 64 phrases mentions insurance, and none of the 14 categories is an obvious home for it. A matcher will still find a "closest" phrase, because there is always a closest phrase, but its similarity will be weak. A good categorizer flags a weak match for review instead of guessing. You then decide once: add an Insurance category, or file premiums under Living or Utility, and label this row. From then on, every row from Example Insurance has a match.

What the totals look like

Using the right answers above, the five rows come out as:

CategoryTotal
Income2,000.00
Transfer (repaid dinner)68.50
Utility120.00
Insurance (after your decision)45.00
Groceries35.20

Spending is 35.20 + 120.00 + 45.00 = 200.20. Had row 1 been accepted as DinnerBars, the eating-out line would show 68.50 that you never spent this month.

Doing it offline in a desktop spreadsheet

You do not need an app to try this. In Excel or LibreOffice Calc, saved to a local folder:

  1. Import the CSV and add a column that joins Details and Particulars: =LOWER(B2&" "&C2).
  2. On a second sheet, make a two-column table: a keyword in column A (countdown, salary, power, insurance) and its category in column B. Name the ranges Keywords and Categories.
  3. Next to each transaction, use a lookup that finds the first keyword contained in the description, and falls back to "Review" when none is found:
=IF(F2>0, "Income/Transfer", IFERROR(LOOKUP(2^15, SEARCH(Keywords, J2), Categories), "Review"))

Here F2 is the Amount and J2 the joined description. The IF(F2>0, ...) part handles the row 1 problem before any keyword can match. Every "Review" row is a keyword missing from your table; add it once and the next month's file categorizes itself.

This is keyword matching, not meaning matching. "Mercury" will not match "power" unless you add it. For more formula patterns, see Auto categorize bank transactions in Excel: 6 methods.

Keyword rules vs meaning-based matching

Keyword rules (spreadsheet)Meaning-based matching (on-device model)
Where it runsYour spreadsheet appYour computer
MatchesExact words you listedSimilar descriptions, even with different words
SetupYou write every keywordStarts from a seed list, learns from your labels
Fails onNew merchants, spelling variantsRows nothing in the list resembles (row 5)
Explains itselfYes: the keyword that matchedYes, if it shows the nearest phrase

Both work without the cloud. Rules are fully transparent but need constant upkeep. Meaning-based matching covers spelling variants and new merchants better, but still needs a review step for rows like the insurance premium. For a longer comparison, see AI transaction categorization: AI vs formulas vs manual.

Where Expense Sorted Local fits

If you would rather not maintain a keyword table by hand, Expense Sorted makes Local, an app for this bank CSV workflow. The Local page lists its features and the pricing page lists plans. To try it, download Local.

If privacy is the reason you are avoiding the cloud, Private expense tracker: 5 tests for who sees your data and Offline expense tracker: what works without internet cover the rest of the checklist.

Limits

  • A seed list is a starting point. 64 phrases cannot cover every merchant. Expect a review queue for the first few imports.
  • Positive amounts need a rule. Repayments, refunds and transfers look like income to a text matcher.
  • Merchant names vary by country. The seed phrases lean toward New Zealand merchants (Countdown, Pak n Save, Z Energy). Add your own local names.
  • Local means you own the backups. Nothing is lost to a breach elsewhere, and nothing is recovered for you either.

FAQ

Can I categorize a bank CSV without uploading it anywhere?

Yes. Download the CSV from your online banking and categorize it with software that runs on your own computer: a desktop spreadsheet such as Excel or LibreOffice, a local script, or a local app. The file never has to leave your machine.

What categories should I use for bank transactions?

Start with a short fixed list. The seed list in this example uses 14: Groceries, Shopping, DinnerBars, Medical, Transport, Utility, Travel, Kids, Business, Living, Tax, Transfer, Income and Debt Repayment. Add a category only when a real transaction has nowhere sensible to go.

Why do some transactions get the wrong category?

Usually because the description says one thing and the amount says another. A friend repaying you for dinner contains the word dinner but is money coming in, not restaurant spending. Others fail because no phrase in your list resembles them, like an insurance premium when no category covers insurance.

Is Google Sheets a cloud tool?

Yes. Google Sheets stores your file on Google's servers. If the goal is to keep transactions off the cloud, use a desktop spreadsheet saved to a local folder, or a local app.

Related Articles

Frequently Asked Questions

Can I categorize a bank CSV without uploading it anywhere?▾

Yes. Download the CSV from your online banking and categorize it with software that runs on your own computer: a desktop spreadsheet such as Excel or LibreOffice, a local script, or a local app. The file never has to leave your machine.

What categories should I use for bank transactions?▾

Start with a short fixed list. The seed list in this example uses 14: Groceries, Shopping, DinnerBars, Medical, Transport, Utility, Travel, Kids, Business, Living, Tax, Transfer, Income and Debt Repayment. Add a category only when a real transaction has nowhere sensible to go.

Why do some transactions get the wrong category?▾

Usually because the description says one thing and the amount says another. A friend repaying you for dinner contains the word dinner but is money coming in, not restaurant spending. Others fail because no phrase in your list resembles them, like an insurance premium when no category covers insurance.

Is Google Sheets a cloud tool?▾

Yes. Google Sheets stores your file on Google's servers. If the goal is to keep transactions off the cloud, use a desktop spreadsheet saved to a local folder, or a local app.

Local product

Go Local — data stays on your computer

Download free. Unlock smarter local AI categorization with Local Pro ($49 one-time) or start a 14-day trial.