Fully local transaction categorization means the ledger lives in SQLite on your machine, free rules sort most merchants without a network, and optional on-device AI stays optional—not a toll booth on your private data.
This is a product decision, not a slogan. We moved Expense Sorted's categorization job to local-first because trust, agent workflows, and long-term ownership do not fit cleanly inside a cloud finance vault or a spreadsheet add-on story. Here is the narrative—what broke, what we kept free, and what Local Pro actually buys.
The job was never "another dashboard"
People open expense tools to answer a few recurring questions:
- Where did the money go last month?
- Which merchants are creeping?
- What is still uncategorized before tax time?
- Can my co-pilot (human or AI) query this without a week of spreadsheet cleanup?
Bank-linked apps optimize for automatic ingest. Hosted AI optimizes for someone else's GPU. Spreadsheets optimize for familiar UI. None of those automatically optimize for you keeping the system of record.
When categorization lives only in a remote API, every improvement to accuracy is also a reason to keep sending descriptions off-device. When it lives only in a fragile formula column, agents cannot reliably call it as a tool. We wanted one answer: categorize where the data already should live—on your computer.
What "local" means here (and what it does not)
Means
- Transactions in a local SQLite file you can back up, migrate, or open with ordinary tools.
- CLI (
es) and MCP so agents share the same engine as the optional desktop UI.
- Rules-based categorize free forever—import, query, export, summarize, MCP install included.
- Local Pro as optional on-device intelligence: local NN categorize, embeddings, semantic search for $49 one-time lifetime.
- 14-day Pro trial via email mint on /local—not a card on file, not a machine fingerprint.
Does not mean
- Pretending chat clients never talk to model providers. Prefer tool calls against the local DB over pasting full statements into free-form chat.
- Claiming every bank integration on earth is offline. Local's primary ingest is CSV (and related local import)—no bank login to a third-party aggregator for this path.
- Making Google Sheets "bad." Sheets remains a free lead magnet for a 3-minute start—not an equal hero pillar next to Local.
Why trust broke for cloud categorize
Three pressure points kept showing up in conversations with privacy-sensitive users and with ourselves as builders:
1. Data gravity and quiet retention
Once statements sit on a vendor's disk for "better models," retention, subprocessors, and policy changes become part of your threat model. Even good vendors create optional risk you cannot fully audit. Local default: the file is yours; Local product flows do not upload statements to Expense Sorted for storage or cloud AI categorize.
2. The subscription shape mismatched the job
Categorization is a monthly hygiene job, not a social network. Bundling it into perpetual SaaS upsells ("AI monthly," multi-tier hosted plans) trains people to rent clarity. We froze Local as download + free rules + optional lifetime Pro. Obsolete offers—$2/mo, $25 lifetime hosted AI, $10 bundles, extension-as-product—are not the current Local story.
3. Agents need tools, not vaults
The interesting shift in 2025–2026 is not another pastel budget UI. It is agents with tools. An agent that can import, categorize, query, and summarize against a durable local DB beats a one-off CSV paste into Claude. That only works cleanly if the categorize job is local and scriptable—hence MCP and the es binary.
For the install walkthrough (tarball → es mcp --print-config → Claude/Cursor), use Local SQLite + MCP with Claude and Cursor.
Free rules vs Local Pro — no bait-and-switch
| Free Local | Local Pro ($49 lifetime) |
|---|
| Import / export | Yes | Yes |
| Query / summarize | Yes | Yes |
| Rules-based categorize | Yes forever | Yes |
| MCP install | Yes | Yes |
| Local NN categorize | No | Yes |
| Embeddings / semantic search | No | Yes |
If rules cover 90% of your merchants, stay free forever. If you want local neural categorize and semantic search without shipping text to a classify API, Pro is the unlock—not a recurring hostage fee.
Competitive wedges (short)
Vs bank-linked apps (Plaid/Mint-class): No bank login to an aggregator for the Local path. CSV → local SQLite. You own the file.
Vs DIY Claude + CSV: A durable schema, rules + optional local NN, export, and first-class MCP/CLI—not a chat transcript that expires.
Vs Sheets-only forever: Sheets is an excellent free start. Local is for a real database, offline control, and agent tools. Honest comparison: Local vs Google Sheets template.
What we intentionally stopped saying
As a current offer, we do not lead with:
- "Install the extension" / "get the Sheets add-on" as the product
- Three equal pillars of template + add-on + desktop
- Hosted $2/mo AI or $25 lifetime as the Local hero upsell
- $10 one-time bundles as the living SKU
Desktop remains an optional UI shell for the same engine—not a separate marketing religion. The product name is Expense Sorted Local.
Migration honesty for past paid users
If you paid for older Sheets AI or related plans, the public migration story lives at /migrate: free template continues; Local Free + Local Pro is the path forward; eligible past paid plans receive complimentary Local Pro. Activate in desktop settings or es license set. We are not here to shame Sheets—we are here to stop pretending the extension is the long-term product.
What this unlocks in practice
- Monthly close that runs with the network off (for the data plane).
- Agent bookkeeping without inventing a new schema each chat.
- Auditable privacy story you can explain to a partner, a board, or a privacy-conscious self: the SQLite path is the system of record.
- Pricing you can screenshot without a maze of AI tiers.
How to try the new default
- Read the install guide: Local SQLite + MCP expense tracking.
- Open Expense Sorted Local for download, 14-day Pro trial, or $49 lifetime.
- If you only need a free zero-install start today, grab the Google Sheets template—then upgrade when agent tools and a real DB matter.
Privacy-first CSV workflows without bank linking are still valid; Local is the end-state when you want SQLite and agents on the same data: Expense tracker without bank linking.
Closing
We moved categorization local because the alternative forced a false choice: convenience that rents your ledger, or privacy that rejects automation. Free rules, optional lifetime on-device AI, and MCP tools on your SQLite file is the combination we are willing to defend in public—including on forums that care more about trust than about another pastel dashboard.
Your transactions should not need a cloud vault to earn a category.