Free · no signup · no row cap
Duplicate Invoice Checker — free client-side duplicate invoice checker
Drop a CSV invoice ledger, map columns, and find duplicate-payment risks. Your file never leaves your browser.
- Your ledger never leaves the browser — no signup, no row cap, no watermark
- Finds three distinct risks, not just identical rows
- Every finding carries its original spreadsheet row number
Load a ledger to begin, or review the sample mapping below.
Column mapping
Auto-guesses are shown after upload. You can correct every field before running the check.
Exported findings CSV
Exact duplicates
Near duplicates
Same invoice number across different suppliers
Parsing errors
What this checker does
What this tool will not do
- CSV only. Export your workbook to CSV first —
.xlsxfiles are rejected with a message rather than half-parsed. - Supplier matching is exact after normalisation (trimmed, collapsed spaces, case-folded). There is no fuzzy matching, so "ACME Ltd." and "ACME Limited" are treated as two different suppliers.
- The file is read into memory in one go, and the scan runs on the page. Tens of thousands of rows will keep the tab busy for a few seconds.
- It compares amounts within a currency, using that currency’s minor units. It does not convert between currencies.
- It flags candidates, not confirmed duplicate payments. Legitimate repeat invoices — a monthly retainer at the same amount — will show up as near-duplicates. Every finding needs a human to look at it.
Drop your CSV ledger and run a privacy-first scan (no signup, no upload). The checker finds exact duplicates, near-duplicates (same supplier + same amount within a date window), and same invoice number used for different suppliers — all in your browser.
Three quick steps
- Drop your CSV file (or paste it in). The tool auto-guesses headers; confirm the mapping for invoice number, supplier, amount, currency and date.
- Click "Scan" (adjust the near-duplicate date window first if 7 days isn't right for your ledger). Progress is shown for large files.
- Review grouped results (Exact duplicates / Near duplicates / Same invoice across suppliers / Parsing errors). Export findings as CSV with original row numbers.
What the summary shows
A short top-line summary lists rows scanned and counts for each finding class (Exact duplicates, Near duplicates, Same invoice across different suppliers) so you know the scope at a glance.
How it works — rules and formulas
File handling and privacy: the file never leaves your browser — no fetch/XHR/upload is performed. No signup, no limits, no watermark.
Row identity and reporting
Original file row indexes are preserved and shown. If the file has a header row, the first data row is shown as row 2 so the numbers line up with what you see in your spreadsheet.
String normalization (invoice ID, supplier name)
Trim leading/trailing whitespace, collapse consecutive internal spaces, then compare case-insensitively (toLowerCase).
Invoice-number equality (Exact duplicates)
Exact equality on normalized invoice strings by default. There is a toggle to optionally strip non-alphanumeric characters before comparing (user-controlled). Exact duplicates = same normalized invoice number appearing more than once; all rows reported with their original row numbers.
Amount parsing and equality
Strip currency symbols and grouping separators (commas, thin spaces U+2009, etc.), parse numeric value using arbitrary-precision decimal to avoid floating-point error. Compare amounts after rounding to the currency's minor unit (number of decimal places) per CLDR / ISO 4217.
Date parsing and window rule
Parse dates with ISO-aware parser; accept common formats (ISO YYYY-MM-DD, MM/DD/YYYY, DD/MM/YYYY) but surface ambiguous inputs for locale selection. Compute calendar-day difference using UTC-day boundaries (convert dates to UTC 00:00 and subtract). Near-duplicate date rule = abs(dayDiff) <= windowDays (default windowDays = 7, inclusive).
Near-duplicates definition (classic double-payment detection)
Two rows A and B are near-duplicates if:
- Supplier match: supplier names must be equal after normalization (trim, collapse internal spaces, case-fold). Matching is exact on the normalized string — there is no fuzzy/approximate supplier matching, so "ACME Ltd." and "ACME Limited" are treated as different suppliers.
- Amount match: amounts equal after rounding to the currency's minor unit.
- Date proximity: calendar-day difference <= windowDays (default 7).
- Invoice numbers differ after normalization (if they’re the same, they belong to Exact duplicates).
Same invoice number across different suppliers
Report cases where the same normalized invoice number appears with two or more different normalized supplier values (these are likely data-entry mix-ups and need a different fix than exact duplicates).
Malformed rows
Rows with missing mapped columns, unparseable amounts, or invalid/ambiguous dates are listed in a "Parsing errors" section with the row number and error reason; the scanner does not crash on malformed input.
Performance and scale
The file is read into memory in one go and scanned on the page itself, with a progress bar updated as the scan runs — a file with tens of thousands of rows can keep the page busy for a few seconds. Near-duplicate detection groups rows by supplier, currency and amount, sorts each group by date and slides a window over it, so it stays fast per group.
Using it as a duplicate audit tool
In accounts-payable controls, the tool used for capturing duplicate invoices before payment is a duplicate invoice checker — also called a duplicate invoice detector. Auditors and AP teams run the classic duplicate-payment test with it: pull the vendor invoice ledger from the ERP, export it to CSV, and scan. The three finding classes map to three distinct audit questions — exact duplicates catch the same vendor invoice keyed twice, near duplicates catch an invoice paid twice under different numbers, and a shared invoice number across vendors catches data-entry mix-ups. Findings export to CSV with original row numbers, so every candidate traces back to the source ledger in the audit workpapers. There is no desktop software to install — the whole check runs in the page.
Accounts payable or accounts receivable
The column mapping is manual, so the checker is not limited to vendor invoices. To detect duplicate customer invoices (accounts receivable), map your customer-name column into the supplier slot: the same rules then flag the same invoice number issued to different customers, and the same customer billed the same amount twice within the date window.
How to detect duplicate invoices in a ledger
Duplicate invoice detection comes down to three questions, whatever tool you use: has the same invoice number been entered twice, has the same supplier been paid the same amount twice within a short window under different invoice numbers, and does one invoice number appear under two different suppliers? This checker runs all three tests in one scan:
- Export the invoice ledger from your accounting system as CSV — most systems have an export on the invoice or payment register.
- Drop the CSV here and confirm the column mapping (invoice number, supplier, amount, currency, date).
- Set the near-duplicate date window to match your payment cycle — 7 days is the default; a monthly billing cycle may warrant 30.
- Run the check and review each finding class separately: exact duplicates first (strongest signal), then near duplicates (needs judgement — a monthly retainer looks like one), then shared invoice numbers across suppliers (usually data entry, occasionally fraud).
- Export the findings as CSV — every row carries its original spreadsheet row number, so each candidate traces back to the source ledger.
Duplicate payment detection without installing software
The near-duplicate rule — same supplier, same amount, dates within the window, different invoice numbers — is the classic duplicate payment detection test: it catches the invoice that was paid twice because it was re-keyed, re-sent, or entered by two people. Dedicated duplicate payment detection software runs this same test inside the ERP; this page runs it in your browser on an exported CSV, with no installation, no signup, and no upload — the trade-off being that it flags candidates for a human to confirm rather than blocking payments automatically.
Security & privacy note
Files are processed entirely in your browser — we never upload ledger contents to any server. That’s why no signup or account is required.
FAQs
Is my file uploaded or sent to a server?
No. Processing is performed entirely in your browser; no fetch/XHR/upload is performed and your file never leaves your machine.
What columns does the tool need?
It needs an invoice number (ID), a supplier/vendor name, an amount, a currency (recommended), and an invoice date. Column names vary across systems — the tool auto-guesses common headers but always shows the mapping so you can correct it.
How does near-duplicate detection work?
Near-duplicates are rows with the same supplier (normalized), the same amount after rounding to the currency’s minor unit, and invoice dates within the configurable window (default 7 days). Invoice numbers must be different for rows to be classified as near-duplicates.
What date formats are supported and what if my dates are ambiguous?
The scanner accepts ISO (YYYY-MM-DD) and common localized formats (MM/DD/YYYY, DD/MM/YYYY). If a date is ambiguous (e.g., 03/04/2023), the UI surfaces the ambiguity and asks you to pick the correct locale or marks the row as malformed rather than guessing.
Can I change the date window or enable fuzzy matching for suppliers?
Yes — the near-duplicate date window is adjustable (default 7 days). Supplier names are matched after trimming and case-folding, so "ACME Ltd" and "acme ltd" group together; there is no fuzzy/approximate supplier matching.
How do you handle currencies with no decimal places (e.g., JPY)?
Amounts are rounded to the currency’s minor units (per CLDR / ISO 4217). For example, JPY has 0 fractional digits so comparisons are integer-based after rounding.
Is this a duplicate invoice detector or a duplicate audit tool?
Both names describe the same job. It detects candidate duplicates in an invoice ledger — exact duplicates, near duplicates, and invoice numbers shared across suppliers — and exports the findings with original row numbers for audit follow-up. It flags candidates; a human confirms which ones are real duplicate payments.
Can I check customer invoices (accounts receivable) instead of vendor invoices?
Yes. Map the customer-name column into the supplier slot and run the same scan: it flags duplicate invoice numbers issued to different customers, and the same customer billed the same amount twice within the date window.
How do I detect a duplicate payment before it goes out?
Run the ledger through the near-duplicate test before the payment run: same supplier, same amount, invoice dates within your payment cycle, different invoice numbers. That combination is how a double payment usually looks in the data — the same bill entered twice under two numbers. Findings are candidates, not verdicts: confirm each one against the source documents before withholding a payment.