Skip to main content
Auto-memory
Retell + Twilio
MCP ecosystem
Founder Pres.
Obsidian + QMD
Review pass
Claude / Codex
Convex
75K+ sold
SwiftUI CloudKit
Next.js + Vercel
1,350+ locations
Shopify
Session notes
Founder
MCP forks
<60s response
Operator chapters
QMD retrieval
121+ skills
Six figures raised
Founder office
back to grid
Projects2026

Tally

Tally is a native macOS and iOS app for finding recurring charges in bank statements. The source is public now, while the app itself is still being refined. I import a statement file, it flags likely subscriptions on-device, scores which are worth a look, and writes renewal reminders to Calendar.

100+
Swift files
macOS + iOS
native targets
On-device
detection path
Public source
active app build
§01The workLive system

A native app for reviewing subscriptions from a statement file. It detects likely recurring charges on-device, scores the ones worth reviewing, and creates renewal reminders in Calendar.

Tally
Native · on-device

Find recurring charges. Put renewals on the calendar.

A native app for reviewing subscriptions from a statement file. It detects likely recurring charges on-device, scores the ones worth reviewing, and creates renewal reminders in Calendar.

Tally's Home screen: monthly subscription spend, upcoming renewals for Netflix, iCloud+, Audible, and Spotify, an overlap-review flag, and a six-month spend bar chart.
Tally's Calendar screen: a June 2026 month grid with each subscription renewal placed on the day it bills, plus a chronological renewals list below.
The workHome screen. Monthly spend, the next renewals, an overlap flag, and a six-month spend trend. / Calendar screen. Every upcoming renewal placed on the day it bills, with a running list below.
§02The pipelineEnd-to-end flow
01

Import

CSV, XLSX, or legacy XLS comes in as a local statement file. Column detection and mapping turn it into normalized transactions.

Local file in
02

Detect

The app groups repeat merchants, checks cadence and amount patterns, and uses on-device model calls for the ambiguous cases.

Local scoring
03

Audit

Each likely subscription gets a review score and a plain-English reason so I can decide what to keep, cancel, or watch.

Review list
04

Calendar

Confirmed renewals become Calendar events with local alerts.

Reminder surface
§03What I builtPieces that compound

Four pieces matter: statement import, recurring-charge detection, review scoring, and Calendar reminders.

Statement import.

The current build accepts CSV, XLSX, and legacy XLS statement files. It detects columns, normalizes transactions, and cleans up payment-processor names so charges point back to the actual merchant.

CoreXLSX + vendored libxls

Recurring-charge detection.

The detector looks for monthly, biweekly, quarterly, semiannual, and annual patterns. It weighs timing, amount consistency, keywords, and known merchant profiles before calling something a subscription.

Cadence + merchant signals

On-device intelligence.

Apple Foundation Models handles uncertain merchant cleanup, category hints, and review explanations on-device. The app still has deterministic fallbacks when model output is not available.

On-device SystemLanguageModel

Review scoring.

The audit view scores each likely subscription 0–100 across overlap, price movement, confidence, cost, review status, and tenure.

0–100 across six factors

Apple-native storage.

SwiftData is the local source of truth, with CloudKit sync across my Apple devices and a local fallback when iCloud is not available.

SwiftData source of truth
§04The detection rulesLocal detection

The app does not trust one signal. A charge has to look recurring by timing, amount, merchant, and category before it counts.

Detection ruleslocal score · reviewable
  1. Clean the merchant name first, including common payment-processor prefixes like SQ *, SP *, PADDLE.NET, GUMROAD, and FASTSPRING.
  2. Group charges by cadence across monthly, biweekly, quarterly, semiannual, and annual patterns.
  3. Score each group by timing, amount consistency, subscription keywords, and known merchant profiles.
  4. Use the on-device model only for uncertain merchants and categories, not for every row.
  5. Turn the result into a review score and a Calendar reminder.
§05LessonsWhat carried forward

The build is active. The idea is simple.

Lesson · 01

Local-first keeps the trust boundary clear.

Statement review stays on the device. With private finance data, that is what makes it an app I will actually use.

Lesson · 02

Rules first keeps detection explainable.

If a deterministic rule can call a charge recurring, the model never sees it. I only reach for Foundation Models on the merchants the rules can't resolve.

Lesson · 03

Calendar is the right reminder surface.

A tracker only helps if the reminder beats the charge. Calendar already pings me; a separate inbox would not.

§06StackEvery tool earns its line
SwiftUI / UISwiftData / PersistenceCloudKit / SyncApple Foundation Models / On-device AIEventKit / CalendarUserNotifications / AlertsSwift Charts / VisualizationCoreXLSX + libxls / Statement importSwift 6.2 / Language
§07ArtifactsReceipts and public proof

The public repo and the active native app.

chountalas/tally on GitHubOpen ->

Public repository for the native subscription tracker, including the SwiftUI app, statement import, local detection pipeline, tests, and public-release docs.

public source · active app
Native macOS + iOS build

SwiftUI app with a shared SwiftData model layer and CloudKit sync across Apple devices. The active local repo has 100+ Swift files including tests.

active app build
On-device detection pipeline

Local recurring-charge detection across cadence, amount consistency, keywords, and merchant profiles. Apple Foundation Models handles uncertain cleanup and explanations on-device.

local
Review scoring

Likely subscriptions get a 0–100 review score and a short rationale so the app returns a decision list instead of a larger spreadsheet.

user-facing artifact
Calendar reminders

Confirmed renewals land in Calendar through EventKit with local notifications before the next charge.

user-facing artifact