01 · How it works
The bank's category first, AI only for the gaps
When a transaction syncs from a connected bank through Plaid, Mozaic uses the bank's own category if there is one. Only the transactions the bank leaves uncategorized are sent to Google Gemini, which reads the merchant name and whether it was money in or out and returns a category. That order matters: it keeps the AI focused on the hard cases instead of second-guessing a category your bank already got right.
Brokerage transactions from SnapTrade arrive with no category of their own, so those go straight to the AI. Imported CSV transactions are handled the same way. The result is that most of your history is sorted without you touching it.
02 · It remembers, privately
Seen once, sorted instantly next time
Once a merchant has been categorized a couple of times, Mozaic saves that as an exact-match rule. The next transaction from that merchant is categorized instantly from the rule, without going back to the AI. This is a plain lookup, not a model trained on your habits, so it is fast, predictable, and keeps repeat merchants off the AI entirely.
Privacy is built into the order of operations. Only the merchant name and whether the amount was a debit or a credit are ever sent to the model. Account numbers, balances, and personal notes are not.
T
Tim HortonsDebit · Bank category (Plaid)
Coffee Shops
U
UberDebit · AI gap-fill
Rideshare/Taxi
P
Payroll depositCredit · Saved rule
Salary/Wages
03 · Always yours to correct
Re-categorize anything, and make it a rule
Every category is a suggestion you can change. Re-categorize any transaction and Mozaic marks it as yours, so no future sync ever overwrites it. Turn a correction into a rule, matched by exact text, contains, starts-with, or a regular expression, and apply it to past transactions in bulk, not just new ones. There are roughly 85 built-in categories across income, housing, transport, food, and more, and you can add your own.
Prefer to label everything yourself? Turn automatic categorization off entirely, and every new transaction stays uncategorized until you touch it. The choice of how much to automate is yours, not ours.
04 · Clear about the limits
Best-effort, never a black box
Automatic categorization is best-effort. If the AI is unavailable or you have turned it off, transactions simply stay uncategorized rather than getting a wrong label forced on them. Nothing blocks a sync waiting on a category.
Because the AI reads only the merchant and the amount direction, an ambiguous merchant name can land in the wrong bucket. That is exactly why every category stays one tap away from a correction that sticks, and why a single fix can become a rule that cleans up every past and future match at once.