A transfer is a transaction between two of your wallets.
If you see a set of scenarios like this:
Then this is not a transfer - this is one deposit and one withdrawal. We often call it a "broken transfer". On a broken transfer, a withdrawal is equivalent to "sold at market price", so gains will be calculated for this disposal, while the deposit will be treated like an acquisition at current market price. Such a broken transfer effectively resets the cost basis of your assets.
A "proper" transfer would show as below - both transactions should be "together" on one line only, with a ">>" icon:
Common issues
Koinly can't detect transfers
Most of the time, Koinly will detect and automatically merge your transfers between wallets. If it didn't, it means that the transactions didn't pass our transfer-matching engine checks - for details on those, check:
The solution is to identify the cause of the error:
Are both legs of the transfer imported (withdrawal and deposit)?
Maybe one of the wallets is missing or wasn't synced
Do the details of both transactions match?
Usual culprits:CSV files imported in the wrong timezone
See How to import a CSV file using a different timezoneExchange's API data is inaccurate
Edit the transaction manually to fix the timestampDifferent currency of the deposit
If one of the tokens has a "grey" icon (unidentified currency) what may help is if you Change Currency (if Koinly imported the wrong token)
Transfer is still showing a small gain/loss
In a scenario as below, where both withdrawal and deposit are already merged into a "proper" transfer, but there's still some gain/loss calculated:
This happens due to the transfer fees. It's especially clear when checking the "Cost Analysis" tab (available on our paid plans only):
You may choose to postpone realizing gains on transfer fees by toggling OFF Treat transfer fees as disposals in your Settings - if you do, all the transfer fees will be disposed (sold) only once the whole lot is completely sold, not immediately during every transfer.
However, the disposal of transfer fees can still create gains - see Cost transaction is showing a profit (or loss) for more information.
If you're interested to read more about the tax treatment of different fees, check our blog post How Crypto Fees Can Lower Your Tax Bill
Koinly has created an incorrect transfer pair
Most of the time the transaction matching will work well but sometimes Koinly can make mistakes especially if you are moving the same amount between multiple wallets in succession ("hopping").
For example, if the example above was, in fact, a transfer involving a transfer of 1 ETH between three wallets:
Transfer of 1 ETH from Coinbase to MetaMask, and right after that:
Transfer of 1 ETH from MetaMask to Binance
In such cases, Koinly may incorrectly merge wrong transactions into transfers. A withdrawal from Coinbase and a deposit to Binance fulfill the requirements of transfer matching, so Koinly might merge them:
This leaves the deposit and withdrawal from MetaMask "without a pair" to merge.
We are constantly working on improving our algorithms so this is rare but can happen - especially when Coinbase and Binance are added to Koinly first, and MetaMask later. After all, Koinly didn't know about the MetaMask transactions at that time.
✅ How to fix wrong transfer pairs
You can split the transactions and then merge them manually in the correct order.