Why Streak Money never connects to your bank
I've quit every budgeting app I've tried.
Mint. YNAB. Copilot. Personal Capital. Each one died for me within a few weeks, in roughly the same way: I'd connect my bank, set up categories, log faithfully for ten days, miss a day, miss a week, and never open the app again.
The apps that survived in my life were the ones that asked for less, not more. Apple Health, with its single-step count. Duolingo, with its single question. Apple Fitness, with three rings. The math behind them was sometimes complicated. The loop you actually had to do was always small.
So when I started building Streak Money, the first decision was not which features to include, but which to refuse.
The refusal
I would not ask the user to connect a bank account.
Bank connection is the spiritual centre of the budgeting app category. Mint built itself on it. Plaid is a unicorn because of it. YNAB and Copilot both lean on it. From the user's side, the value is supposed to be obvious — give us your login, we'll do the work.
But here's what bank connection actually buys, and at what cost:
What it buys: a list of recent transactions, auto-pulled, auto-categorised.
What it costs:
- Your bank credentials sit in a third-party vault (Plaid / Yodlee). When Plaid had a breach in 2020 they paid $58M to settle. The vault is not theoretical.
- The app's privacy policy must now disclose a third-party data processor. You can't audit Plaid's downstream sharing.
- Your transaction list is a high-resolution behavioural map. Where you eat, what you watch, when you fill up your gas tank, when you buy groceries. The app can sell this in aggregate ("anonymised") even when it promises not to.
- Connections break — banks rotate auth tokens, Plaid loses the connection, you re-auth every 30-90 days.
I weighed the value (auto-categorisation) against the cost (behavioural exposure, ongoing friction, breach risk) and concluded: the value isn't actually high. The cost is real.
So Streak Money never asks for your bank.
What it asks for instead
Three numbers, once. During onboarding:
- Monthly income (you can decline if you'd rather use a country-PPP median).
- Total monthly fixed costs (rent, bills, subscriptions — one bucket, not 30 categories).
- A savings goal as a percentage of your discretionary income (the bit that's left after fixed costs).
From those three numbers, the app computes a daily cap. Each morning the cap is slightly different — a deterministic ±20% variation per day so the number feels organic. Each evening, you answer one question: did you stay under?
Yes builds a streak. No resets it. You don't log transactions. You don't categorise anything. You just remember whether today was a yes or a no.
That's it.
Where the math lives
The cap calculation runs entirely on your device. There's no server that knows your income. The income, fixed costs, and savings goal are stored in the iOS app sandbox (SwiftData, encrypted at rest by the OS) and never leave the phone.
The two things that leave the phone are:
Anonymous Firebase Analytics events — bucketed events like "paywall viewed", "tab switched", with no identifying parameters. Firebase is configured with the IDFA-free product (
FirebaseAnalyticsWithoutAdIdSupport) so no advertising identifier is ever read. The ATT prompt — the "Ask App Not to Track" popup — doesn't appear in the app because there's nothing to track.RevenueCat receipt validation — when you start a Pro trial, RevenueCat validates the Apple receipt server-side. The data they hold is the Apple transaction ID, the product ID, and a random per-install UUID. They never see your name, your email, or your device identifier.
The privacy posture is verifiable. The PrivacyInfo.xcprivacy file inside the .app bundle declares every data type the app collects. The App Store privacy summary on the listing reads "Data Not Linked to You" for everything except purchase history (linked via the RevenueCat anon UUID, no PII attached).
If someone wants to security-review the bundle, send me an email and I'll add them to TestFlight.
The streak is the savings
The reason this whole thing works is not the math — it's the streak.
I gave up on monthly budgeting because months are too long. By day 20 I'd already overshot one category and was negotiating with myself to underspend somewhere else. Daily caps don't let you negotiate. Each day is a clean win or loss.
A visible streak makes the next decision automatic. You stop opening the app to check whether you can afford a coffee. You start opening it at the end of the day to log the green.
This is the entire product. The cap is the cue. The streak is the proof.
What's next
Streak Money is live on the App Store. Free, with an optional Pro tier ($2.99/month or $19.99/year, 7-day free trial in 175 countries). Pro adds Skip Tokens — three per month to rescue a broken streak — and Vacation Mode, so a five-day road trip doesn't undo three months of habit.
If you've tried it, I'd love your notes. The build process for this v1 took six months and three Apple rejections; I'm sure the v2 will look different. The privacy stance won't.
Want updates? Sign up below — one email a month, no spam, unsubscribe with one tap.