Find duplicate transactions
Open one file of transactions: the CSV or Excel export from a bank or card account, or rows from a ledger. Every row is put in exactly one of three lists: exact repeats (same date, same amount, same description), near repeats (same amount and description within the number of days you type), or no repeat found. The page shows the groups, labels every row, and counts the rows and dollars in the second and later rows of each group. Nothing is removed from the file.
The file is read in your browser and stays on this device. Nothing is uploaded. This tool reads rows (CSV, Excel, or pasted text); it does not read PDF files or scans.
Or paste rows copied from a statement or spreadsheet, with a header row first (for example Date, Description, Amount):
The rows are read in this browser and are not uploaded. This tool reads rows; it does not read PDF files or scans.
These are matched from the header words. Check them and change any that are wrong. Use either one amount column, or the money out and money in columns. Rows are compared on date, amount, and description. A running balance column is read when one is chosen, but it is not compared.
Exact repeats: two or more rows with the same date, the same amount with the same sign, and the same description once capital letters and spacing are ignored.
Near repeats, only when a number of days above zero is typed: rows with the same amount, the same sign, and the same description are put in date order, and a row is joined to the row before it when the two dates are that many days apart or fewer. Two or more rows joined this way, on more than one date, are one near group. Joined rows that all have one date are an exact group. Each row is in one list only, so same-date rows that are also joined to a row on another date are listed in that near group. Days are counted on the calendar: March 5 and March 9 are 4 days apart.
A row with a blank description is compared on date and amount only, with other rows that have a blank description.
Summary
Groups of repeats
Every row, with its list and group
Two identical card payments on one day can both be real. This page compares rows and counts them. It does not say which rows are mistakes, and nothing is removed from the file.
What gets checked
- Every row of the file is in exactly one of three lists: exact repeats, near repeats, or no repeat found. The three lists add up to the file's row count and dollar total, added a second time in a separate pass.
- Every exact group has two or more rows with the same date, the same amount with the same sign, and the same description once capital letters and spacing are ignored.
- Exact groups are complete: no two rows outside the same group have the same date, amount, and description.
- Every near group has two or more rows with the same amount and description, on more than one date, each within the typed number of days of the row before it.
- Near groups are complete: no two rows outside the same group have the same amount and description on different dates within the typed number of days of each other.
- The rows and dollars in the second and later rows of each group are re-added from the rows and equal the totals shown.
- The checks on the groups and totals are made by a separate routine that starts again from the rows that were read, with its own count of calendar days in whole numbers.
- A warning, not an error: rows with a blank description. They are compared on date and amount only.
- Every row with data is accounted for: compared, listed as left out (a row with no date and no amount), or listed as unreadable with the reason. An unreadable row marks the result not verified.
How it works
- Open the rows. Drop a .csv or .xlsx export from a bank or card account, or a ledger saved as rows, or paste rows with a header row first. The rows are read in the browser. PDF files and scans are not read.
- Check the columns. Date, description, and amount (or separate money out and money in columns) are matched from the header words. Every choice can be changed, along with the header row, whether dates are month first or day first, and whether the signs are flipped.
- Type a number of days, or leave it blank. Blank or 0 lists exact repeats only. With a number above zero, rows with the same amount and description are put in date order, and a row is joined to the row before it when the two dates are that many days apart or fewer. Joined rows on more than one date are a near group.
- Review and download. The summary counts the groups and the rows and dollars in their second and later rows. One table lists the groups and another lists every row with its list and group. Download both as Excel or CSV with the certificate, or print.
Worked example
A made-up March export of ten transactions. Row 1 of the file is the header row, so the transactions are rows 2 to 11. The days box is set to 3. The last column is the group the page puts each row in.
| File row | Date | Description | Amount | Group |
|---|---|---|---|---|
| 2 | 03/02/2026 | CARD PURCHASE CORNER CAFE | -18.40 | Exact 1 |
| 3 | 03/02/2026 | Card Purchase Corner Cafe | -18.40 | Exact 1 |
| 4 | 03/03/2026 | ACH DEPOSIT CLIENT INVOICE 204 | 1250.00 | No repeat found |
| 5 | 03/05/2026 | CARD PURCHASE OFFICE SUPPLY | -45.00 | Near 1 |
| 6 | 03/06/2026 | CARD PURCHASE OFFICE SUPPLY | -45.00 | Near 1 |
| 7 | 03/09/2026 | CARD PURCHASE OFFICE SUPPLY | -45.00 | Near 1 |
| 8 | 03/13/2026 | CARD PURCHASE OFFICE SUPPLY | -45.00 | No repeat found |
| 9 | 03/16/2026 | FUEL STATION 12 | -60.00 | No repeat found |
| 10 | 03/16/2026 | FUEL STATION 12 | 60.00 | No repeat found |
| 11 | 03/31/2026 | MONTHLY SERVICE FEE | -12.00 | No repeat found |
Rows 2 and 3 are an exact group: the same date, the same amount, and the same description once capital letters are ignored. Rows 5, 6, and 7 are a near group: row 6 is 1 day after row 5 and row 7 is 3 days after row 6. Row 8 is 4 days after row 7, one day more than the 3 typed, so no repeat is found for it. Rows 9 and 10 have opposite signs, so they are not repeats of each other. The second and later rows of the exact group are 1 row and -$18.40; those of the near group are 2 rows and -$90.00. The exact repeats are 2 rows and -$36.80, the near repeats are 3 rows and -$135.00, and the rows with no repeat found are 5 rows and $1,193.00, which add up to the file's 10 rows and $1,021.20. All 14 checks pass.
The example uses made-up names and numbers.
Questions
What counts as an exact repeat?
Two or more rows with the same date, the same amount with the same sign, and the same description once capital letters and spacing are ignored. A payment and its reversal have opposite signs, so they are not repeats of each other. Rows on different dates are not exact repeats, however alike they are.
How are near repeats found?
Only when a number of days above zero is typed. Rows with the same amount and the same description are put in date order, and a row is joined to the row before it when the two dates are that many days apart or fewer. Two or more joined rows on more than one date are one near group. Because each row is compared with the row before it, a group can cover more days from its first row to its last than the number typed.
Why is a pair of same-date rows sometimes listed as a near repeat?
Each row is in one list only. When a number of days is typed and same-date rows are also within that many days of a row on another date, all of them are joined into one near group, so the pair is listed there and not as an exact group of its own. With the days box blank, the same pair is listed as an exact group.
Does the page say which rows are mistakes?
No. Two identical card payments on one day can both be real, and a repeated row can also be one entry made twice. The page has no way to know which. It lists the groups, labels every row, and counts the rows and dollars in the second and later rows of each group.
Is anything removed from the file?
No. The file is read in the browser and is not changed. The Excel and CSV downloads list every row that was read, each with its list and its group, so no row is dropped from the output.
What do the totals of second and later rows mean?
In each group the rows are put in date order, the first row is set aside, and the amounts of the rest are added up with their signs, so money out is negative. The summary shows that count and that total for the exact groups and, separately, for the near groups. They are totals of the rows listed. They are not a statement that those rows are wrong.
What happens to a row with no description?
It is still compared. A row with a blank description is matched on date and amount only, and only with other rows whose description is blank. A warning counts those rows and lists their row numbers.
Does it read PDF statements or scans?
No. It reads rows: a .csv or .xlsx export from a bank or card account, a ledger saved as .csv or .xlsx, or rows copied from a spreadsheet into the box on the page.
This tool calculates and checks numbers. It is not legal, tax, or medical advice.