No charge in 45 days
For weekly, biweekly and monthly streams, a gap of 45 days or more since the last matching charge means the subscription may already have lapsed — or is about to bill you for something you stopped using.
Subscriptions
Subscriptions are designed to be invisible. Small enough to ignore on a statement, automatic enough to survive years of neglect, and spread across enough merchants that nobody adds them up. So we add them up: every recurring charge, what it costs a month, what it costs a year, and which ones look like money you are no longer getting anything for.
What we do not do is cancel anything for you. That one is worth explaining properly, and it is further down this page.
how detection works
No merchant blocklist, no brand database to fall out of date. A charge is recurring because it behaves like one.
Detecting subscriptions by name would mean maintaining a list of every subscription business on earth, which is both impossible and guaranteed to miss the small local gym that is quietly billing you every month. So the detector ignores names almost entirely and looks at behaviour instead.
Charges are first grouped by normalized merchant and direction — the same descriptor cleanup described on the expense tracker page, so that a rotating store number cannot split one merchant into six. Multiple charges on the same day collapse into one, because an intra-day repeat should not be mistaken for a rhythm. Then two gates:
The median gap between charges must land inside a known window — roughly weekly, biweekly, monthly, quarterly or annual. Median rather than mean, because a single late payment should not drag the whole judgement. Then a regularity check: at least sixty percent of the individual gaps must sit within that cadence's tolerance, which is how genuinely periodic charges are separated from ones that merely average out to a period by coincidence.
The variation in charge amounts — the standard deviation relative to the average — must stay below a ceiling. Above 0.45, the stream is rejected as recurring at all: that is a merchant you visit often, not a commitment that bills you. For something to be called a subscription rather than a bill, the bar is much tighter at 0.15, because subscriptions have prices and shopping has baskets.
A price rise does not break detection. Five months at one price and a sixth slightly higher still reads as the same subscription, and the average used for your totals moves with it — so the figure you see reflects what the merchant charges now, not what it charged when you signed up.
Two merchants through both gates
subscriptions vs bills
Once a stream is recognized, it is sorted into one of three groups. Money coming in is income — your paycheck is a recurring stream too, and recognizing it is how the app knows your cadence and stability. Recurring outflows in Housing, Utilities, Transport, Health & Fitness and Fees are bills: real, fixed, and worth seeing, but not things a list of “cancel these” suggestions should ever contain. Everything else — Subscriptions and Entertainment categories, plus small unclassified recurring outflows — is a subscription.
The distinction matters because the advice attached to each is completely different. You do not cancel your rent; you might renegotiate it. You can cancel a streaming service this afternoon. Mixing the two into one list produces a number that looks alarming and suggests nothing you can act on, which is the least useful kind of insight there is.
the number
Every cadence normalized to a monthly figure, then the honest annual multiple.
The headline totals are deliberately simple. Each subscription is converted to a monthly equivalent — annual divided by twelve, quarterly by three, weekly multiplied by 52/12 — and summed. Anything you have marked as canceled drops out immediately. The annual figure is that monthly total times twelve, computed in integer cents so it agrees with itself to the penny.
Alongside that sits the reclaim figure: what the currently flagged subscriptions would give back if you canceled them. That is deliberately narrower than the total. It would be easy to show a huge number by implying you should cancel everything, but you should not cancel everything, and a number you would never act on is just theatre. The reclaim figure is only the ones with a specific reason attached.
And once you do cancel something, the amount you have already reclaimed keeps its own running total — because the point of the exercise is not the horror of the annual figure, it is watching it come down.
Six subscriptions, totalled and flagged
savingsIfCanceled() and monthlyRecurringTotal() functions the app uses, including the cadence normalization. The flag wording is the app's real wording.what gets flagged
For weekly, biweekly and monthly streams, a gap of 45 days or more since the last matching charge means the subscription may already have lapsed — or is about to bill you for something you stopped using.
When two active subscriptions share a category, the cheaper one is flagged as the likely duplicate. It is a prompt to choose, not an instruction — plenty of people knowingly keep two.
Upcoming renewals and bills within the next fortnight appear as notifications, so the decision happens before the charge instead of after it.
Flags are suggestions with reasons attached. Keep silences one permanently; marking something canceled removes it from your totals. Nothing is ever actioned automatically.
Every flag carries the sentence that produced it — the number of days since the last charge, the name of the overlapping service — rather than an unexplained badge. If a flag is wrong, the reason tells you immediately why it fired, which is usually more useful than the flag itself.
canceling
There is no code path in feels.money that can act on your accounts, and that is on purpose.
A number of subscription apps offer to cancel on your behalf. Doing that requires either write access to your accounts or a service impersonating you with the merchant, and we are not willing to build either. The connection to your bank is read-only by design: we can read balances and transactions, and there is no mechanism — not a disabled setting, an architectural absence — by which anything here could move your money or end a contract in your name.
What the app does instead is remove every excuse not to do it yourself. When you open the cancel helper for a subscription you get the annual cost stated plainly, a direct link to that merchant's billing page for around thirty commonly recognized services, and four steps that work almost everywhere:
Then you tell the app you canceled it, and it stops counting the charge, adds the amount to what you have reclaimed, and leaves the record in place so the history stays truthful. If a charge somehow appears afterwards, you will see it — which is exactly why step four matters.
This takes about two minutes per subscription. The two minutes are the entire product: the hard part was never the cancellation, it was knowing what you were paying for in the first place.
questions
Connect one account free and the recurring charges surface on the first sync — with the annual figure attached, which is usually the part that gets people moving.