Never Double-Count Again: Smart Duplicate Detection for Imported Expenses
Here’s a scenario that happens all the time: you’re traveling for work, you scan a restaurant receipt right after the meal so you don’t lose it, and the expense is in the system immediately. Two weeks later, you download your credit card statement and import it. That same restaurant charge is now in the CSV.
Without duplicate detection, you’d have two entries for the same expense. Your totals would be wrong. Your reports would overcount. And you might not notice until tax time.
AllExpensesPaid now catches this automatically.
How It Works
After every CSV import, the system scans your newly imported transactions against your existing manual entries. It looks for matches using three signals:
Amount (strongest signal): If the amounts are identical or within 2%, that’s a strong match. If amounts differ by more than 2%, the system moves on – it’s not the same transaction.
Date proximity: Credit cards often post 1-5 days after the actual transaction. The system allows up to a 7-day window. Same day scores highest, 1-3 days is still strong, 4-7 days is possible but lower confidence.
Vendor name similarity: Your receipt might say “Olive Garden” but your credit card shows “OLIVE GARDEN #4521 TORONTO ON.” The system normalizes both – strips location codes, branch numbers, and payment processor prefixes (SQ , PAYPAL , AMZ*) – then uses fuzzy matching to compare.
A combined score of 55% or higher flags the pair for review.
The Review Page
After an import with potential matches, an amber banner appears on your Expenses page:
2 potential duplicates found between your import and manual entries. [Review]
Click “Review” and you see a side-by-side comparison for each match. On the left: the imported transaction with its bank account and posting date. On the right: your manual entry with its category, tax, tip, notes, and receipt.
For each pair, you have two choices:
Merge – Your manual entry survives. It keeps everything: the category you assigned, the tax and tip from the receipt scan, the notes, the receipt attachment, and any expense claim it’s on. The bank account name from the import is applied to it, and the imported duplicate is hidden. One clean record with the best of both.
Keep Both – Acknowledges the match but keeps both transactions visible. Use this when they’re actually two separate charges that happen to look similar.
Don’t want to decide right now? Just click Back. Pending matches stay in the queue for later.
Why the Manual Entry Wins
This was a deliberate design choice. Your manual entry is the richer record – it has the receipt image, the category, the tax breakdown, the tip amount. It might be on an expense claim that’s already been submitted for approval. Moving all of that to a different transaction would break the paper trail.
The imported transaction only adds one thing the manual entry doesn’t have: the bank account name (e.g., “Visa ****1234”). That gets copied over during the merge. The bank posting date is appended to the notes if it differs from the receipt date.
This means merging is safe at any point in the expense claim lifecycle – pending, under review, approved, even paid. The claim record never moves.
Re-Import Safety
Worried about re-importing the same CSV? The hidden imported transaction keeps its original hash in the database. If you import the same file again, the duplicate detection catches it at the CSV level – before it even gets to the manual entry matching. No new matches are created.
Split Transactions Are Skipped
If you’ve already split a manual entry into multiple categories, the system skips it during matching. Split transactions have a different structure (parent + children) where the import amount matches the original total but not the individual splits. These are excluded to avoid false matches.
The End of Double-Counting
Expense tracking tools have always forced a choice: enter expenses immediately (and risk duplicates when the statement arrives) or wait for the statement (and risk losing receipts). Now you can do both. Scan receipts in real time, import statements later, and let the system reconcile them.
AllExpensesPaid is an AI-powered expense management tool for small businesses, consultants, and professionals. Try it free at allexpensespaid.app.