What this article is about
Double data is worse than missing data: a receipt booked twice quietly inflates your expenses, and a bank statement imported twice doubles every transaction on it. TaxItEasy blocks duplicates at several layers, and each layer tells you what happened instead of failing with a generic error. This article walks through the layers — and what to do if duplicates got in before the guards existed.
The duplicate notice at upload
Every uploaded file is fingerprinted (hashed) on arrival. If an identical file already exists in your company, the upload is rejected before any scanning happens — no second scan, no second document, no double booking. Instead of a generic error you get a specific duplicate notice that links to the original:
- Web: the upload summary toast reports it explicitly — "N uploaded, M duplicate, K failed" — and the duplicate entry points to the existing document.
- Mobile: a dedicated duplicate screen appears with a link that opens the original document.
Technically this is an HTTP 409 response, which is why some error logs or integrations may show "409" — in the apps you'll always see the friendly notice.
What counts as a duplicate
The upload gate compares file content, byte for byte. Two conditions follow from that:
- The same file uploaded twice — same PDF forwarded by two people, the same photo picked twice — is a duplicate, regardless of filename.
- Two different files of the same invoice — a photo and a PDF, or two separate photos of the same receipt — are not byte-identical and pass the gate.
For the second case there's a softer, smarter check: an incoming invoice with the same supplier and the same invoice number as an existing one is flagged as a potential duplicate, with a link to the earlier invoice. It's a flag, not a block — you decide which one to keep. The comparison is case-insensitive and deliberately keyed on supplier + invoice number, not on scanned amounts or IBANs, which can be misread.
One deliberate exception: re-uploading a file whose original you moved to trash is allowed — the trash isn't held against you.
Bank statements imported twice
Statements get statement-level protection on top: if the same statement file comes in twice — say you uploaded it manually and it also arrived via email forwarding — the second import is detected by file hash and skipped as a whole, with an audit entry recording the skip. The transactions on it are not imported again, so your books don't double.
If duplicate transactions already exist
The statement guard prevents new double imports, but if a statement was double-imported in the past (before the guard, or through an edge case), you may see transaction "twins" in an account. Don't delete them one by one — write to [email protected] with the account and the affected period. We have safe tooling to identify and remove duplicated transactions from historic double imports without touching legitimate data.
Email forwarding is deduplicated too
The email intake has its own two guards:
- Same attachment, skipped silently. An attachment whose bytes already exist in your company is skipped — same rule as the upload gate, without bouncing the email.
- Same email, processed once. Every inbound email is processed exactly once; a re-delivered or replayed message is not reprocessed. The Activity log on the Email integration page shows which emails were processed and which were skipped.
Troubleshooting
I got a duplicate notice but can't find the original. Follow the link in the notice — it opens the existing document directly. If the original was uploaded by a teammate, it may be filed in a folder you don't usually browse; use search.
I legitimately need the same file twice. You almost never do — one document can be linked, matched, and exported wherever it's needed. If the original is wrong, fix or trash it rather than uploading a sibling.
A vendor reused an invoice number. The potential-duplicate flag will fire; open both invoices, confirm they're genuinely different, and keep both. The flag is informational and doesn't block anything.
Related
- Remove a bank account or block an IBAN — when a statement created something that shouldn't exist
- Search inside your documents — finding the original of a duplicate
- Set up email forwarding — the email intake path and its Activity log
- Understanding your document counter — how uploads count against your plan
- Upload failed — troubleshooting — non-duplicate upload errors