Koinly DeFi Transactions: Complete Honest Fix Guide (2026)

Affiliate Disclosure: This article contains affiliate links. If you sign up for Koinly through a link on this page, I may earn a commission at no extra cost to you. I only recommend tools I have genuinely evaluated.

Tax Disclaimer: This article is for informational purposes only and does not constitute professional tax or financial advice. Tax laws vary by country and change frequently. Consult a qualified tax professional for advice specific to your situation.

If your Koinly DeFi transactions are showing unexpected capital gains — from staking, liquidity pool exits, or yield farming — the most likely cause is a labelling issue, not missing data. Koinly imports DeFi activity automatically but assigns default categories that can treat staking deposits as sales and LP exits as disposals when the automatic tagging does not apply or is missed.

Left uncorrected, these default labels produce tax figures that significantly overstate your actual gains. I am Andreas Maratheftis, thirty years in professional finance, and this is one of the most consequential and least discussed issues in crypto tax reporting: the difference between a correctly labelled DeFi transaction and an incorrectly labelled one can be hundreds or thousands of dollars in reported gains that you do not actually owe.

This guide covers every major DeFi transaction type Koinly handles, what label Koinly assigns by default, what that means for your tax report, and exactly how to fix it when the default is wrong.

If you want to check how Koinly has categorised your DeFi transactions before making any changes, the free plan lets you see everything without purchasing a report: check your Koinly DeFi transactions here.

Koinly DeFi Transactions: Quick Answer

Koinly assigns default labels to every imported transaction. When Koinly cannot automatically recognise a DeFi transaction, deposits are typically treated as acquisitions and withdrawals as disposals. This can make a staking deposit appear as a taxable sale and an unstaking event appear as a new acquisition unless the correct pool tags are applied.

The fix is to apply the correct tags: Add to Pool for staking deposits, Remove from Pool for unstaking, and Reward for staking reward income. Full details on every available tag are in Koinly’s official tags guide. Liquidity pool activity has its own tag pair. Once correctly labelled, Koinly recalculates your gains and removes the false taxable events from your report.

Why Koinly DeFi Default Labels Cause Problems

Understanding the root cause makes every fix in this guide make sense. Koinly imports transaction data from blockchains and exchanges. Blockchains report events in their simplest form: tokens left a wallet, or tokens entered a wallet. They do not tell Koinly whether those tokens were sent to a staking contract, deposited into a liquidity pool, or sold on a DEX. That context has to be inferred — and when Koinly cannot infer it with confidence, it falls back to defaults.

The defaults are conservative and technically correct for the most common scenario. A withdrawal from your wallet is a disposal by default. A deposit into your wallet is an acquisition by default. For simple trades this is correct. For DeFi activity it is almost always wrong — because sending tokens to a staking contract is not a sale, and receiving staking rewards back is income, not a purchase at market price.

The consequence: if you staked 10 ETH, Koinly may show a disposal of 10 ETH at market price (creating a taxable gain), and a later acquisition of 10 ETH when you unstake (resetting your cost basis to the unstaking date price). Your actual position — you sent ETH to a contract temporarily and got it back — has been converted into a fictional round-trip trade with tax implications. This is the problem every tag in this guide is designed to fix.

Koinly DeFi transaction interface showing defi transactions that need correct labelling to avoid false capital gains
Koinly’s DeFi transaction interface — each DeFi transaction type requires the correct tag to be applied. Without tags, staking deposits appear as taxable disposals and LP exits appear as sales, inflating your reported gains significantly.

Koinly DeFi Tag Reference: What Each Tag Does

Before working through each DeFi transaction type, here is the complete reference for the tags relevant to DeFi activity and what each one does to your tax report.

TagApplied toEffect on tax report
Add to PoolDeposits (staking / LP deposits)Marks the deposit as non-taxable — asset moves to Koinly’s hidden pool wallet, not treated as sold
Remove from PoolWithdrawals (unstaking / LP exits)Marks the withdrawal as non-taxable — asset returns from pool wallet, cost basis preserved from original acquisition
RewardDeposits (staking rewards received)Marks the deposit as income — FMV at receipt added to income total; cost basis set to FMV on that date
SwapDeposits or withdrawalsMarks transaction as a like-kind exchange — cost basis transfers to new asset, no gain or loss realised
AirdropDeposits (unsolicited token receipts)Marks as income if toggle is ON; marks as zero-cost acquisition if toggle is OFF
LostWithdrawals (tokens lost or stolen)Marks as a disposal with no proceeds — creates a capital loss equal to the cost basis
SpamAny transactionExcludes transaction entirely from all calculations and billable count

