Automatic Categorization

When transactions arrive, Aventurine tries to categorize them. Everything happens on your computer — nothing is sent anywhere to be looked up.

The order it tries

Three passes, in decreasing order of certainty. Each one only looks at rows the previous one left blank, so they never fight over the same row.

1. What you have taught it

Every time you set a category by hand, the app stores the transaction’s description and the category you chose. From then on, a transaction with that description is categorized automatically.

This pass runs first and always wins. Your decisions override the built-in knowledge, permanently.

It matches in two ways:

  • Exact. The same description, ignoring capitalization and extra spaces.
  • Near-identical. Descriptions that differ only slightly — a store number, a truncated word, a typo. This is deliberately strict, and it applies only when every rule that comes close agrees on the same category. If two of your rules disagree about a near-match, nothing is applied and the row is left blank.

Removing a category from a transaction removes the rule. That is how you correct a rule you no longer want: clear the category, then set the right one.

2. The built-in merchant list

A list of thousands of well-known merchants, each mapped to a category. It recognizes the merchant inside your bank’s messy text — SQ *BLUE BOTTLE 0231 OAKLAND CA still finds “Blue Bottle” — and files it under Food.

Before matching, the description is cleaned up: payment-processor prefixes, store numbers, cities, phone numbers, and reference codes are stripped away, leaving the part that names a business.

3. A general reader for merchants it does not know

For anything the first two miss, a small model trained to read merchant descriptions makes a judgement. It is what catches the local restaurant it has never heard of, because ”… GRILL”, ”… TAVERN”, and ”… CAFE” mean something even when the name does not.

This pass is heavily biased towards silence. It only answers when it is well clear of both “no idea” and the runner-up category. Otherwise it says nothing and the row stays blank.

Why blanks are the point

Aventurine will leave a category empty rather than guess.

The reasoning is simple: a blank is honest and takes one click to fix. A wrong category is invisible, quietly corrupts every chart it touches, and you may never notice it. Once you have found one wrong category, you cannot trust any of them — so the app is built to never be confidently wrong.

This is why the import screen tells you plainly how many rows will be left uncategorized. It is expected behaviour, not a failure.

It gets dramatically better with use

The blanks are not permanent. The first time you categorize each of your regular merchants, the app learns them, and from then on those transactions arrive already filed.

Most people’s spending is concentrated in a small number of places. Ten minutes on your first import typically covers most of the recurring transactions you will see for years.

The fastest way to do it:

  1. Go to Transactions, click the Category chip, and choose Uncategorized.
  2. Tick a row, click the pencil, set the category.
  3. Tick “Find similar transactions and apply the same categories” before clicking Next.
  4. Confirm the matches.

See Editing Many Transactions at Once.

Turning it off

Settings → Preferences → Transactions → Automatic Categorization.

Switching it off stops all three passes, on imports and on transactions you type in. Nothing is categorized unless you do it yourself. Rules you have already taught it are kept and start applying again if you switch it back on.

Switching it off also stops clean merchant names being applied.

What it does not do

It does not change categories you set. All three passes skip any row that already has a category.

It does not change direction. A built-in guess never turns money in into money out, or the reverse. It may refine an outgoing payment from “expense” to “transfer” when the merchant is clearly one of your own accounts. See Money In Money Out and Transfers.

It does not use categories you deleted. If you deleted “Travel”, nothing lands there; those rows arrive uncategorized instead.

It does not know your custom categories. The built-in merchant list targets the default category names. Your own categories get filled in by the rules you teach it, which works exactly as well after the first correction.

It never learns from itself. Only categories you set become rules. An automatic guess is never treated as evidence for future guesses, so one mistake cannot spread.


Related: Categories · Merchant Names · Importing Transactions · Default Categories