Financial Categorizer
/install financial-categorizer
financial-categorizer
Process bank transaction CSV exports, auto-categorize transactions using configurable rules, manage transaction links, and generate analytical SQLite database views.
Quick Start
Run the CLI tool from your terminal pointing to your database path:
# 1. Add your personal checking account
python cli.py --db ../data/finance.db add-account "Nordea Checking" --type personal --ownership 1.0
# 2. Add hierarchical categories
python cli.py --db ../data/finance.db add-category "Food"
python cli.py --db ../data/finance.db add-category "Groceries" --parent 1
# 3. Add auto-categorization rules
python cli.py --db ../data/finance.db add-rule 2 "ICA MAXI" --type contains
python cli.py --db ../data/finance.db add-rule 1 "^Hyra" --type regex
# 4. Import transactions from a bank CSV file
python cli.py --db ../data/finance.db import transactions.csv --account "Nordea Checking"
# 5. Run auto-categorization over uncategorized transactions
python cli.py --db ../data/finance.db categorize
# 6. View monthly summary statistics
python cli.py --db ../data/finance.db stats-summary
Data Storage Pattern
User data lives OUTSIDE the skill directory. Recommended structure:
workspace-finance/
├── skills/financial-categorizer/ # Portable skill (shareable)
│ ├── SKILL.md
│ ├── cli.py
│ ├── setup.py
│ └── financial_categorizer/
└── data/ # Your private data
├── finance.db
└── exports/
├── Nordea_Checking.csv
└── ICA_Shared.csv
The skill provides logic. Your data stays private and portable.
CLI Reference
| Command | Description |
|---|---|
import \x3Cfiles> |
Import bank CSV transactions |
accounts |
List all registered bank accounts |
add-account \x3Cname> |
Create a new bank account |
update-account \x3Cid> |
Update account ownership ratio, type, name, etc. |
delete-account \x3Cid> |
Delete a bank account |
categories |
List all categories in tree view |
add-category \x3Cname> |
Create a new category |
update-category \x3Cid> |
Update category parents or fields |
delete-category \x3Cid> |
Delete a category |
rules |
List all auto-categorization rules |
add-rule \x3Ccat_id> \x3Cpattern> |
Add a categorization rule (regex, contains, exact) |
remove-rule \x3Cid> |
Remove an auto-categorization rule |
preview \x3Cpattern> |
Preview which transactions match a pattern before adding a rule |
categorize [--all] |
Run auto-categorization rules |
uncategorized |
List all uncategorized transactions |
manual-match \x3Ctxn_id> \x3Ccat_id> |
Manually assign a category override to a transaction |
stats-summary |
Monthly summary of income, expenses, and net |
stats-category \x3Cname> |
Category total with subcategory rollups |
stats-trend \x3Cname> |
Monthly trend for a category |
stats-top |
Top spending categories sorted by total expenses |
link \x3Cfrom_id> [to_id] --type |
Link transactions (e.g. transfers, reimbursements) |
unlink \x3Cid> |
Remove a link |
links |
List all transaction links |
recalculate |
Manually recalculate adjusted amounts for all transactions |
db-cleanup [--dry-run] |
Purge orphaned transaction links and rules (Integrity Cleanup) |
Skill Contents
financial-categorizer/
├── SKILL.md # This file
├── requirements.txt # pip dependencies
├── setup.py # setuptools configuration
├── cli.py # Main entrypoint
└── financial_categorizer/ # Package code
├── __init__.py
├── categorizer.py # Auto-categorization & rule engine
├── db_handler.py # Database CRUD & raw schema setup
├── importer.py # CSV Parser (Nordea & ICA formats)
└── stats.py # SQL View registers and stats math
SQLite Database Schema & Views
This skill utilizes a dynamic database schema. Analytical SQL views are registered dynamically to provide high performance and low-overhead querying for dashboards (e.g., Grafana):
v_effective_transactions— Joins transactions with accounts to factor in ownership ratios and transfer link adjustments.v_monthly_summary— Calculates net income/expenses by month.v_category_monthly— Calculates monthly spending by category.v_daily_spending— Daily expense aggregation.v_cumulative_spending_monthly— Running month-to-date daily cumulative spending.v_daily_spending_moving_average— 30-day moving average of daily spending.v_category_monthly_averages— Average monthly spending by category.v_salary_period_summary— Expense/income summary grouped by salary periods (25th to 24th).v_breakout_categories— Groups monthly spending into high-level categories (Groceries, Loans, Housing, Leisure, Car, etc.).v_uncategorized_groups— Groups uncategorized transactions by normalized Swish/Card payment descriptions to identify potential new rules.
Dependencies
pytest- For testing suite- Standard library modules:
sqlite3,csv,datetime,logging,re,argparse,os
Install: pip install -e .
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install financial-categorizer - After installation, invoke the skill by name or use
/financial-categorizer - Provide required inputs per the skill's parameter spec and get structured output
What is Financial Categorizer?
Process bank transaction CSV exports (Nordea, ICA), auto-categorize transactions using configurable rules, manage transaction links, and generate analytical... It is an AI Agent Skill for Claude Code / OpenClaw, with 48 downloads so far.
How do I install Financial Categorizer?
Run "/install financial-categorizer" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Financial Categorizer free?
Yes, Financial Categorizer is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Financial Categorizer support?
Financial Categorizer is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Financial Categorizer?
It is built and maintained by Patrik Ekenberg (@patello); the current version is v1.0.2.