Remove Duplicate Rows
Drop a CSV, TSV, or Excel file and get back a clean version with duplicate rows stripped out. Runs in your browser — no signup, no upload.
Drop your file here
Accepts CSV, TSV, XLSX, XLS · Runs in your browser. Your file never leaves your device.
Duplicate rows sneak into spreadsheets all the time — exported from a CRM with overlapping pulls, concatenated from two team members' lists, accidentally pasted twice. This tool reads your file, removes any row that exactly matches another row, and gives you back a clean copy in the same format you uploaded. The first occurrence of each row is kept; subsequent duplicates are dropped. Original row order is preserved.
Everything runs in your browser using the same engine SheetCompare's full diff product is built on. There's no upload, no server, nothing logged. CSV in, CSV out. Excel in, Excel out.
Three steps, no signup
- 1
Drop your file
Drag a .csv, .tsv, .xlsx, or .xls file into the box, or click to pick one. We read the file in your browser — nothing is uploaded.
- 2
We strip exact-match duplicates
Each row is compared against every prior row across all columns. Any row that exactly matches one above it is removed. Order of remaining rows is preserved.
- 3
Download the deduplicated file
Download the cleaned file in the same format you uploaded — `yourfile-deduped.csv`, `yourfile-deduped.xlsx`, and so on.
Frequently asked questions
- What counts as a duplicate row?
- A row is considered a duplicate if every cell value is identical to a row that appeared earlier in the file. All columns are compared — there's no concept of a "key column" in this tool. If you need to dedupe based on a subset of columns (say, only on `email` while ignoring the `last_seen_at` column), use the SheetCompare app's single-file mode where you can pick the key columns explicitly.
- Which copy of the duplicate is kept?
- The first occurrence. Rows are processed top-to-bottom; the first time a row appears it's kept, and any later identical rows are dropped. So if your file is sorted by date with newest at the top, you'll keep the newest copy. If newest is at the bottom, you'll keep the oldest. Sort the file before deduping if which copy survives matters.
- Is the comparison case-sensitive?
- Yes. "jane@example.com" and "Jane@Example.com" are treated as different rows. Same for whitespace — " Jane " and "Jane" are different. If you need case-insensitive or whitespace-trimmed matching, normalize the values in Excel or your script first (lowercase + TRIM), then run them through this tool.
- Is row order preserved?
- Yes. We don't sort the output — surviving rows come out in the same order they appeared in the input. This matters when your file is already in a meaningful order (chronological, by priority, etc.) and you want dedupe to be a passive cleanup pass rather than a reshuffle.
- How do I see how many rows were removed?
- The preview shows the row count after dedupe. Compare that against your original file's row count to get the number removed — for example, if your input had 5,200 rows and the preview shows 4,873, you removed 327 duplicates. We don't surface the diff number directly in the UI today; that's on the roadmap.
- Does it work on Excel files with multiple sheets?
- Only the first sheet is read and deduped. The output preserves whatever format you uploaded — drop an .xlsx and get an .xlsx back, but with a single sheet containing the cleaned data. If you need to dedupe each sheet of a multi-sheet workbook, run them separately.
- How big a file can I dedupe?
- Because everything runs in your browser, memory is the bottleneck. A few hundred thousand rows works comfortably on a modern laptop; multi-million-row files may stall or fail. For very large datasets, use a command-line tool like `awk '!seen[$0]++'` (for full-line dedupe) or a database `SELECT DISTINCT`.