Slipsheet · Content Back to ledger
Home / Receipt Duplication Detection: Same Purchase, One Row
Receipt Duplication Detection: Same Purchase, One Row

Receipt Duplication Detection: Same Purchase, One Row

Month-end, and the same coffee shows up three times. Once as the thermal photo you took on the way out. Once as the loyalty email PDF that arrived after lunch. Once as a short card-statement line that says almost the same name. If all three become expense rows, the month is wrong by the coffee before anyone notices.

That is receipt duplication detection: collapse the copies into one ledger row, and leave the real second coffee alone.

What is receipt duplication detection?

Duplication detection compares vendor, date, and total across the files you already have, then flags the ones that look like the same purchase stored twice. You review the flag, keep one row, and export the CSV — the second file stays as evidence, not a second total.

The three rules people actually use

You do not need a model. You need three checks, in this order:

  1. Same vendor + same total + same day. That is the boring, high-confidence match.
  2. Paper + email within three days. The thermal slip in your pocket and the message that arrived after you tapped to pay.
  3. Fuzzy merchant. STARBUCKS #1842 and SBUX 1842 are the same store. The card network shortened the name. The receipt printer did not.

If a tool shows a confidence score, ask which of those three fired. On the pair below, all three fire. That is the score. There is no separate machine-learning number behind it.

A week of coffee, four rows

Four lines from one habit. Only one pair is the same slip:

#SourceVendorDateTotalWhy it is or is not flagged
1Paper photoSTARBUCKS #1842Aug 12$14.82The original slip.
2EmailSBUX 1842Aug 12$14.82Flagged. Same vendor (fuzzy), same total, same day. Paper + email the same afternoon.
3Paper photoSTARBUCKS #1842Aug 12$6.15Keep. Same vendor and day, different total. A drip on the same visit is a second expense.
4EmailSTARBUCKS RESERVEAug 14$14.82Keep. Same-looking total, different store, two days later. A weekly habit is not a duplicate.
Example data: four invented coffee rows. Row 2 is the duplicate of row 1. Rows 3 and 4 are real expenses that look adjacent.

Row 1 is the paper. You photographed the thermal slip on the way out. STARBUCKS #1842, August 12, $14.82.

Row 2 is the email. SBUX 1842, August 12, $14.82. Same store, same total, same day, other copy of the same tap. Keep the paper or the email. Not both.

Row 3 is a $6.15 drip on that same visit. Same vendor, same day, different total. Two items, two expenses. The flag stays off.

Row 4 is another $14.82 two days later at STARBUCKS RESERVE. The total rhymes. The store does not. A weekly habit is not a duplicate.

Same purchase, three sources, one row

Paper, email, and a card line can all describe one tap. Here is that collapse as example data:

#datevendortotalsourcenote
12026-09-08Harbor Coffee$14.82paperthermal photo of the slip
22026-09-08HARBOR COFFEE #12$14.82email PDFloyalty email PDF
32026-09-08HARBOR COF$14.82card linecard statement line; not a receipt

After review (one row kept):

datevendortotalduplicate_flagnote
2026-09-08Harbor Coffee$14.82flaggedkept one row; paper + email are copies; card line is evidence, not a second expense
If all three sources were summed$44.46over-count by $29.64 vs the real $14.82
Example data: one Harbor Coffee purchase arriving three ways. The three source rows share date and total; after review they collapse to one flagged ledger row. The card line is evidence money left, not a second receipt.

The three source rows sum to $44.46 if you treat each as an expense. After review they are one row at $14.82. The over-count of $29.64 is exactly what duplication detection is for. The card line stays linked as evidence that money left; it is not a receipt row on its own.

What to do with a flag

A flag is a review, not a delete. Open the pair. If they are the same slip, drop one. If they are two real expenses, keep both. Then export the CSV. Slipsheet does not sync to your bank live, and it does not decide the tax treatment. You still decide. The walk-through of that review is how to find duplicate receipts.

Slipsheet runs those three checks on the rows it extracts: vendor, date, total, and whether the second file is paper or email. Review the flagged pairs, keep one row per real purchase, export. Nothing here is tax advice.

A few straight answers

Paper and email land the same day — is that a duplicate?

Often yes, when vendor, date, and total match (or the merchant names are fuzzy matches of each other). The thermal slip and the loyalty PDF are two copies of one tap. Keep one row. If the totals differ, they are two expenses, even on the same morning.

Is a card statement line the same as a receipt?

No. A card line proves money left. It does not carry the slip's tax line or item detail. Treat it as a clue that a receipt should exist, not as a second expense row next to the paper or the email. Link the card line as evidence; do not sum it again.

What does a duplicate flag mean?

A flag is a review queue, not a delete. Open the pair, compare vendor, date, total, and source. If they are the same purchase, keep one row and mark the other as a copy. If they are two real expenses, clear the flag and keep both.

What should I send my bookkeeper?

Send the exported CSV after you have reviewed the flagged pairs: one row per real purchase, with any duplicate flags resolved. Add a short note listing pairs you collapsed. This is not tax advice.

Ready to stop typing receipts?

Open your ledger.

14-day trial. No card. Cancel anytime. Your receipts write themselves while you do literally anything else.