SaaSClerk · free tool · runs in your browser

Statement subscription audit — no bank login

Your statement already lists every charge. What it does not list is which ones repeat. A subscription and a one-off purchase look identical on a card statement: a date, a merchant string and an amount. The rhythm only exists across months. This page reads an export of those months, groups the charges by merchant, and tells you what repeats, how often, and when the next one is likely to arrive.

It is built for the case where you cannot use an inbox scanner. Some charges never produce a receipt — a card app subscription billed through a payment processor, an app charge collected by a platform, a service bought with a virtual card. If the receipt does not exist, the statement is the only record that the money left.

Nothing is sent anywhere. The parser and the arithmetic run in this tab; you can go offline after the page loads and the tool still works.

Redact first. Delete card numbers, account numbers and your name from the file before pasting. The audit needs three columns only: date, merchant description, amount.

Header names are matched loosely: date/transaction date, description/merchant/payee, amount, or separate debit and credit columns. Rows that cannot be read are listed, never guessed.

Everything above runs in this browser tab. The page makes no request with your statement and stores nothing. Closing the tab discards it. If you want the pattern kept current automatically, that is what the mailbox scanner on the plans page does.

How a charge earns the label “recurring”

The tool does not guess from merchant names alone. It looks at the gaps between charges with the same normalised description:

Merchant strings are normalised before grouping: processor prefixes such as SP *, PAYPAL *, SQ * and POS DEBIT are stripped, punctuation and case are flattened, and trailing store numbers are removed. That is why SP * LOOP SUBSCRIPTIONS and LOOP SUBSCRIPTIONS count as the same merchant. Aggregated billers such as APPLE.COM/BILL are flagged, because one line can hide several products.

Confidence is a statement about the data, not the vendor: high means the gap between charges was stable and there were enough of them; medium means the pattern is plausible but short or uneven; low means it was not classified as recurring at all.

What this audit cannot tell you

It cannot tell whether you still use the product. A charge that repeats is not automatically waste — your team may depend on it. The tool produces the list; the judgement about which line to stop is yours, and the cancel list exists to make that judgement cheap.

It also cannot see charges that never touch the account you exported: a company card you did not include, an invoice paid by bank transfer, or a subscription billed to a colleague’s personal card and expensed later. Add those statements if you have them.

Finally, the next expected date is last charge plus the median gap. Vendors move dates, retry failed payments and change prices. Treat the date as a reminder to check, not as a schedule you can rely on.

Statement audit versus mailbox scan

A mailbox scan finds subscriptions from receipts, which gives you the vendor’s own name, the plan and the renewal date. A statement audit finds charges that produced no receipt and catches the ones where the vendor says you cancelled but the charge continued. They cover different blind spots, and this one needs no credentials at all.

If you have already exported a statement because a charge looked wrong, start with app charges that continue after uninstalling. If the problem is that the subscription has no receipt in any inbox, start with subscriptions with no receipt.

FAQ

Does this connect to my bank?

No. You export a statement from your bank and paste or open the file here. The file is read in the browser tab and is never uploaded. There is no bank API, no OAuth flow and no stored copy.

How many months do I need?

At least three for monthly charges, twelve or more for annual ones, and about two months for weekly ones. One month shows single charges and cannot prove a rhythm — if that is all you have, export more months rather than trusting a guess.

Why is a known subscription missing?

Either its description changes on every charge, so the rows land in separate groups, or there are too few payments in the file to prove a rhythm. Check the skipped rows and the one-off count; nothing is silently dropped.

Does it cancel anything?

No. It produces a list with the merchant names as they appear, the cadence and the estimated next date. Cancelling happens at the vendor, and this page never contacts a vendor on your behalf.

What is the monthly equivalent for an annual charge?

The annual amount divided by twelve, so charges with different rhythms compare on one line. The money itself leaves once a year, not monthly.

Next step

The list sizes the problem. Keeping it current is the next job: SaaSClerk reads your billing mailbox and maintains the inventory so a new charge appears without you exporting another statement. Start a free audit and the plans page states what is free.

If a row was parsed wrongly, the parser rules above are the whole model — send the line through the contact form and quote it. Related reading: the subscription audit checklist and what forgotten subscriptions cost per month.

Built by SaaSClerk. Other free tools: unused seat calculator and shadow IT risk calculator.