refund-radar

Scan bank statements to detect recurring charges, flag suspicious transactions, and draft refund requests with interactive HTML reports.

3,891 stars

Best use case

refund-radar is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Scan bank statements to detect recurring charges, flag suspicious transactions, and draft refund requests with interactive HTML reports.

Teams using refund-radar should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/refund-radar/SKILL.md --create-dirs "https://raw.githubusercontent.com/openclaw/skills/main/skills/andreolf/refund-radar/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/refund-radar/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How refund-radar Compares

Feature / Agentrefund-radarStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Scan bank statements to detect recurring charges, flag suspicious transactions, and draft refund requests with interactive HTML reports.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# refund-radar

Scan bank statements to detect recurring charges, flag suspicious transactions, identify duplicates and fees, draft refund request templates, and generate an interactive HTML audit report.

## Triggers

- "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"
- "audit my subscriptions"

## Workflow

### 1. Get Transaction Data

Ask user for bank/card CSV export or pasted text. Common sources:

- Apple Card: Wallet → Card Balance → Export
- Chase: Accounts → Download activity → CSV
- Mint: Transactions → Export
- Any bank: Download as CSV from transaction history

Or accept pasted text format:
```
2026-01-03 Spotify -11.99 USD
2026-01-15 Salary +4500 USD
```

### 2. Parse and Normalize

Run the parser on their data:

```bash
python -m refund_radar analyze --csv statement.csv --month 2026-01
```

Or for pasted text:
```bash
python -m refund_radar analyze --stdin --month 2026-01 --default-currency USD
```

The parser auto-detects:
- Delimiter (comma, semicolon, tab)
- Date format (YYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY)
- Amount format (single column or debit/credit)
- Currency

### 3. Review Recurring Charges

Tool identifies recurring subscriptions by:
- Same merchant >= 2 times in 90 days
- Similar amounts (within 5% or $2)
- Consistent cadence (weekly, monthly, yearly)
- Known subscription keywords (Netflix, Spotify, etc.)

Output shows:
- Merchant name
- Average amount and cadence
- Last charge date
- Next expected charge

### 4. Flag Suspicious Charges

Tool automatically flags:

| Flag Type | Trigger | Severity |
|-----------|---------|----------|
| Duplicate | Same merchant + amount within 2 days | HIGH |
| Amount Spike | > 1.8x baseline, delta > $25 | HIGH |
| New Merchant | First time + amount > $30 | MEDIUM |
| Fee-like | Keywords (FEE, ATM, OVERDRAFT) + > $3 | LOW |
| Currency Anomaly | Unusual currency or DCC | LOW |

### 5. Clarify with User

For flagged items, ask in batches of 5-10:

- Is this charge legitimate?
- Should I mark this merchant as expected?
- Do you want a refund template for this?

Update state based on answers:
```bash
python -m refund_radar mark-expected --merchant "Costco"
python -m refund_radar mark-recurring --merchant "Netflix"
```

### 6. Generate HTML Report

Report saved to `~/.refund_radar/reports/YYYY-MM.html`

Copy [template.html](assets/template.html) structure. Sections:
- **Summary**: Transaction count, total spent, recurring count, flagged count
- **Recurring Charges**: Table with merchant, amount, cadence, next expected
- **Unexpected Charges**: Flagged items with severity and reason
- **Duplicates**: Same-day duplicate charges
- **Fee-like Charges**: ATM fees, FX fees, service charges
- **Refund Templates**: Ready-to-copy email/chat/dispute messages

Features:
- Privacy toggle (blur merchant names)
- Dark/light mode
- Collapsible sections
- Copy buttons on templates
- Auto-hide empty sections

### 7. Draft Refund Requests

For each flagged charge, generate three template types:
- **Email**: Formal refund request
- **Chat**: Quick message for live support
- **Dispute**: Bank dispute form text

Three tone variants each:
- Concise (default)
- Firm (assertive)
- Friendly (polite)

Templates include:
- Merchant name and date
- Charge amount
- Dispute reason based on flag type
- Placeholders for card last 4, reference number

