Duplicate Transactions After Connecting an Exchange
6 min read · Verified September 2026
Duplicates appear when a position you entered by hand is also picked up by a sync, when a transfer between two of your own accounts is read as a sale on one side and a purchase on the other, or when the same wallet address is watched twice under two labels. Remove the manual copy, not the synced one.
You connected an exchange, the app finished syncing, and your portfolio went up by forty percent. For about four seconds that felt good.
Nothing arrived. You are looking at the same coins counted twice, and the fix takes ten minutes provided you delete the right copy. Delete the wrong one and you keep the balance but lose the purchase price behind it, which is a slower and more annoying problem to repair.
There are three ways a duplicate gets created, and they need different handling.
Why did my balance jump when the sync finished?
This is the manual-plus-sync collision, and it is by far the most common. You tracked an exchange by hand for a year, typing in each buy as you made it. Then you connected the account properly with a read-only key, and the sync imported that same year of buys.
Your tracker cannot tell that the 0.4 BTC you typed in and the 0.4 BTC it just read from the exchange are the same 0.4 BTC. It has one record you created and one record the exchange reported, both claiming a real holding. Summing them is the correct behaviour given what it knows.
The manual copy is the one to remove. A synced record carries the exchange's timestamps, exact quantities and fee amounts, which beat anything you typed from memory. But before you delete anything, open the manual entry and write down the acquisition price you recorded, because that is the one piece of information the sync might not have. Some exchanges expose full trade history through their API and some expose only current balances, and in the second case the sync gives you a correct quantity with no idea what you paid for it.
That distinction is the whole game here, and cost basis vs. market value covers why. If the synced record arrives with no acquisition price, the tracker assumes zero, and your entire position reads as profit. Fixing the duplicate then breaks your performance figures in a way that is easy to miss, because the total looks right.
The order that avoids all of this: connect an account first, see what the sync brings in, and only then add manual entries for whatever it missed. Adding a manual position covers doing that cleanly.
Read-only connections import the exchange side automatically, so the manual copy is the one to retire.
Why does moving my own coins look like a trade?
Because from the data's point of view, it is one.
Send Bitcoin from your exchange to your hardware wallet and two events get recorded. The exchange reports a withdrawal. The chain reports a deposit to an address you watch. Nothing in either record says these are two ends of one movement, and nothing says both ends belong to you.
Left unmatched, the withdrawal reads as a disposal at the current market price and the deposit reads as an acquisition at the current market price. The quantity in your portfolio nets out to roughly the right number, but your history now contains a sale you never made and a purchase you never made. Realised profit and loss is wrong. If you carry those records to a tax preparer, you have manufactured a taxable event out of moving your own property between your own pockets, which is the sort of thing that costs money to unwind. Trackers vs. tax software is worth reading if that is where these numbers are heading.
The fix is to mark the pair as a transfer. Most trackers let you tag a withdrawal and a matching deposit as two sides of the same movement, at which point both drop out of your trade history and the coins keep their original acquisition price all the way through. What you are preserving is the fact that the coins never changed hands.
Do this at the time you make the transfer. Matching a withdrawal to a deposit is trivial the same afternoon and genuinely tedious eight months later, when there are four candidate deposits within an hour of each other and the amounts differ by network fees. If you move between your own accounts regularly, running a multi-wallet setup covers structuring things so the movements are fewer and easier to identify.
Bridging is the same problem with an extra wrinkle. Tokens leave one chain and different tokens arrive on another, often with a different contract address and sometimes a different ticker, so the two sides do not obviously correspond even to a human. Expect to match those by hand.
How did the same wallet end up in my portfolio twice?
The third source is duplication at the account level rather than the transaction level, and it hides better than the other two because both copies look legitimate.
Watch an address once as "Main ETH" and again months later as "Ledger", and every token in it counts twice. This happens most often when someone adds addresses across several sittings, or after switching trackers and importing an old list on top of connections they had already made, which switching trackers flags as the thing to check first.
The exchange version is subtler. Connect the same account with two different API keys, perhaps because you generated a new one after forgetting about the first, and both keys report the same balances under two connection names. On a free tier with a connection limit this also quietly consumes a slot you could be using for a real account.
Both are found the same way. List every connection and every watched address, sort by the address or account identifier rather than by the label you gave it, and look for the same identifier appearing twice. Labels lie; addresses do not. Tracking a portfolio across multiple wallets covers a naming convention that makes this obvious at a glance instead of requiring an audit.
How do I clear duplicates without wrecking my cost basis?
Work in one sitting, and go in this order.
- Record ground truth before you touch anything. Open each exchange and each block explorer and write down the balance it reports. You need a target to reconcile toward, and you need it from outside the tracker.
- Find duplicate connections first. Two connections to the same account, or two watched entries for the same address. Remove the redundant one before you look at individual transactions, since this can resolve dozens of apparent duplicates at once.
- Copy acquisition prices out of manual entries that overlap with a synced account. A note on your phone is enough. Do this before deleting anything.
- Delete the manual copies, not the synced ones. Then check whether the surviving synced records carry an acquisition price. Where they show a position as entirely profit, put your saved figure back in.
- Match transfers between your own accounts. Work through withdrawals and pair each with its deposit. Network fees mean the amounts will differ slightly, so match on time and approximate size.
- Compare against your ground truth. A residual gap under a percent is usually price-source drift rather than a duplicate. Anything larger has a specific cause, and why your portfolio balance is wrong lists what else it could be.
Once it is clean, keep it clean with one rule: each account is either synced or manual, never both. The Crypto App handles read-only connections across 100+ exchanges and 15+ blockchains, with manual positions for the things that cannot sync, and the two are meant to cover different accounts rather than the same one twice.
The habit that prevents a repeat is deciding, the moment you open a new account anywhere, which side of that line it lives on. Write it down if you have more than a handful. Duplicates are almost never created by the tracker; they are created by the gap between how you tracked something last year and how you track it now.
Common questions
Because the holdings you had been tracking by hand were still there when the sync added the same holdings again. The tracker has no way to know your manual Bitcoin entry and the Bitcoin it just read from your account are the same coins. Delete the manual entries and the total halves back to reality.
The manual one, almost always. A synced record carries the exchange's own timestamps, quantities and fees, which are more accurate than anything you typed. Before deleting, copy the acquisition price out of your manual entry, because that is the one piece of information the sync may not have.
The exchange sees a withdrawal and the chain sees a deposit, and neither knows the two ends belong to the same person. Unless the transfers are matched, one side reads as a disposal and the other as an acquisition at the current price, inventing a taxable event that never happened.
Yes, and that is the point. A duplicated position shows duplicated gains. What you must protect is the acquisition price on the record you keep, since deleting the entry that held the real purchase price is what turns a fixed portfolio into a portfolio that reports everything as pure profit.
No. Each tracker reads your account independently and keeps its own records, so they cannot contaminate one another. Duplicates only occur inside a single tracker's own set of accounts and entries.
Decide per account whether it is synced or manual, never both, and connect an account before you start entering its positions by hand. When you move funds between your own accounts, mark the pair as a transfer at the time rather than months later.
Read-only connections across 100+ exchanges and 15+ blockchains, with manual positions for everything that cannot sync.
Keep reading
Why Your Crypto Portfolio Balance Is Wrong
Your tracker says one number, your exchange says another. The eight things that cause a wrong crypto portfolio balance, and how to fix each one.
Cost Basis vs. Market Value: Which Number You're Looking At
Market value is what your coins are worth now. Cost basis is what you paid. Why the two get confused, and why transfers break the second one.
How to Add a Position Your Tracker Can't See
OTC buys, peer-to-peer trades, cold storage and vesting allocations don't sync. How to enter them by hand so your total and cost basis stay right.
Unrealised and Realised P&L, With Actual Numbers
Unrealised profit is a quote. Realised profit is a completed transaction. A worked example with real figures, and why the gap decides your tax year.
A Portfolio Tracker and Crypto Tax Software Do Different Jobs
One answers what you hold now. The other reconstructs every disposal in a past tax year. Why swapping them frustrates people, and how they fit together.
Read-Only API Keys: What a Portfolio Tracker Can and Cannot Do
What read, trade and withdraw permissions actually grant, why a read-only key cannot move funds, and the exact settings to switch off before you connect.
How to Switch Trackers Without Losing Your History
Export first, know what carries over, rebuild cost basis properly, and run both apps in parallel. Switching a crypto tracker costs history, never funds.
How to Audit Your Tracker Against the Real Numbers
Reconcile your tracker against exchange balances and block explorers. Where ground truth comes from, and which gaps are drift versus real errors.