Fixing Staking Transactions in Koinly

Staking is the most common source of DeFi labelling errors in Koinly. The fix depends on what type of staking you are doing and whether Koinly auto-tagged the transactions correctly.

Centralised Exchange Staking — Usually Automatic

If you stake on a centralised exchange such as Binance or Kraken, Koinly generally imports and tags your staking rewards automatically when connected via API — though this depends on the exchange and the specific staking product used. Your rewards should appear as Reward-tagged deposits, and the staking deposit and unstaking events should be handled correctly without manual intervention in most cases. Check your Transactions tab after importing to confirm the Reward tag is present on your reward deposits. If it is not, apply it manually as described below.

On-Chain Staking (Self-Custody) — Requires Manual Tagging

On-chain staking via a smart contract — staking ETH via Lido, staking SOL via a validator, staking CAKE on PancakeSwap — typically imports without correct tags because blockchain explorers report these as simple deposits and withdrawals with no context about where the tokens went.

Here is the fix for each transaction type:

  1. Staking deposit (sending tokens to the staking contract) — this imports as a withdrawal (disposal) by default. Tag it as Add to Pool. This tells Koinly the tokens moved to the pool wallet and were not sold. No taxable event is created.
  2. Unstaking (receiving tokens back from the staking contract) — this imports as a deposit (acquisition at market price) by default. Tag it as Remove from Pool. This tells Koinly the tokens returned from the pool wallet. The original cost basis is preserved.
  3. Staking rewards (additional tokens received as income) — these import as untagged deposits (acquisitions at market price) by default. Tag them as Reward. This tells Koinly to treat them as income at the fair market value on the date received — which is the correct tax treatment in most jurisdictions. The cost basis of each reward is set to its FMV on the date received, so any future disposal is calculated from that basis.

To apply tags in Koinly: go to Transactions, find the relevant transaction, click on it to open the detail view, and select the appropriate tag from the tag dropdown. For large numbers of reward transactions, use the bulk tag feature — filter by wallet, date range, and transaction type, then select all and apply the Reward tag in bulk.

Before bulk tagging, review a sample of the filtered transactions to confirm they are all the same type — bulk applying the wrong tag to a large set of transactions creates errors that are time-consuming to reverse. Full details on staking and farming token handling are in Koinly’s official staking and farming guide.

Accumulating Staking Pools

Some staking pools — including PancakeSwap’s CAKE pool and SOL staking on Solana — are accumulating pools where rewards are added to the staked balance and returned together with the principal when you unstake. Koinly may show a “Missing purchase history” warning on these because the returned balance includes tokens that were never separately recorded as acquired.

The fix is the same — tag the initial deposit as Add to Pool and the final return as Remove from Pool, then separately add a manual Reward deposit for the rewards portion at their FMV on the dates they accrued, if you have that data from the protocol.

Fixing Liquidity Pool (LP) Transactions in Koinly

Liquidity pool activity is more complex than staking because it involves multiple assets and the amounts returned on exit are often different from the amounts deposited — due to impermanent loss or fee accrual. Koinly has substantially improved its automatic LP handling in recent updates, but gaps remain for less common protocols.

Supported LP Protocols — Usually Automatic

Koinly supports liquidity transactions on Ethereum, Binance Smart Chain, Polygon, Avalanche, Fantom, Cronos, Arbitrum, Solana, and most other EVM blockchains. For supported protocols including Uniswap, SushiSwap, PancakeSwap, and Balancer, Koinly automatically imports and tags LP deposits as Liquidity In and LP exits as Liquidity Out. If your LP activity on a supported chain is correctly tagged, no further action is needed.

When LP Tags Are Missing — Manual Fix

