.claude/skills/sync-bisa/SKILL.md
Export BISA transactions, categorize with AI, and import to YNAB
npx skillsauth add israellias/betterynab-sync sync-bisaInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
All python commands MUST use .venv/bin/python (not python or python3).
When the user runs this skill:
Run the export + convert pipeline:
.venv/bin/python -m bisa --dry-run [--since-date YYYY-MM-DD if provided]
(This opens the browser, exports CSV, converts transactions, saves to bisa/transactions.json)
Load the converted transactions:
.venv/bin/python -c "import json; from bisa import load_pending_transactions; print(json.dumps(load_pending_transactions()))"
Check if bisa/rules.md exists:
Pattern (in memo) | Amount Range | Payee | Category for when transaction amounts determine categorization (e.g. loan payments by amount range)bisa/rules.md with proper markdown formatting, then continueFetch BOB Budget categories (returns [{"id": "uuid", "name": "Category Name"}, ...]):
.venv/bin/python -c "import json; from bisa import get_bob_categories; print(json.dumps(get_bob_categories()))"
For each transaction:
a. Apply payee+category rules from bisa/rules.md (pattern matching on memo)
b. Apply amount-based rules (e.g. SYSPago ranges)
c. For unmatched: use AI judgment based on memo text + AI Guidance section in bisa/rules.md
d. Fuzzy-match the rule's category name against actual YNAB category names (ignore emojis)
e. Set category_id on the transaction using the matched category's id (YNAB requires the UUID, not a name)
If --auto-accept was passed: skip to step 8
Show the user a table:
Date | Amount | Payee | Category | Memo (truncated) | Source (rule/AI)
Ask user to approve or adjust
Write the final categorized transactions back to bisa/transactions.json, then import to YNAB:
.venv/bin/python -c "import json, sys; from bisa import import_to_ynab; txns = json.loads(sys.stdin.read()); result = import_to_ynab(txns); print(json.dumps(result))" (pipe the JSON via stdin)
development
Export Banco Sol transactions, categorize with AI, and import to YNAB
tools
Sync BOB Budget transactions to USD Budget with exchange rate conversion
development
Export Baneco transactions, categorize with AI, and import to YNAB
testing
Sync all bank pipelines and reconcile balances against YNAB