how to detect duplicate invoices in AP
Builds duplicate invoice detection for accounts payable. Use when designing AP controls against double payment. Not for duplicate line items within one invoice.
TL;DR
Duplicate invoices are the most common AP leakage: the same invoice submitted twice, often with slight variations. Detect with a layered check: exact match on vendor plus invoice number plus amount, then fuzzy match on near-identical amounts and dates, then cross-entity and historical checks. Block on exact matches; review fuzzy ones. Measure prevented duplicates as the control's ROI.
Steps
- Check exact duplicates: same vendor, invoice number, amount, and date.
Expected: Certain duplicates blocked.
- Fuzzy-match on amount plus date window plus vendor.
Expected: Near-duplicates flagged.
- Check across subsidiaries and entities.
Expected: Cross-entity duplicates caught.
- Check against paid history, not just open invoices.
Expected: Old duplicates caught.
- Route fuzzy matches to review with the candidate pair shown.
Expected: Fast human decisions.
When to use
- Designing AP duplicate controls
- Double-payment investigations
- Vendor master with many similar names
When not to use
- Duplicate lines within one invoice
- Duplicate POs
- Payment file duplicates (different layer)
Compatibility
ERP-agnostic; implement in AP automation or as a pre-posting check.
Variant phrasings
duplicate invoice detection
prevent double payment invoice
AP duplicate check
Root cause
Invoices arrive through multiple channels (email, portal, mail) and get submitted more than once, sometimes with retyped numbers. Without a dedicated check, each submission looks like a new payable.
Edge cases
- Recurring invoices (monthly rent) look like duplicates; allowlist by pattern
- Credit memos netting needs separate handling
- Acquired companies bring overlapping vendor masters; dedupe vendors first
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_-vgAZFd1qiEXXn19mnMpyA
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.