If LP farming transactions imported as regular deposits and withdrawals without Liquidity In/Out tags, apply the pool tags manually:

  1. LP deposit (sending assets to the pool) — tag the withdrawal of your base assets as Add to Pool. If you received an LP token in return, that LP token deposit should also be tagged as Add to Pool so Koinly knows it represents your pool position and not a new acquisition.
  2. LP exit (receiving assets back from the pool) — tag the withdrawal of LP tokens as Remove from Pool and tag the returned base assets as Remove from Pool. The amounts returned may differ from what you deposited due to impermanent loss or fee accrual — Koinly handles this difference when the correct pool tags are applied, but review the resulting figures after tagging to confirm they look correct.
  3. LP farming rewards — any additional reward tokens received while farming LP tokens should be tagged as Reward (income at FMV on receipt).

One important note: the pool tags work by moving assets to and from Koinly’s hidden pool wallet. You should only Remove from Pool as much as you previously Added to Pool — otherwise Koinly will flag a “Missing purchase history” warning because the pool wallet has no record of the asset entering.

Concentrated Liquidity Protocols (Uniswap V3)

Concentrated liquidity market maker protocols like Uniswap V3 and PancakeSwap V3 use an NFT to represent your position rather than a fungible LP token. These NFTs lack the per-transaction share information Koinly needs to automatically calculate gain or loss on position entry and exit. Koinly does support popular CLMM protocols including Uniswap V3, PancakeSwap V3, Orca Concentrated Liquidity, and Meteora DAMM2 — but for any unsupported CLMM protocol, manual transaction entries may be required to correctly represent the liquidity position. Check Koinly’s help centre for guidance specific to your protocol if the automatic import does not look correct.

Koinly transactions tab showing defi transactions where koinly defi labels can be reviewed and corrected
Koinly’s Transactions tab — filter by wallet or tag to find DeFi transactions that need label corrections. Use the bulk tag feature to apply corrections across multiple similar transactions at once rather than editing one at a time.

The Rewards Toggle: Income vs Zero Cost Basis

One Koinly setting has a significant impact on how staking and other reward transactions affect your tax report: Settings → Treat rewards/airdrops/mining as income.

This toggle applies to all transactions tagged as Reward, Airdrop, Fork, or Mining. Understanding both states is important before deciding which to use — and the correct setting depends on your jurisdiction’s tax treatment of staking income.

Toggle ON — Income Reported at Receipt

When the toggle is ON, Koinly adds the fair market value of each reward deposit to your income total for the year it was received. The cost basis of the reward tokens is set to that same FMV. When you later sell the reward tokens, Koinly calculates capital gain or loss from the FMV-as-cost-basis — which is usually a smaller gain or a loss if the asset depreciated.

This setting reflects the tax treatment required in many major jurisdictions — including the US, UK, Australia, and Canada — where staking rewards are generally treated as income at the time of receipt. If you are in one of these countries, the toggle is likely to need to be ON — but confirm with a qualified tax professional for your specific situation before relying on this setting.

Toggle OFF — No Income, Full Capital Gain on Sale

When the toggle is OFF, Koinly does not record any income at the time rewards are received. The cost basis of the reward tokens is set to zero. When you later sell them, the entire sale proceeds are treated as a capital gain — because the cost basis is zero.

This setting is beneficial if the reward tokens depreciate significantly after receipt — because you avoid paying income tax on a value that no longer exists by the time you sell. However, it is only the correct setting if your jurisdiction does not treat staking rewards as income on receipt. A small number of countries have this treatment. Confirm the correct setting for your jurisdiction with a qualified tax professional before changing it.

Toggle StateIncome at receiptCost basis of rewardsCapital gain on saleBest if
ONFMV on date received — added to income totalFMV on date receivedSale price minus FMV at receiptYour jurisdiction treats rewards as income on receipt — confirm with a tax professional (common treatment in the US, UK, Australia, Canada and many others)
OFFNo income recordedZeroFull sale proceeds — entire amount is gainYour jurisdiction does not tax rewards as income on receipt — confirm with tax professional

How to Find DeFi Labelling Issues in Koinly

Before making any tag corrections, use Koinly’s built-in tools to identify which transactions need attention.

Check the Warnings Filter

Go to Transactions and enable the Warnings filter. This surfaces every transaction Koinly has flagged as potentially incorrect — including missing purchase history (often caused by untagged staking deposits that were treated as disposals, eliminating the cost basis record) and unmatched transfers. Resolving warnings is the highest-priority task before generating any tax report.

Filter by Wallet