**Important**: No apostrophes in any generated text.

## CLI Reference

```bash
# Analyze statement
python -m refund_radar analyze --csv file.csv --month 2026-01

# Analyze from stdin
python -m refund_radar analyze --stdin --month 2026-01 --default-currency CHF

# Mark merchant as expected
python -m refund_radar mark-expected --merchant "Amazon"

# Mark merchant as recurring
python -m refund_radar mark-recurring --merchant "Netflix"

# List expected merchants
python -m refund_radar expected

# Reset learned state
python -m refund_radar reset-state

# Export month data
python -m refund_radar export --month 2026-01 --out data.json
```

## Files Written

| Path | Purpose |
|------|---------|
| `~/.refund_radar/state.json` | Learned preferences, merchant history |
| `~/.refund_radar/reports/YYYY-MM.html` | Interactive audit report |
| `~/.refund_radar/reports/YYYY-MM.json` | Raw analysis data |

## Privacy

- **No network calls.** Everything runs locally.
- **No external APIs.** No Plaid, no cloud services.
- **Your data stays on your machine.**
- **Privacy toggle in reports.** Blur merchant names with one click.

## Requirements

- Python 3.9+
- No external dependencies

## Repository

https://github.com/andreolf/refund-radar

Related Skills

radar-collision-warning

3891
from openclaw/skills

雷达防撞预警 — 调用树莓派上 ROS2 节点的雷达预警服务。当用户说"雷达防撞预警"、"开启雷达监控"、"检查障碍物"等时使用。通过 rosbridge WebSocket 向树莓派发送 ROS2 Service 请求,获取最近障碍物距离并给出预警。依赖 Node.js 18+(内置 WebSocket,无需安装任何包)。

market-radar

3891
from openclaw/skills

Real-time market scanning and alert system. Monitors SPX, major indices, VIX, and key crypto prices. Generates alerts when significant levels are crossed.

Lead Radar

3891
from openclaw/skills

Every morning, scans Reddit, Hacker News, Indie Hackers, Stack Overflow, Quora, Hashnode, Dev.to, GitHub, and Lobsters for people actively asking for what you sell. Delivers the top 10 buying-intent leads to your Telegram with a pre-drafted reply. Powered by Gemini 2.5 Flash.

ai-layoff-radar

3891
from openclaw/skills

Detect AI-driven layoffs from global news and generate structured risk reports.

strikeradar

3891
from openclaw/skills

Monitor US-Iran strike probability using open-source indicators - news alerts, Iran internet connectivity, oil prices, flight traffic, military tanker detection, weather, Polymarket odds, and Pentagon activity. Use when user asks about "Iran strike probability", "strike radar", "Iran situation", "US attack Iran", "flights over Iran", "oil prices Iran", "Pentagon activity", "Polymarket Iran", "הסתברות תקיפה באיראן", "מצב איראן", "סטרייק ראדאר".

personal-deadline-radar

3891
from openclaw/skills

扫描个人待办、会议和消息摘要,找即将到期事项与时间冲突。;use for deadlines, calendar, tasks workflows;do not use for 自动改日历, 伪造截止时间.

meeting-risk-radar

3891
from openclaw/skills

会前识别高风险议题、模糊责任、缺失材料和可能失控的讨论点。;use for meeting-risk, preflight, facilitation workflows;do not use for 分析私密录音, 替代正式风险审查.

journal-submission-radar-all-types

3891
from openclaw/skills

统一检索国内外多类型期刊,输出投稿路径核验、定制写作建议、风险提示与可控广告插入的客户顾问型 Skill。

meme-risk-radar-skill

3891
from openclaw/skills

Bilingual meme token risk radar for Binance Web3 data. Scan newly launched or fast-rising meme tokens from Meme Rush, enrich with token audit and token info, produce a normalized risk report in Chinese or English, and support SkillPay billing hooks for paid scan and audit calls.

---

3891
from openclaw/skills

name: article-factory-wechat

Content & Documentation

humanizer

3891
from openclaw/skills

Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.

Content & Documentation

find-skills

3891
from openclaw/skills

Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.

General Utilities