Liquidity Providing refers to taking part in AMM-type exchanges by providing your own assets for other users to trade with. By doing this, you earn fees from the trades conducted using your assets, though also face some capital risks (impermanent loss).
Koinly currently supports liquidity transactions carried out on the Ethereum, Binance Smart Chain, Polygon, Avalanche, Fantom, Cronos, Arbitrum, and most other EVM blockchains. We also support LPing on Solana.
For supported protocols, liquidity transactions are imported and tagged automatically as Liquidity in/out.
How LPing looks in Koinly
If you provided your assets to a liquidity pool, you will see:
Withdrawals of your assets
A deposit of an LP token (with an orange icon)
All transactions will have a
Liquidity Intag applied:
If you exited a liquidity pool, you will see:
A withdrawal of the LP token
Deposits of the underlying assets
All transactions will have a
Liquidity Outtag applied:
Special cases
Concentrated liquidity
Uniswap V3 and some other protocols don't provide an LP token. These concentrated liquidity market maker protocols (CLMM) identify your position using a single NFT instead of an LP token with varying amount. These NFTs do not allow Koinly to properly calculate your gains when entering/exiting the position because they lack the information about the change in share in the pool the transaction resulted in.
While Koinly supports the most popular CLMM protocols like Uniswap V3, Pancake Swap V3, Orca Concentrated Liquidity, Meteora DAMM2, etc., you may have used an unsupported protocol. In such cases, you will need to manually adjust those transactions.
Zapping
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 adding staking/farming transactions, as they will just cancel each other out (when you unwind) with no tax implications.
โ
Common issues
Liquidity Out has 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 Add to Pool and Remove from Pool so that Koinly understands that these LP tokens are simply being "set aside" and not disposed. You can learn more about this in:
Koinly should automatically apply these labels to most LP farming transactions, but you will need to add the label manually if it gets missed by Koinly.
๐ต Example: CAKE-LP with $0 cost basis
๐ต Example: CAKE-LP with $0 cost basis
You provided liquidity to a CAKE-BNB pool on Pancake Swap. After importing the data to Koinly, some of the "liquidity out" transactions show $0 cost basis of your CAKE-LP token.
๐ข Solution: Tag all the farming transactions involving CAKE-LP as such
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 transaction on the explorer to be sure)
As such, you can tag all the transactions you see now as "Add/Remove from Pool"
Repeat for every LP token that shows $0 cost basis on disposal
Liquidity transactions are not tagged
If you notice that your liquidity transactions are not tagged and there's no cost basis assigned to the LP token, it usually means that:
One of the provided assets is missing the market price
This protocol is not supported by Koinly
One-sided liquidity
1: Provided assets are missing market price
Koinly can only merge transactions into liquidity if all the assets you provided (assets you sent to a liquidity pool) or all the assets you received when exiting the pool have a known market price. Otherwise, we are not able to assign worth to the other leg of this transaction (the LP token).
โ 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
If one or more of the assets you were LPing is missing the market price, you need to add it manually. See how in:
๐ต Example: LPing with ETH and FOMO on Uniswap
๐ต Example: LPing with ETH and FOMO on Uniswap
You provided ETH and FOMO as liquidity on Uniswap V2
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: Set worth on all assets
Check that both of the provided assets have a market price. Once you set the market price you will be able to merge the 3 transactions
2: Unsupported protocol
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.
๐ต Example: LPing ETH and FOMO on a small DEX
๐ต Example: LPing ETH and FOMO on a small DEX
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: Contact Koinly Support
Reach out to Koinly Support via our in-app chat. Be sure to include the details of the transaction (txHash). You will still 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).
โ๏ธ Use "Change Currency" for API wallets
If the LP token was imported via API as a "grey" token, you can also use "Change Currency" and change it to any other LP token (that you don't use anywhere else). You can use one of the LPx placeholders or try to find a more appropriate token in Koinly's database - as long as it has an orange icon.
โ
โ3: One-sided liquidity
Koinly will automatically merge and apply liquidity tags only if two or more assets were exchanged for an LP token.
If you entered (or exited) the liquidity pool with only one token, Koinly will not automatically merge this but you can still merge it manually:
โ๏ธ One-sided liquidity transactions will not have a liquidity tag applied
Koinly does not apply a liquidity tag (Liquidity In, Liquidity Out) to one-sided LPing. These transactions will appear as normal trades (Exchange).
If you want to treat your LPing as non-taxable, you need to tag such one-sided LPing as Swap
How to add liquidity transactions manually
If Koinly doesn't import the protocol (or blockchain) you used to provide liquidity, you may need to add those transactions manually.
To add your LP token, you can use our placeholder symbols (LP1, LP2, LP3, etc.)
โน๏ธ Use a unique LPx token for each pool you participated in
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.
See how to add transactions manually in:
๐ต Example: Providing liquidity on USDC/ETH
๐ต Example: Providing liquidity on USDC/ETH
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: Add the transactions manually
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 receivedMerge the deposit of the
LPxtoken with the withdrawals that represent assets you provided to the liquidity poolKoinly will automatically tag it as "Liquidity In" and split the deposited
LPxtoken among the withdrawn assetsYou can now delete the unrecognized token
Manual concentrated LPing
For protocols like Uniswap V3 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
LPxtokensWhen you exit the pool completely, withdraw all the
LPxtokens you have in your balanceFor partial entries/exits, you need to somehow estimate the amount of
LPxtokens received/sent. You can try estimating it by comparing the size of your position so far, how manyLPxtokens you already added and deciding on the amount proportionallySometimes, it's also possible to find the amount of liquidity units on the explorer (unfortunately, it usually requires scrolling through transaction logs)
Frequently asked questions
Are liquidity transactions taxable?
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 your Settings.
Which DeFi protocols Koinly supports?
Which DeFi protocols Koinly supports?
Koinly will automatically import and tag LP-related transactions for all the protocols listed below:
Ethereum and other EVM chains:
Uniswap V2, Uniswap V3, Uniswap V4, Balancer, Sushiswap, Sakeswap, Snowswap, Mooniswap, Curve.fi, Spookyswap, Bancor, yearn Finance, Value, Cream, 1inch, Beethoven
Solana
Orca, Orca CLMM, Raydium, Raydium CLMM, Meteora DAMM2, Meteora DLMM, PumpFun AMM
and over 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!
Changelog
2024-10-01: Update on Liquidity Pool Transactions:
LP transactions will no longer be split and merged into two trades.
Instead, they now appear as separate transactions (deposits, withdrawals), each with the same tag.
For example, when adding liquidity, youโll see two token withdrawals and one deposit of the LP token, all tagged as โLiquidity Inโ. This change allows for easier tracking and more dynamic editing of your transactions but doesn't change the calculations - it's mainly a visual change
2023-02-03: Uniswap V3 is now supported
Koinly now automatically imports/tags liquidity transactions on Uniswap V3
We do this by importing an additional LP token (with an orange icon) apart from the NFT
The amount received/sent of this additional LP token is equal to the share in the pool (liquidity units) allowing Koinly to properly calculate capital gains

