Koinly currently supports Liquidity transactions carried out on the Ethereum, Binance Smart Chain, Polygon, Avalanche, Fantom, Cronos, Arbitrum, and a few other EVM blockchains. We are working on adding support for other blockchains such as Solana and Osmosis.
Liquidity transactions are imported and tagged as Liquidity in/out automatically.
DeFi protocols supported by Koinly
We currently support a number of liquidity protocols such as:
and about 100 more!
This list is ever-increasing. If your transactions are not being recognized as liquidity automatically then send us a feature request via our Feedback Portal!
☝ We do not currently support Uniswap V3 - you will need to use our manual method described below for those transactions. Make sure to upvote support for UniV3 on our Feedback Portal!
Are liquidity transactions taxable?
There's a lot of debate around this, by default we treat these as taxable since you are exchanging your tokens for some LP tokens which can be traded or staked to earn more coins.
However, if you feel that such liquidity transactions should not be taxed then you can toggle OFF "Realize gains on liquidity transactions" on the Settings page.
My liquidity transactions are showing up as deposits/withdrawals
This can happen if:
One of the provided assets is missing the market price
This protocol is not supported by Koinly
🔵 Example: if you provide ETH and FOMO as liquidity on Uniswap V2 but Koinly didn't automatically merge this into a "Liquidity In" transaction - there is a Market prices for XYZ are missing warning on one of the withdrawals:
🟢 Solution: Check if both of the provided assets have a market price. Once you set the market price you will be able to merge the 3 transactions
☝ You do not need to set the worth of the received LP token - market value needs to be set only for the assets you provided to the liquidity pool
🔵 Example: The assets you provided to the liquidity pool both have the market price, but Koinly still didn't merge them into a Liquidity In transaction:
🟢 Solution: If the LP token you're receiving is not recognized by Koinly, it will have a grey icon instead of an orange one. In such cases, Koinly will not be able to merge this into a liquidity transaction - please open a support ticket regarding this, but you will most likely need to use the manual method for this protocol.
Compare the icon of the received LP token in this example (grey, unsupported) and in the previous one (orange, supported):
Liquidity Out transactions have a cost-basis of $0
This is a common issue that can happen if you have farmed (staked) your LP tokens. Koinly will import these farming/staking transactions but they will be shown as regular deposits/withdrawals since this is how the block explorers report them.
To fix this, you can tag these deposits and withdrawals as Sent to Pool and Received from Pool so that Koinly understands that these LP tokens are simply being transferred to a farm or staking pool. You can learn more about this in our article on Staking.
🟢 Solution: An easy way to find all transactions that need to be tagged for each LP token is to:
Locate your most recent Liquidity Out transaction
Click on the eye icon in transaction details. This will show you all past transactions involving this specific token
Filter to see the deposits and withdrawals only
All the transactions visible are most likely your staking transactions, as it rarely happens that you send your LP tokens anywhere (you can also check the contract address they're sent to)
As such, you can tag all the transactions you see now as "Sent/Received from Pool"
☝ You need to repeat this process for every LP token you had.
If you zapped into the pool, most of the standard transactions happened on the smart contract, without anything related to your wallet. Often you will only have a withdrawal of one asset (i.e. 1 ETH) from your wallet in Koinly, while the rest:
Trading 0.5 ETH for another asset
Providing liquidity to a liquidity pool
Sending the LP token for staking
Is missing, because it didn't happen on your wallet.
In such situations, you need to account for the liquidity manually (see below). Usually, you can ignore the staking transactions whatsoever, as they are not taxable - so you only need to add Liquidity In/Out.
How to add liquidity transactions manually
🔵 Example: You provided 4300 USDC and 1 ETH to a liquidity pool, but the imported LP token is not recognized by Koinly (it has a grey icon instead of an orange one).
🟢 Solution: In Koinly, you can use liquidity placeholder tokens whenever we do not support a specific coin: (
☝ Use a different
LPx for every liquidity pool you participated in. For example LP1 whenever you entered ETH-BNB pool, LP3 for BTC-USDC pool, etc.
To account for this liquidity transaction manually in Koinly, you need to:
Create a manual deposit of an
LPxtoken, the amount should be the same as of the "grey" LP token you received
Merge the deposit of the
LPxtoken with the withdrawals that represent assets you provided to the liquidity pool
Koinly will automatically tag it as "Liquidity In" and split the deposited
LPxtoken among the withdrawn assets
You can now delete the unrecognized token
Uniswap V3 and other protocols that don't provide an LP token
For protocols like UniV3 that don't provide an LP token (UniV3 only gives you 1 NFT when opening the position) step 1 from the instructions above gets tricky. What we recommend is:
The first time you enter the said pool, add 100
When you exit the pool completely, withdraw all the
LPxtokens you have in your balance
☝ If you were providing assets to the same liquidity pool multiple times or exiting it partially, you need to calculate the number of
LPx tokens added/removed proportionally.