Back to Work

Financial Automation

SaaS Subscription Auditor

Automated spend analysis that ingests bank feeds, detects recurring subscriptions, and recommends cancellations — $1,944/year in savings identified on the first run.

$1,944

Annual savings found

26

Subscriptions detected

2

Data source integrations

<60s

Full audit runtime

The Problem

SaaS subscription sprawl is a universal problem for businesses and individuals alike. Services sign up easily, charge small monthly amounts, and survive indefinitely because nobody reviews the credit card statement closely enough. Enterprise solutions like Zylo and Productiv cost $50K+/year. Consumer tools like Trim or Rocket Money take a percentage of savings found.

We needed something that worked for a small business: no recurring cost, no percentage take, just a script that reads bank data and tells you what to cancel.

How It Works

TillerBot is a Python application that connects to financial data through two channels:

  • Tiller Money: A Google Sheets-based service that automatically pulls transactions from bank and credit card accounts into a structured spreadsheet. TillerBot reads this spreadsheet via the Google Sheets API.
  • Apple Card CSV: For accounts not supported by Tiller, the system imports Apple Card transaction exports directly.

Detection Pipeline

  1. Transaction ingestion: Pull all transactions from the last 12 months across all connected accounts. Normalize merchant names, amounts, and dates.
  2. Recurring pattern detection:Identify transactions that repeat on a regular interval (monthly, quarterly, annual). The categorizer uses merchant name fuzzy matching, amount clustering, and date interval analysis to group charges that belong to the same subscription — even when merchant names vary slightly between charges.
  3. Classification: Each detected subscription is classified by category (productivity, entertainment, cloud infrastructure, domains, etc.) and assessed against usage patterns. A subscription with no associated login activity or API calls in 90 days is flagged as a cancellation candidate.
  4. Savings calculation: Project annual cost for each subscription. Flag duplicates (two project management tools, three cloud storage services). Calculate total recoverable spend.

Beyond Audit: The CFO Assistant

The subscription audit was the first module. TillerBot expanded into a full personal CFO with additional capabilities:

CommandWhat It Does
briefingMorning summary: balances, spending alerts, upcoming bills
forecast30-day cash flow projection based on historical patterns
alertsUnusual charges, large transactions, low balance warnings
billsUpcoming recurring bills with due dates and amounts
insightsSpending trends, category breakdowns, month-over-month changes
taxTax-relevant expense summary for quarterly/annual filing

Results

The first audit run across two data sources detected 26 active subscriptions. Of those:

  • 8 were flagged for immediate cancellation (unused or duplicate services)
  • 4 were flagged for downgrade (paying for premium tiers with basic usage)
  • Total identified savings: $1,944/year

The automated morning briefing (delivered via iMessage at 8am) replaced a manual weekly check that took 15–20 minutes per session. The 30-day cash flow forecast eliminated surprise shortfalls by projecting known recurring expenses against expected income.

Architecture Decisions

  • Google Sheets as database: Tiller Money already structures transaction data in Google Sheets. Rather than building a separate database, TillerBot reads directly from the sheet. This means data stays where the user already reviews it, and manual corrections in the spreadsheet are automatically reflected in the next audit run.
  • LaunchAgent for scheduling:On macOS, a LaunchAgent plist triggers the daily briefing at 8am. No cron, no server, no cloud function — just a local daemon that runs the script and sends the result via iMessage or terminal notification.
  • Apple Reminders integration: Action items (subscriptions to cancel, bills coming due) are written directly to Apple Reminders, which syncs across devices and provides native notification support.

Stack

PythonGoogle Sheets APITiller MoneyApple Card CSVApple RemindersLaunchAgentiMessage