refund-radar
A local-first, privacy-first bank statement auditor that detects recurring charges, flags suspicious transactions, and drafts ready-to-send refund requests.
What This Skill Does
- •Parses bank/card statement exports (CSV or pasted text)
- •Detects recurring subscription charges
- •Flags unexpected, duplicate, and fee-like transactions
- •Generates an interactive HTML audit report
- •Creates ready-to-send refund request templates
- •Learns from your decisions to improve future scans
Trigger Phrases
- •"Scan my bank statement for refunds"
- •"Analyze my credit card transactions"
- •"Find recurring charges in my statement"
- •"Check for duplicate or suspicious charges"
- •"Help me dispute a charge"
- •"Generate a refund request"
How To Use
Step 1: Get Your Statement
Export transactions from your bank as CSV, or copy-paste them as text.
Step 2: Analyze
bash
# From CSV file python -m refund_radar analyze --csv ~/Downloads/statement.csv --month 2026-01 # From pasted text (stdin) python -m refund_radar analyze --stdin --month 2026-01 --default-currency CHF
Step 3: Review Flags
The tool will:
- •Show recurring subscriptions with estimated next charge
- •Flag unexpected charges (new merchants, spikes, duplicates)
- •Ask clarifying questions in batches of 5-10
Step 4: Get Your Report
Output files are saved to:
- •
~/.refund_radar/reports/YYYY-MM.html(interactive report) - •
~/.refund_radar/reports/YYYY-MM.json(raw data)
Step 5: Send Refund Requests
Copy refund templates directly from the HTML report. Templates are pre-filled with:
- •Merchant name and date
- •Charge amount
- •Dispute reason
- •Your preferred tone (concise, firm, friendly)
CLI Reference
bash
# Analyze a statement python -m refund_radar analyze --csv path/to/file.csv --month 2026-01 # Analyze from stdin python -m refund_radar analyze --stdin --month 2026-01 --default-currency CHF # Mark a merchant as expected (wont flag in future) python -m refund_radar mark-expected --merchant "AMZN Mktp" # Mark a merchant as known recurring python -m refund_radar mark-recurring --merchant "Spotify" # List expected merchants python -m refund_radar expected # Reset all learned state python -m refund_radar reset-state # Export month data as JSON python -m refund_radar export --month 2026-01 --out out.json
Files Written
| Path | Purpose |
|---|---|
~/.refund_radar/state.json | Learned preferences and merchant history |
~/.refund_radar/reports/YYYY-MM.html | Interactive audit report |
~/.refund_radar/reports/YYYY-MM.json | Raw analysis data |
Privacy Note
- •No network calls. Everything runs locally.
- •No external APIs. No Plaid, no cloud services.
- •Your data stays on your machine. Reports are local HTML files.
- •Privacy toggle in reports. Blur merchant names with one click.
Detection Logic
Recurring Charges
- •Same merchant >= 2 times in 90 days
- •Similar amounts (within 5% or 2.00)
- •Consistent cadence (weekly, monthly, yearly)
- •Known subscription keywords (Netflix, Spotify, etc.)
Unexpected Charges
- •New merchant: First time seeing this merchant AND amount > 30
- •Amount spike: > 1.8x your baseline for this merchant
- •Duplicate: Same merchant + amount within 2 days
- •Fee-like: Contains FEE, COMMISSION, ATM, OVERDRAFT keywords
- •Currency anomaly: Unusual currency or DCC indicator
Example Flow
code
$ python -m refund_radar analyze --csv bank.csv --month 2026-01 Parsed 47 transactions for 2026-01 RECURRING CHARGES (5) Netflix $15.99/mo next: ~Feb 15 Spotify $11.99/mo next: ~Feb 03 iCloud $2.99/mo next: ~Feb 01 ChatGPT Plus $20.00/mo next: ~Feb 20 Gym Membership $49.00/mo next: ~Feb 10 FLAGGED (3) [HIGH] DUPLICATE: Amazon $29.99 on Jan 12 and Jan 12 [MED] AMOUNT SPIKE: Uber $87.50 (baseline: $25) [LOW] FEE: ATM Withdrawal Fee $3.50 Report saved: ~/.refund_radar/reports/2026-01.html
Improving Over Time
The tool remembers:
- •Merchants you mark as expected
- •Recurring subscriptions you confirm
- •Your merchant aliases (e.g., "AMZN" = "Amazon")
This means fewer false positives on future runs.