Duplicates, how overlapping imports stay clean

This page is a stub. The full guide is written against the shipped app version and is on its way.

Histories arrive messy, a Koinly export here, an exchange statement there, and the same trade often lives in both. The app deals with overlap in two places.

At import, the preview separates new from known. Re-import a file you already added, or a second export overlapping the first, and the preview counts how many rows are new against how many the workspace already holds, so confirming an import never doubles your history. This is also why re-running an exchange sync is always safe, existing rows deduplicate rather than repeat.

After import, near-matches queue in Reconcile. Two rows that look like the same event without being byte-identical, same asset, same day, same size, from two sources that describe it differently, are flagged with a plain sentence, this looks like a duplicate of another row, pointing at the suspect pair. The engine does not delete either one on its own, a wrong deletion is worse than a flagged question.

What to do with the flag. Open the pair, decide which row tells the truth, usually the source closest to the event, the exchange’s own statement over an aggregator’s copy, and remove the other. Undo stands behind you if you pick wrong.

Why it matters beyond tidiness. A duplicated buy inflates your pool and understates your gains, a duplicated sell does the reverse, and either way the confidence score drops until the question is answered. Ten minutes in Reconcile after a big import is the cheap insurance.