← Back to Skills Marketplace
patello

Financial Categorizer

by Patrik Ekenberg · GitHub ↗ · v1.0.2 · MIT-0
cross-platform ✓ Security Clean
48
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install financial-categorizer
Description
Process bank transaction CSV exports (Nordea, ICA), auto-categorize transactions using configurable rules, manage transaction links, and generate analytical...
README (SKILL.md)

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):

  1. v_effective_transactions — Joins transactions with accounts to factor in ownership ratios and transfer link adjustments.
  2. v_monthly_summary — Calculates net income/expenses by month.
  3. v_category_monthly — Calculates monthly spending by category.
  4. v_daily_spending — Daily expense aggregation.
  5. v_cumulative_spending_monthly — Running month-to-date daily cumulative spending.
  6. v_daily_spending_moving_average — 30-day moving average of daily spending.
  7. v_category_monthly_averages — Average monthly spending by category.
  8. v_salary_period_summary — Expense/income summary grouped by salary periods (25th to 24th).
  9. v_breakout_categories — Groups monthly spending into high-level categories (Groceries, Loans, Housing, Leisure, Car, etc.).
  10. 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 .

Usage Guidance
Install only if you are comfortable with a local CLI that can modify your finance database. Keep backups of the SQLite database before running delete, cleanup, auto-link, or bulk recategorization commands, and prefer dry-run options where available.
Capability Assessment
Purpose & Capability
The skill's capabilities match its stated purpose: importing bank CSVs, categorizing transactions, managing accounts/categories/rules/links, and generating SQLite-based finance reports.
Instruction Scope
The documentation clearly lists mutating and deleting CLI commands, but destructive commands such as delete-category, delete-account, remove-rule, unlink, auto-link, and db-cleanup do not consistently document confirmation, backup, or undo expectations.
Install Mechanism
Installation uses a simple setuptools package with a console entry point and no external runtime dependencies beyond the Python standard library.
Credentials
The tool operates on user-specified local CSV files and a local SQLite database; no network calls, credential/session access, broad filesystem indexing, or background workers were found.
Persistence & Privilege
Persistence is limited to the local SQLite database path selected by the user, but several commands can permanently change records or derived financial analysis state.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install financial-categorizer
  3. After installation, invoke the skill by name or use /financial-categorizer
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.2
Automated release from git tag 1.0.2
Metadata
Slug financial-categorizer
Version 1.0.2
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

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.

💬 Comments