How do I identify duplicate charges in a statement?
By the Karchu Editorial Team · Last updated
Short answer
To identify duplicate charges, build a fingerprint for each transaction from the date, amount, normalised merchant text and account, then look for fingerprints that repeat within a short window, typically three to five days. Repeats of the same amount to the same merchant on the same day are the strongest candidates. Separately, check for statement periods that overlap, because importing two statements covering the same days duplicates every transaction between them. A repeat is a candidate, not proof, since some merchants legitimately bill the same amount twice.
How it works
Duplicate detection is a matching problem with two distinct causes behind it. Either a merchant charged twice, or the same real transaction entered your records twice. The detection technique is similar and the remedy is completely different.
The technique starts with merchant normalisation, because raw descriptors rarely repeat exactly even for the same shop. Strip the reference numbers, store codes and dates, lowercase what is left, and you get a key that groups reliably.
Then build a fingerprint per transaction from account, merchant key, signed amount and date, and compare fingerprints that agree on everything except a small date difference. An exact date match is too strict because card transactions post a day or two after the purchase.
The second check is structural rather than row by row: compare the date ranges of the statements themselves. If two periods overlap, every transaction inside the overlap is at risk of being imported twice regardless of how it looks individually.
Examples
Two charges of 59.99 to the same subscription, three days apart, in a month where that subscription is billed once. A retry that was not reversed, and a refund is due.
A January statement running to the thirty first and a February statement starting on the twenty fifth of January. Seven days appear in both files. Nothing is wrong with the bank, and importing both without deduplication inflates January by a week of spending.
Five identical charges of 3.40 to the same coffee shop over five weekday mornings. Detected as candidates, dismissed in seconds by a human, and exactly why automatic deletion is the wrong default.
Benefits
Refunds you would otherwise have absorbed. Totals that are actually correct, since a duplicated week quietly distorts every category, every trend and every report built on top of them.
For anyone doing books, it also removes the most common reason a reconciliation refuses to balance.
Common mistakes
Matching on the exact date only, which misses everything that posted a day late.
Matching on amount alone, which flags every commute and every fixed price purchase.
Comparing raw descriptions, so the same merchant under two descriptor strings never matches.
Deleting matches automatically. Duplicate detection should always be reviewable, and the skipped rows should be inspectable.
Fixing an import duplicate by disputing it with the merchant, which wastes everyone's time because no second charge ever happened.
Frequently asked questions
What is the difference between a duplicate charge and a duplicate import?
A duplicate charge means the merchant took your money twice, and it needs a refund. A duplicate import means the same real transaction was loaded into your records twice, usually because two statements overlap, and it needs deduplication rather than a dispute. They look identical in a spreadsheet, which is why both checks are worth running.
Why do overlapping statements happen?
Statement periods are set by the issuer's closing date, not by the calendar, and a period is often described inclusively at both ends. A January statement covering the first to the thirty first and a February one starting on the twenty fifth of January share a week, and importing both without care doubles that week.
How wide should the date window be?
Three to five days covers most posting delays without generating too much noise. A wider window catches more genuine duplicates and many more false ones, particularly for merchants you use often at a consistent price.
Can identical amounts be legitimate?
Frequently. A daily commute, a fixed price lunch, a repeat order and a split payment all produce identical amounts to the same merchant close together. This is why duplicate detection should surface candidates for review rather than delete rows automatically.
What if the amounts differ by a small amount?
Near duplicates with a small difference are usually a retry after a failed authorisation, or the same purchase with and without a tip. Worth reviewing, and worth treating separately from exact repeats.
How Karchu helps
Karchu fingerprints every transaction on date, amount, normalised merchant, description and account, and checks new uploads against what you already have. When two statements overlap in period, the transactions inside the overlap are skipped rather than duplicated, and you are told how many were skipped so you can inspect them.
Likely double charges are surfaced as candidates with the matching rows side by side, and nothing is deleted on your behalf. Duplicate alerts can be switched on if you want to hear about them as they appear.
No bank credentials. Statement files only.
Related reading
Guides
- Documentation
What Karchu does with financial documents, format by format, stage by stage.
- Docs: receipt analysis
Receipt fields extracted and how receipts match transactions.
- Docs: reconciliation
The balance check, the tolerance, and what a mismatch reports.
Features
- Receipt scanner
Photograph a receipt and get merchant, date, tax, tip and total as data.
- Bank statement analyzer
Upload a statement and get categorized transactions in minutes.
- Financial statement analysis
Income, spending and category totals across every account.
Comparisons
- Karchu vs QuickBooks
Analyzer against a full accounting suite.
- Karchu vs Xero
Where a statement analyzer fits alongside Xero.
- Karchu vs DocuClipper
Two statement converters, different priorities.
Use cases
- Karchu for freelancers
Separate business from personal without a spreadsheet.
- Karchu for accountants
Client statements in, categorized ledgers out.
- Karchu for bookkeepers
Month-end close without manual data entry.