Hidden Subscription Finder — Find Recurring Charges in Your Bank Statement
Find forgotten subscriptions in a bank or card statement (CSV, XLSX, OFX, QIF). Spots price hikes, double charges and trials. Private — runs in your browser.
What it does
Drop in a bank or card statement and this tool lists every recurring charge it can find: what it is, how often it bills, what it costs per month and per year, when it’s due next, and whether anything looks off — a price increase, a double charge, a free trial that turned into a paid plan, or two services that do the same job.
Your statement is read in your browser’s memory and is never uploaded or saved.
How it works
The analysis runs in four stages, entirely on your device.
1. Reading the file
It accepts CSV, TSV, XLSX, OFX/QFX and QIF exports, and you can add several files at once — say, twelve monthly statements. Overlapping files are merged so the same transaction isn’t counted twice.
Bank exports are messy, so the tool detects the layout itself: the header row, the date, description and amount columns, or separate debit and credit columns. It works out whether dates are day-first or month-first, whether charges are negative or positive (card exports often list purchases as positive numbers), and whether amounts use 1,234.56 or 1.234,56. Anything it gets wrong can be fixed in a column-mapping panel.
2. Cleaning up merchant names
Card descriptors are cluttered: SQ *JOES COFFEE #1234 AUSTIN TX, PAYPAL *NORDVPN, NETFLIX.COM 866-579-7172 CA. The tool strips payment-processor prefixes, dates, reference numbers and location codes, recognises around 150 well-known services by name, and groups near-identical descriptors with fuzzy matching so one subscription doesn’t appear as three.
3. Finding the pattern
For each merchant it measures the gaps between charges and tests them against weekly, fortnightly, monthly, quarterly, six-monthly and yearly rhythms. It allows for weekend shifts and short months, and forgives a skipped payment. It also classifies the amount as fixed, changed once and stayed (a price rise), or variable (like a phone or utility bill).
4. Scoring confidence
Each result gets a confidence score from how regular the timing is, how stable the amount is, how many charges there are, and whether the name is a known service. Groceries, coffee runs and other irregular spending don’t score high enough to appear.
How to use it
- Download statements from your bank as CSV, XLSX or OFX/QFX — ideally 12 months or more.
- Drop them into the tool, or press Try with sample data to see it work first.
- Check the date order and charge-sign settings if anything looks off.
- Review the list. Click a name to see every charge, the reasons behind the score, and the raw bank descriptor.
- Mark each item Keep, Cancel, Review or Not a subscription. The savings card totals what you’d save each year from your Cancel picks.
- Export what you need: a CSV or JSON list, a printable cancel checklist, or a renewal calendar (.ics) with a reminder three days before each charge.
What it flags
- Price increases — the old and new amount, the date it changed, and the yearly impact.
- Charged twice — near-identical charges within a few days.
- Trial-to-paid — a small first charge followed by a larger steady one.
- Overlaps — for example two video-streaming or two cloud-storage services running at once.
- Seems to have stopped — subscriptions with no recent charge, hidden by default.
- Seen once — a recognised service that appears only once, common for yearly plans on a short statement.
Adjusting how strict it is
Use Strict to see only near-certain matches, Balanced for everyday use, or Loose to surface maybes. You can include or exclude variable bills such as phone and utilities.
Privacy
- Statements are processed in memory in your browser tab. Nothing is uploaded, and the statement is not saved — refreshing the page clears it.
- Card and account numbers in bank descriptors are masked in the results and exports.
- Your Keep/Cancel choices are remembered only if you tick “Remember my choices on this device”, and you can clear them or export them to a file at any time.
FAQ
Is it safe to use a real bank statement here?
The file is read by JavaScript in your own browser and is not sent anywhere. Nothing from the statement is stored: you can confirm this by loading the page, going offline, and dropping in a file. You may still prefer to remove account numbers first — the CSV Anonymizer can mask them.
Which file formats and banks are supported?
Any bank that exports CSV, XLSX, OFX/QFX or QIF, which covers most. Because column layouts differ, the tool detects them automatically and offers a manual column map when it can’t.
Why didn’t it find my yearly subscription?
A yearly charge appears once in a 12-month statement, so there’s no repeat to spot. Add 13 or more months for pattern detection, or look for entries labelled “seen once”, which are recognised services found a single time.
Why is a subscription missing, or wrongly listed?
Try the Loose setting for missing ones, and mark false positives as “Not a subscription”. If a statement has odd formatting, check the column mapping. Charges from different merchants are never combined unless their names are near-identical.
Can it cancel subscriptions for me?
No. It finds them and gives you a checklist that includes each charge’s bank descriptor and dates so you know what to look for. Cancellation is done with each provider.
My statement is messy — can I clean it first?
Yes. If your export has stray whitespace, odd encodings or duplicate rows, tidy it with the CSV cleaner, and if you have separate monthly files, combine them with Merge CSVs. The finder also accepts a table sent straight from those tools.
What do I do with the savings figure?
Once you know what you’d free up each month, see what it could grow into with the Compound Interest Calculator.