Back to learn

How recurring charges are detected

The signals that turn a list of transactions into a list of subscriptions.

Recurring spend is the easiest money to lose track of. Each charge is small, none of them requires a decision, and no statement ever adds them up for you. Detecting them automatically sounds trivial and is not, mostly because bank descriptions are hostile to grouping.

Step one, normalize the merchant

The same subscription rarely appears twice with the same text. A card payment might read as the brand name, then the parent company, then a payment processor with a store code and a city appended. Before anything can be grouped, that text has to be reduced to a stable key: lowercase it, strip reference numbers and dates, drop processor prefixes, collapse the remaining words.

Get this wrong and one subscription looks like twelve merchants, so nothing repeats and nothing is detected. Get it too aggressive and unrelated merchants collapse together, so a pattern appears where there is none.

Step two, look at the spacing

Within a merchant group, sort the payments by date and look at the gaps. A monthly subscription produces gaps clustered around thirty days, with drift because banks post on working days. Weekly, fortnightly, quarterly and annual patterns each have their own signature.

Consistency matters more than the exact number. Three payments spaced twenty nine, thirty one and thirty days apart are a monthly charge. Three payments spaced eleven, forty and ninety days apart are not a pattern, they are shopping.

Step three, check the amounts

A subscription charges roughly the same amount each time. Usage based bills vary but stay within a band. A merchant you happen to visit at regular intervals varies wildly, which is what separates your gym membership from your supermarket.

Amount tolerance has to be a band rather than an exact match, because tax, currency conversion and usage components all move the figure slightly.

How a price increase shows up

Because each detected charge keeps its payment history, a rise is visible as a step rather than as noise. Nine payments at one price, then three at a higher one, with the change date in between. That is worth surfacing, because the usual way people discover a subscription increase is by reading a bank statement carefully a year later.

What detection cannot tell you

It cannot tell you whether a charge is still wanted, whether a free trial converted, or whether an annual renewal is coming from a provider you have not paid before. It can tell you what you have been paying, how often, and what that adds up to over a year. In practice that is enough to trigger the decision.

A last caveat. Detection needs history. One payment is not a pattern, and two is a weak one. Three or more payments in a consistent rhythm is the point where confidence becomes reasonable.