If you know which wallets contain DeFi activity, filter the Transactions tab by wallet to see only the transactions from that source. Review the tag column for each transaction. Any staking-related withdrawal without an Add to Pool tag, or any staking reward deposit without a Reward tag, needs to be corrected.

Check the Dashboard Income Total

If your income total on the Koinly dashboard looks far higher than your staking rewards justify, check whether some large transactions — LP exits or unstaking events — have been incorrectly categorised as income events rather than pool returns. This can happen when Remove from Pool is missing and the returned assets are treated as new deposits — pushing their full market value into the income column rather than recognising them as the return of a pooled position.

The income figure should reflect only genuine income: staking rewards, mining proceeds, and similar — not the return of principal from a staking or LP position.

If your gains or income figures look significantly wrong after reviewing your DeFi labels, see our guide on fixing wrong gains in Koinly and our guide on Koinly missing transactions for the complete data resolution process.

Koinly warnings filter showing defi transactions with missing purchase history caused by incorrect koinly defi labels
Koinly’s warnings filter — use this before generating any tax report to surface DeFi labelling issues. Missing purchase history warnings on staking or LP assets almost always indicate incorrectly tagged transactions that need the Add to Pool fix applied.

Common DeFi Labelling Mistakes in Koinly

Treating Staking Deposits as Sales

The most common mistake. When you stake tokens on-chain, the withdrawal from your wallet imports without a tag. Without a tag, Koinly treats it as a disposal — generating a capital gain or loss on tokens you never sold. Apply Add to Pool to convert this from a taxable event to a neutral pool transfer.

Not Tagging Reward Deposits

Staking reward deposits without a Reward tag are treated as acquisitions at market price — which means they appear in Koinly’s capital assets pool rather than your income report. Your income total will be understated and your cost basis pool will be overstated. Apply the Reward tag so Koinly correctly separates income from capital acquisitions.

Using the Swap Tag Incorrectly

The Swap tag transfers the cost basis from one asset to a new asset without realising a gain — it is designed for like-kind token migrations (such as a protocol token swap where the same value moves from one token to another). It is not the correct tag for staking deposits or LP entries, where you are not swapping one token for another but rather temporarily locking tokens in a contract. Using Swap on a staking transaction will transfer the cost basis incorrectly and produce wrong figures on sale.

Mixing API and Manual Entries on the Same Wallet

If you have both an API connection and manual CSV imports for the same DeFi wallet, you may have duplicate transactions — one set tagged correctly by the API and one set untagged from the manual import. Duplicate transactions count double toward your billable transaction count and create incorrect gain calculations. Review any DeFi wallet that uses both import methods for duplicates before applying tag corrections.

What To Do Next

Open your Koinly account and go to Transactions. Enable the Warnings filter and work through every flagged transaction. For any staking-related withdrawal without Add to Pool, apply the tag. For any unstaking deposit without Remove from Pool, apply the tag. For reward deposits without the Reward tag, apply it in bulk using the filter and bulk tag feature. Check Settings to confirm the rewards income toggle reflects your jurisdiction’s tax treatment. Review your dashboard income total and capital gains preview to confirm they look correct after the corrections.

If you are new to Koinly, see our full Koinly review for a complete platform overview. For the broader picture of how Koinly handles DeFi and NFTs, see our Koinly for DeFi and NFTs guide. For plan costs, see our Koinly pricing guide.

Start with Koinly free here — check your DeFi transaction labels and review your warnings before purchasing any report.

Frequently Asked Questions

Why are my Koinly DeFi transactions showing incorrect gains?

The most likely cause is default transaction labels. Without tags, Koinly treats all withdrawals as disposals and all deposits as acquisitions. Staking a token — which sends it to a contract temporarily — appears as a taxable sale. Receiving staked tokens back appears as a new purchase at today’s price. These defaults create false round-trip trades with large apparent gains that you do not actually owe. Fix this by applying Add to Pool to staking deposits and Remove from Pool to unstaking events.

Does Koinly handle DeFi automatically?

Partially. Koinly automatically imports DeFi activity from supported protocols on Ethereum, Binance Smart Chain, Polygon, Avalanche, Solana, and most other EVM chains. For well-supported protocols, liquidity and staking transactions are tagged automatically. For less common protocols, on-chain staking via smart contracts, or accumulating staking pools, manual tagging is often required. Centralised exchange staking is generally handled automatically when connected via API.

What tag should I use for staking in Koinly?

