How to find recurring charges and duplicate subscriptions in a bank or accounting CSV export
A transaction export and an ordinary spreadsheet are enough to list every subscription your business pays for, find the ones paid twice, and see which ones went up. This takes about an hour the first time.
Step 1: Export at least 13 months
Thirteen months catches yearly renewals, which are the easiest to miss. Export from every place money leaves the business:
- Business checking accounts. Online banking usually offers a download of account activity; look for "Download", "Export" or the statements area, and choose CSV (or a spreadsheet format) for the date range. Some banks limit how far back a single download goes, so you may need two or three downloads.
- Business credit cards. Many subscriptions are on cards, not the bank account. Export each card separately.
- Accounting software. A transaction list or general ledger report for expense accounts, exported to CSV or Excel, gives the same data with your categories already applied.
- Payment apps and marketplaces you pay vendors through, if any.
Menu names change and differ between banks and software, so if you cannot find the export, the provider's help pages or support line will have the current steps.
Privacy: a transaction export shows who you pay and who pays you. Keep it on your own computer or your company's storage. Do not upload it to sites you do not trust, and delete working copies when you are done.
Step 2: Put everything in one sheet with the same columns
Exports differ, but almost all have a date, a description (the merchant text) and an amount. Make one sheet with these columns and paste every export into it:
| Column | What goes in it |
|---|---|
| Date | The transaction or posting date. Make sure the spreadsheet reads it as a date, not text. |
| Source | Which account or card it came from. |
| Description | The merchant text exactly as exported. |
| Amount | Money out as a positive number. If your export has separate Debit and Credit columns, use the Debit column. If it has one signed column where money out is negative, flip the sign. |
| Merchant | A cleaned-up name (Step 3). |
| Month | The year and month, e.g. =TEXT(A2,"yyyy-mm") in Excel or Google Sheets. |
Delete transfers between your own accounts and card payments from the bank account, or you will count the same spending twice.
Step 3: Clean the merchant names
The same vendor often appears with changing reference numbers, like ACME SOFTWARE *INV 20931 one month and ACME SOFTWARE *INV 21877 the next. Grouping needs one name per vendor.
- Google Sheets:
=TRIM(REGEXREPLACE(UPPER(C2),"[0-9#*.]+"," "))removes digits and common symbols. Copy it down, then fix the few names it leaves messy. - Any spreadsheet: sort by Description, then type a short Merchant name for each group by hand. For 13 months of a small business this is usually a few hundred rows, and many repeat.
Step 4: Pivot by merchant and month
Insert a pivot table: Merchant in rows, Month in columns, sum of Amount in values. Then add a second pivot (or extra value fields) with, per merchant: count of transactions, minimum amount and maximum amount. Read it like this:
- Recurring: a merchant that appears in three or more separate months with similar amounts, or in the same month a year apart.
- Rising: maximum noticeably above minimum for the same merchant. Divide (max − min) by min to see the change, then check the invoices (see the price increase page).
- Duplicate: two charges from the same merchant for the same amount in the same month; the same tool paid on two different cards; or two products that do the same job (two video-call tools, two file-sharing services, two password managers).
- Forgotten: a merchant nobody on the team recognizes. Search your email for the name to find the account and its owner.
Step 5: Turn the list into decisions
Copy every recurring merchant to a short register: vendor, what it is for, owner, monthly or yearly cost, payment method, renewal date, and a decision (keep, cut, downgrade, renegotiate, merge). Then:
- For each "keep", find the contract or terms and note the cancel-by date (see auto-renewal notice windows).
- For each "cut", cancel through the vendor's own process and keep the confirmation. Watch the next statement to make sure the charges stopped.
- For each duplicate, pick one, move the users, and cancel the other at its next cancel-by date.
- Repeat the review every quarter. The second time takes a fraction of the first, because the merchant names are already cleaned.
The same export answers a second year-end question: which contractors and landlords need a Form 1099. For 2026 payments the federal line is $2,000 per payee (see the new $2,000 rule). The free Year-End Vendor Check does Steps 2 to 4 above and the 1099 totals from one file, in your browser.
An example of what you are looking for
This is a made-up extract, not real data:
Date,Description,Amount 2026-01-03,ACME SOFTWARE *INV 20931,120.00 2026-01-17,CLOUDBOX STORAGE,15.00 2026-01-17,CLOUDBOX STORAGE,15.00 2026-02-03,ACME SOFTWARE *INV 21877,120.00 2026-03-03,ACME SOFTWARE *INV 22710,132.00
Acme is recurring and rose from $120 to $132 (10%) in March. CloudBox was charged twice on the same day: either two accounts or a billing error, worth a support ticket.
Stopping a charge you did not agree to
First ask the vendor to cancel and refund, in writing. For a card, your card issuer has its own dispute process and deadlines; check your cardholder agreement. For bank debits:
One federal rule is worth knowing if you pay any business costs from a personal account. Regulation E covers "consumer" accounts, which it defines as accounts established primarily for personal, family or household purposes (12 CFR 1005.2(b)); a business checking account generally falls outside it. For a covered account, you can stop a preauthorized electronic transfer by telling your bank, orally or in writing, at least three business days before the scheduled date, and the bank may ask for written confirmation within 14 days (12 CFR 1005.10(c)). If a preauthorized transfer will change in amount, the payee or the bank must send written notice of the amount and date at least 10 days before the transfer, though you can agree to get notice only when it falls outside a set range (12 CFR 1005.10(d)). Stopping a payment does not end the contract; you may still owe the money.