# Recurring Transaction Detection on Client Statements

- Author: AutoBankConvert (https://www.autobankconvert.com)
- Published: 2025-08-15
- Updated: 2025-08-15
- Category: Statement automation
- Canonical: https://www.autobankconvert.com/blog/recurring-transaction-detection

> How recurring transaction detection finds rent, subscriptions and loan payments on client statements, and how to use it to spot a missed or doubled charge.
Recurring transaction detection groups statement lines by vendor, amount and timing to find charges that repeat, such as rent on the first, a software plan on the twelfth or a loan payment every month. Once a client's recurring list exists, each new statement is compared against it, so a missed rent payment or a subscription billed twice stands out.

## What counts as a recurring transaction on a statement?

A recurring transaction is a charge or deposit from the same counterparty that repeats on a steady schedule at a similar amount. Three signals define it: one vendor, a regular interval and an amount that stays within a narrow range. A line needs all three. A supplier paid irregularly at varying amounts is a frequent vendor, not a recurring one.

Typical recurring lines on a small business statement:

- **Fixed amount, fixed day:** rent, a loan instalment, an equipment lease.
- **Fixed amount, loose day:** software subscriptions that bill on the signup anniversary, which can shift when a month is short or a card is updated.
- **Variable amount, fixed rhythm:** utilities, phone bills and merchant processing fees, which arrive monthly but change in size.
- **Recurring deposits:** a retainer from a regular customer, a monthly payout from a payment processor.

Detection usually needs at least three occurrences before a pattern is trusted. Two lines a month apart could be coincidence. Three at the same interval are a pattern worth recording.

## Building a recurring transaction list for one client

A recurring transaction list records, for one client, each charge you expect to see each period, with its vendor, the expected day, an amount range and the account it posts to. Build it from the last three to six months of statements, then keep it next to the client's categorization rules, because most recurring lines already have a rule.

The list below is an example for a fictional design studio. All values are illustrative.

| Vendor | Expected day | Amount range | Account |
| --- | --- | --- | --- |
| Landlord Properties | 1st | 2,750.00 exactly | Rent |
| Eastbank loan 2290 | 15th | 612.48 exactly | Loan principal and interest (split) |
| Figframe design software | 9th to 11th | 45.00 to 49.00 | Software subscriptions |
| City Power | 20th to 25th | 180.00 to 320.00 | Utilities |
| Northwind Media retainer | 3rd to 6th | 4,000.00 exactly | Revenue |

Keep the ranges honest. A utility bill that swings with the seasons needs a wide range. A loan instalment should match to the cent.

Some practices build this check themselves in a spreadsheet or a no-code tool that compares each month's export against the list. The guide to [no-code automation for bookkeepers](/blog/no-code-automation-for-bookkeepers) shows where that kind of workflow fits. Practices that consider writing their own parser for this often find the reading of statements is the hard part, as the comparison of [Python OCR scripts against buying a converter](/blog/bank-statement-ocr-python-build-or-buy) explains.

## How does recurring transaction detection catch missed or doubled charges?

Recurring transaction detection catches problems by comparing what arrived against what was expected. A charge with no match on the list is either new or a one-off. An expected charge that did not appear is a gap. A charge that appears twice in one period is a possible double billing. Each result is a question, not a correction.

Here is an example month for the design studio above:

| Vendor | Expected | Found on statement | Result |
| --- | --- | --- | --- |
| Landlord Properties | 1 line, 2,750.00 | 1 line, 2,750.00 on the 1st | Matched |
| Eastbank loan 2290 | 1 line, 612.48 | none | Missing |
| Figframe design software | 1 line, 45 to 49 | 2 lines, 47.00 on the 10th and 47.00 on the 12th | Doubled |
| City Power | 1 line, 180 to 320 | 1 line, 266.15 on the 22nd | Matched |
| Northwind Media retainer | 1 line, 4,000.00 | 1 line, 4,000.00 on the 5th | Matched |

The missing loan payment has a few likely causes: the payment came from a different account, it was late and will appear next month, or the statement for this account is incomplete. Check the client's other statements first. The doubled software charge often means the client opened a second seat or a second account by mistake, which is worth raising with them, since it may be a real cost they want refunded.

A list like this only works when every statement arrives on time. Gaps caused by a late file look identical to gaps caused by a missed payment. Setting up [automated bank statement downloads for each client](/blog/automate-bank-statement-downloads) removes most of the late-file noise.

## Recurring transactions that drift in amount or date

Recurring transactions drift when a vendor changes price, shifts the billing day or moves to a new payment processor. Detection then raises a false alarm: the old pattern looks missing and the new one looks like a stranger. The fix is to update the list, not to widen every range until nothing can fail.

Common causes of drift:

- **Price changes.** A subscription moves from 45.00 to 52.00. Update the range and note the date.
- **Billing day shifts.** A charge on the 31st moves to the 30th or the 1st in short months. A two or three day window absorbs this.
- **New description text.** The vendor switches processors and its line now reads differently. Map the new text to the same vendor.
- **Annual plans.** A client switches from monthly to yearly billing. Remove the monthly entry and add a yearly one, or the list will report eleven missing charges.

Recurring lists, rules and coding history are part of the client file. If you keep them while working inside a firm and later leave, what you may take or reuse depends on your agreement, which the post on [non-compete terms for bookkeepers leaving a firm](/blog/non-compete-for-bookkeepers) discusses.

AutoBankConvert lets you set a monthly schedule per client so new statements convert as soon as they arrive, with each client's rules and history kept in its own workspace. That steady arrival is what makes a recurring check meaningful. See how a batch run works on the [AutoBankConvert homepage](/).
