Why Your Portfolio Tracker Shows a Fake Taxable Sale After a Broker Transfer
You moved 100 shares of a stock from Broker A to Broker B, in-kind, without selling anything. A week later your tracker shows a $4,000 capital gain that doesn't exist. Nothing was sold — but the tracker doesn't know that, because it never saw a transfer. It saw a sell at Broker A and a buy at Broker B, in two completely separate import files, with nothing connecting them.
Why the tracker can't tell the difference on its own
Broker A's export says: sold 100 shares on March 3rd. Broker B's export says: bought 100 shares on March 5th. Read separately, those are two ordinary trades. Read together, they're obviously the same event — same symbol, same quantity, a few days apart, different brokers. The signal is there, but only if something is actually looking across both files for the pattern, rather than importing each one in isolation.
The obvious fix is incomplete
Once you've spotted the pair, the instinct is to just delete both the fake sell and the fake buy. That removes the phantom gain — but it also erases the cost basis and acquisition date that were attached to those transactions, and does nothing to tell your records that the shares now sitting at Broker B are the same shares you originally bought years earlier at Broker A.
For most US filers this is a smaller problem: cost-basis lots are tracked per taxpayer, not per broker, so as long as the original buy transaction (the one that funded the position before the transfer) still exists somewhere in your history, the lot survives. But it's a real problem anywhere lots are tracked per account — Germany's FIFO-per-Depot rule under § 20 EStG is the clearest example. If the surviving lot is still labeled with the old broker, the next time you actually sell at the new broker, there's no lot history there at all — and the sale gets reported with zero cost basis and the full proceeds as taxable gain. The fix built to remove one phantom gain ends up creating a bigger one.
What actually needs to happen
Correcting this properly means three things at once: removing the fake sell and buy, and re-labeling the surviving open lot(s) at the source broker onto the receiving broker — oldest lots first, up to the quantity that was transferred, leaving anything beyond that amount where it is (a partial transfer is a real scenario, not an edge case to ignore). Get any one of those three wrong and you've either still got a phantom gain, a lot with no broker, or a lot that got moved when only part of the position actually was.