Three tags are involved: Add to Pool for the initial staking deposit (sending tokens to the contract), Remove from Pool for the unstaking event (receiving tokens back), and Reward for the staking reward income deposits. The Add to Pool and Remove from Pool tags prevent the staking activity from creating false taxable events by routing the tokens through Koinly’s hidden pool wallet. The Reward tag ensures reward income is correctly separated from capital acquisitions.

Should I turn on “Treat rewards as income” in Koinly?

In most jurisdictions — including the US, UK, Australia, and Canada — staking rewards are treated as income at the time of receipt, so the toggle should generally be ON. When ON, Koinly records the fair market value of each reward as income and sets the cost basis of the reward tokens to that same value. When OFF, no income is recorded and the cost basis is zero, meaning the entire sale proceeds become a capital gain when you eventually sell. Confirm the correct setting for your specific jurisdiction with a qualified tax professional before changing it.

What is the difference between Add to Pool and Swap in Koinly?

Add to Pool moves tokens to Koinly’s hidden pool wallet without triggering a disposal — preserving the original cost basis for when the tokens return. Swap transfers the cost basis from one asset to a new asset without realising a gain, designed for token migrations where the same value moves from one token to another. Using Swap on staking deposits is incorrect and will produce wrong cost basis figures on the staked asset.

How do I fix LP farming transactions in Koinly?

For supported protocols since February 2024, LP farming is handled automatically with Liquidity In and Liquidity Out tags. If LP transactions imported without these tags, apply Add to Pool to LP deposits (including the LP token received) and Remove from Pool to LP exits (both the LP token withdrawal and the assets received back). Any farming rewards received on top of the LP position should be tagged as Reward. The amount returned on LP exit may differ from the amount deposited due to impermanent loss or fee income — Koinly handles this difference when the correct pool tags are applied.

Why does Koinly show “Missing purchase history” on my staked tokens?

This warning appears when Koinly sees a disposal of an asset it has no acquisition record for. On staked tokens, one common cause is when the staking deposit was not tagged as Add to Pool — so Koinly treated it as a disposal, removing the cost basis record from the asset pool. When the tokens return from unstaking, Koinly has no record of how you originally acquired them.

Applying Add to Pool to the original staking deposit moves the transaction into the pool wallet system. The subsequent Remove from Pool on unstaking then correctly returns the tokens with their original cost basis. Other causes include importing wallets out of order or missing earlier purchase history — check your full import history if the warning persists after applying the pool tags.

What if I am unsure whether my DeFi activity is taxable in my country?

DeFi tax treatment varies significantly by jurisdiction and by transaction type, and official guidance has not fully caught up with the pace of DeFi innovation. In many countries, liquidity pool activity, wrapped token swaps, and complex multi-step DeFi interactions do not yet have clear official rulings.

Koinly applies its best interpretation of common tax treatments, but correct tagging of edge cases — particularly cross-chain bridges, protocol migrations, and concentrated liquidity positions — often requires a qualified crypto tax professional to review. If you are uncertain whether a specific DeFi transaction is taxable in your country, do not apply a tag that removes the gain from your report without first confirming the tax treatment with a professional.

The Bottom Line

Koinly DeFi transaction labelling is where most investors lose accuracy in their tax reports — not because Koinly is wrong, but because the default labels are conservative defaults that assume the simplest interpretation of every blockchain event. Correcting them is straightforward once you know which tag to apply to which transaction type.

One important caveat: applying the correct Koinly tags means your report reflects the most common tax treatment for each transaction type. It does not mean the report is guaranteed to be correct for your specific jurisdiction or situation. DeFi tax rules are still evolving in most countries, and some transaction types — cross-chain bridges, protocol migrations, complex LP positions — may have different tax treatment depending on local guidance. Use Koinly’s corrections as the starting point, not the final word, and review your report with a qualified crypto tax professional if you have material DeFi activity.

Work through your warnings filter first. Apply Add to Pool and Remove from Pool to staking activity. Apply Reward to income deposits. Check your rewards income toggle matches your jurisdiction. Then review your dashboard figures. An accurate DeFi tax report in Koinly is entirely achievable — it just requires these corrections before you generate the report, not after.

Ready to check your DeFi labels? Start with Koinly free here — review your transaction tags and warnings before purchasing any plan.

Related reading:









Similar Posts