> ## Content Index
> Fetch the complete content index at: https://altcoininvestor.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# How Koinly Handles DeFi Yield Tax Reporting
- URL: https://altcoininvestor.com/koinly-crypto-tax-defi-yield-lp-auto-compounding/
- Published: 2026-11-13T17:07:17.000Z
- Updated: 2026-11-13T17:07:17.000Z
- Description: Koinly automates exchange trades well but struggles with DeFi yield. Here's which protocols sync correctly, where manual CSV imports are required, and how it handles auto-compounding tokens.
- Author: Emma Delacroix
- Tags: Crypto Tax Tips, DeFi, Crypto Basics, Intermediate, Crypto Investing

## What Koinly Imports Automatically and What It Misses

![Blockchain transaction records next to CSV template showing LP token data fields](https://cdn.getmidnight.com/13448471d89a9cd8d7f71026a0334ec8/2026/11/koinly-defi-tax-reporting-screen-after-h2-1.webp)

Koinly supports over 1,000 direct integrations and claims coverage for 7,200+ DeFi protocols. That number measures technical compatibility, not accuracy. Most exchange trades import cleanly through API connections to Coinbase, Binance, Kraken, Bybit, and Gemini. The gaps cluster around DeFi yield.

The cause is structural.

Centralized exchanges generate discrete transaction records for every trade, deposit, and withdrawal. DeFi protocols, especially those involving liquidity pools, auto-compounding vaults, and rebasing tokens, often update balances through smart contract state changes rather than blockchain transactions. Koinly sees the transaction. It does not always see the yield event embedded in that transaction, and it rarely calculates cost basis correctly for wrapped or derivative yield tokens.

Here is what works and what breaks.

Most V2-style LP protocols are supported automatically as of February 2024\. Koinly tags staking transactions as "Add to Pool" and unstaking transactions as "Remove from Pool" across Uniswap, Sushiswap, Balancer, PancakeSwap, Cream, and Value when you create a new wallet for Ethereum, Binance Smart Chain, or Polygon. The detection relies on recognizing standard LP token contract patterns.

Auto-compounding tokens fail more frequently.

Lending protocols like Aave send you a receipt token (aUSDC, aDAI, aWBTC) representing your staked asset. These tokens are self-appreciating, meaning the amount of underlying asset associated with the receipt token increases over time. Since those rewards accrue through a state change on the smart contract rather than a blockchain transaction, Koinly does not import them automatically. You need to add the missing amount as deposits tagged as rewards.

That manual step creates two problems. First, determining the precise reward amount requires querying the smart contract or using a block explorer to compare your token balance at the start and end of the tax period. Second, each manual deposit entry requires a timestamp and a fair market value in USD at the time of receipt, which most users do not have readily available.

Koinly updated its stETH handling in 2026 to import accrued stETH rewards on Ethereum blockchain automatically. This is a partial fix. The update addresses rebasing tokens (stETH, aTokens) that change balance with no transfer. It does not address non-rebasing wrappers like wstETH, which keep the balance fixed and carry value in an increasing exchange rate or index. Koinly must classify whether a yield token is rebasing or a wrapper, and that classification determines how cost basis is calculated.

The minimum classification needed: stETH is rebasing; wstETH is a wrapper with rate; aTokens are rebasing with index-based accrual; sfrxETH is a wrapper with ERC-4626 rate; gOHM is a wrapper. Koinly handles stETH correctly as of 2026\. For the others, manual verification is required.

## LP Token Cost Basis Calculation and NULL Placeholder Risk

![Detailed spreadsheet showing LP token cost basis calculation with manual verification steps for tax reporting](https://cdn.getmidnight.com/13448471d89a9cd8d7f71026a0334ec8/2026/11/koinly-defi-tax-reporting-screen-after-h2-2.webp)

Liquidity pool tokens present a different failure mode. When you deposit two assets into a Uniswap or Curve pool, you receive an LP token representing your proportional share of the pool. That LP token has a cost basis equal to the combined USD value of the assets you deposited. When you withdraw, the LP token is burned and you receive back two assets, often in different proportions than you deposited. The tax obligation depends on the fair market value of the assets received compared to the cost basis of the LP token burned.

Koinly's automatic detection of pool tokens reduces manual overhead when processing hundreds of LP interactions per tax period. The system recognizes standard LP token contracts and attempts to assign cost basis based on the value of the deposited assets at the time of the "Add to Pool" transaction.

Here is where it breaks.

Obscure LP tokens are replaced with NULL\* placeholders during CSV import, which can zero out cost basis. This happens most frequently with newer protocols, cross-chain bridges, or tokens that do not match Koinly's internal naming conventions. The [crypto tax software comparison](https://altcoininvestor.com/crypto-tax-software/) shows this is not unique to Koinly, but the placeholder replacement is particularly aggressive in their CSV import logic.

Test case: import a Uniswap V3 concentrated liquidity position or a Balancer weighted pool token across Arbitrum or Base. Check whether the imported transaction shows a cost basis for the LP token. If the token name appears as NULL\*, the cost basis is zero, which means any withdrawal from that pool will be calculated as 100% capital gain rather than the correct gain relative to your deposit value.

The fix requires manual editing. You need to identify the transaction where the NULL\* placeholder was created, locate the original deposit transaction on a block explorer, note the USD value of the assets deposited, and manually edit the Koinly transaction to assign that value as the cost basis for the LP token. This is tedious for a single position. For users with 10-20 LP positions across multiple chains, it becomes a multi-hour reconciliation task.

Neither CoinTracker nor Koinly handles the nuance of swapping ETH for stETH via Lido reliably across all protocols without manual review. Swapping ETH for stETH is arguably a taxable exchange, since stETH rebases independently and can trade at a discount or premium to ETH. The tax software does not consistently flag this as a taxable event, which can lead to underreported income if stETH appreciates relative to ETH during the holding period.

## Chain-Specific Sync Requirements and Missing Transactions

![User adding wallet addresses for Ethereum, Arbitrum, Polygon, and Base chains in tax software](https://cdn.getmidnight.com/13448471d89a9cd8d7f71026a0334ec8/2026/11/koinly-defi-tax-reporting-screen-after-h2-3.webp)

Each blockchain is a separate sync in Koinly. If DeFi transactions are missing, the usual causes are that the wallet address was not added, the specific chain (Arbitrum, Base, Polygon, Avalanche) was not synced, or the protocol used contract interactions Koinly could not auto-label.

The solution: add every chain the wallet touched and re-sync to pull the missing activity.

This is not automatic. When you connect a wallet address, Koinly does not scan all chains by default. You must manually select each chain where that address has activity. For users who bridge assets across Ethereum, Arbitrum, Optimism, Base, and Polygon, that means five separate wallet entries for the same address, each syncing a different chain.

Missing transactions cluster around DeFi activity because liquidity pool, staking, and bridged-token events do not import cleanly. These often need both an unsupported-chain manual entry and a labeling decision. Koinly will import the transaction as "Unknown" if it cannot match the contract interaction to a known protocol pattern. You must then label it as "Add to Pool," "Remove from Pool," "Staking Reward," or another category to ensure it is treated correctly for tax purposes.

The 2026 update improved automatic categorization of DeFi transactions across Ethereum, Solana, Arbitrum, and Base. The improvement is measurable but incomplete. Curve pools on Avalanche, Frax staking derivatives, and Olympus gOHM wrappers still require manual labeling in most cases.

## Protocols That Sync Cleanly Versus Those Requiring Manual Fixes

Auto-detected protocols include Uniswap, Sushiswap, Balancer, PancakeSwap, Cream, and Value when syncing ETH, BSC, or Polygon wallets. These are recognized automatically because they follow standard LP token and staking contract patterns that Koinly's indexer has been trained to detect.

Manual fixes are often required for Olympus (gOHM), Frax (sfrxETH), Yearn auto-compounding vaults, Convex reward claims, and any protocol that reinvests yield across multiple contracts. The detection failure happens when the protocol bundles multiple actions into a single transaction (e.g., claiming rewards, swapping to another token, and re-staking) or when the yield accrues off-chain and is only reflected in a periodic rebase or index update.

Very new or niche protocols may not auto-import at all. Those transactions can be added manually or via CSV. Koinly provides a CSV template for manual imports, but the template requires fields for transaction type, date, amount, asset, cost basis, and fee. Most DeFi protocols do not export data in this format, which means you need to query the blockchain directly or use a third-party tool like Etherscan, Arbiscan, or Polygonscan to retrieve the transaction details.

One thing worth noting: the CSV import logic replaces unrecognized LP currencies (e.g., LP\_MIR\_UST, GAMM-2) with NULL\* placeholders to allow the import to proceed. This prevents import errors but creates the cost basis problem described earlier. The intent is to avoid blocking the import. The result is silent data loss that must be caught during manual review.

### Verification Checklist Before Filing

Import a staking reward transaction from Lido or Curve and verify cost basis. Check whether the reward appears as a separate income event with a USD value at the time of receipt. If the transaction is labeled "Unknown" or shows zero cost basis, manual correction is required.

Deposit into an auto-compounding vault (Yearn, Convex, Aave) and check if daily compounding is tracked. Most auto-compounding vaults do not generate daily transactions. Koinly will only show the initial deposit and final withdrawal unless you manually add intermediate reward events. This undercounts taxable income if you do not manually log the compounding.

Test an LP position that was bridged across chains. Bridging often creates two transactions: a burn on the source chain and a mint on the destination chain. Koinly may treat these as separate events rather than a single non-taxable transfer, which can create phantom gains or losses. You need to label both transactions as "Bridge" to link them.

Compare Koinly's calculated gains to on-chain sourced cost basis from block explorers. This is the final verification step. For each significant position, pull the transaction history from Etherscan or the relevant block explorer, calculate the cost basis manually, and compare it to Koinly's output. Discrepancies of more than 5% indicate a detection or labeling error that must be corrected before filing.

## Cost Basis Methods and Their Impact on DeFi Yield

Koinly handles multiple cost basis methods: FIFO, LIFO, HIFO, and Specific Identification. The choice of method can significantly impact your tax bill, especially for DeFi yield positions where tokens are received and sold in multiple batches throughout the year.

FIFO (First In, First Out) assumes the oldest tokens are sold first. This is the default method in most jurisdictions and typically results in higher capital gains if the asset has appreciated over time.

LIFO (Last In, First Out) assumes the most recently acquired tokens are sold first. This can reduce short-term capital gains by matching recent purchases with sales, but it is not allowed in all countries.

HIFO (Highest In, First Out) sells the tokens with the highest cost basis first, minimizing capital gains. This is the most tax-efficient method for assets that have appreciated, but it requires detailed record-keeping to identify the highest-cost lots.

Specific Identification allows you to choose exactly which tokens are sold in each transaction. This provides maximum flexibility but requires manual tracking of each lot.

For DeFi yield positions, the cost basis method matters most when you receive staking rewards or LP fees in the same token over multiple days or weeks and then sell a portion of your holdings. If you received 100 USDC in yield across 20 transactions and then sold 50 USDC, FIFO and LIFO will produce different taxable income amounts because the USDC price may have fluctuated between receipt dates.

Koinly allows you to select the method globally or on a per-asset basis. The selection is made in the settings menu before generating the tax report. Once you file your taxes using a specific method, you must continue using that method in future years unless you receive IRS approval to change.

The [cost basis calculation guide](https://altcoininvestor.com/crypto-taxes-calculator-defi-yield-income-cost-basis/) provides detailed examples of how each method affects DeFi yield income classification.

## CSV Import Process for Unsupported Protocols

When a protocol is not auto-detected, the CSV import is the fallback. Koinly's CSV template requires the following fields: Date, Sent Amount, Sent Currency, Received Amount, Received Currency, Fee Amount, Fee Currency, Net Worth Amount, Net Worth Currency, Label, Description, TxHash.

The Label field determines tax treatment. Options include "Add to Pool," "Remove from Pool," "Staking Reward," "Lending Interest," "Airdrop," "Mining," "Gift," "Lost," "Stolen," and others. Incorrect labeling changes the tax outcome. Staking rewards are ordinary income when received. LP fee withdrawals may be capital gains or ordinary income depending on pool type and jurisdiction.

The Net Worth Amount field is optional but critical for DeFi yield. It allows you to specify the USD value of the transaction at the time it occurred, which becomes the cost basis for received tokens. If left blank, Koinly uses its internal price database, which may not have accurate pricing for obscure tokens or may use end-of-day pricing rather than the exact timestamp of the transaction.

For auto-compounding vaults, you need to create a CSV entry for each compounding event. If a vault compounds daily, that is 365 entries per year per position. Most users do not have this data readily available. The alternative is to treat the vault as a black box and only record the deposit and withdrawal, but this undercounts income by the amount of compounding that occurred during the holding period.

The TxHash field links the CSV entry to an on-chain transaction. This is useful for audit defense because it provides verifiable proof of the transaction. For auto-compounding events that do not have an on-chain transaction (because they are smart contract state changes), leave this field blank and use the Description field to note the protocol and vault address.

## Pricing Tiers and Feature Access

Koinly offers four paid plans: Newbie ($49/year, 100 transactions), Hodler ($99/year, 1,000 transactions), Trader ($179/year, 3,000 transactions), and Pro ($279/year, 10,000 transactions). All paid plans include the same features: Form 8949, international tax reports, DeFi and NFT support, margin trade tracking, audit reports, and TurboTax/TaxAct exports. For users exceeding 10,000 transactions, Koinly offers custom enterprise plans.

The free tier lets you import all your transactions and preview your tax summary, but you need a paid plan to download official tax forms like Form 8949 and Schedule D. This preview is useful for verifying that all transactions imported correctly before committing to a paid plan.

For DeFi users, transaction count is the binding constraint. A single LP deposit can generate 3-5 transactions (token approvals, deposit, LP token receipt). An auto-compounding vault that harvests and reinvests daily generates 365+ transactions per year. Users with 5-10 active DeFi positions often exceed 1,000 transactions annually, pushing them into the Trader or Pro tier.

Starting in 2026, exchanges are required to issue Form 1099-DA reporting your crypto transactions directly to the IRS. This does not eliminate the need for tax software like Koinly, because 1099-DA only covers centralized exchange activity. DeFi yield, staking rewards, LP fees, and on-chain transactions are not reported on 1099-DA and still require manual tracking and reporting. The [US tax treatment guide](https://altcoininvestor.com/crypto-taxes-usa-yield-staking-lp-lending/) covers how different yield types are classified under current IRS guidance.

## Reconciliation Workflow: On-Chain Data Versus Koinly Output

The final step before filing is reconciliation. Koinly's output is a starting point, not a finished product. For DeFi positions, you need to verify that every deposit, withdrawal, reward claim, and compounding event was captured correctly.

Start by exporting Koinly's transaction list as a CSV. Sort by date and filter for DeFi-related labels (Add to Pool, Remove from Pool, Staking Reward, Lending Interest). Cross-reference each transaction against your on-chain transaction history from Etherscan, Arbiscan, or the relevant block explorer.

Look for missing transactions. If you claimed a staking reward on-chain but it does not appear in Koinly, add it manually via CSV import. If an LP withdrawal shows in Koinly but the amounts or token names are incorrect, edit the transaction to match the on-chain data.

Verify cost basis for LP tokens. For each "Remove from Pool" transaction, check that the LP token being burned has a cost basis that matches the value of the assets you originally deposited. If the cost basis is zero or NULL\*, locate the original deposit transaction and manually assign the correct value.

Check reward income classification. Staking rewards should be labeled as ordinary income, not capital gains. LP fees may be ordinary income or capital gains depending on whether they were auto-compounded or claimed separately. The classification determines which tax form the income appears on (Schedule 1 for ordinary income, Schedule D for capital gains).

Compare total reported income to your own records. If you tracked your yield positions manually (using a spreadsheet or [manual logging system](https://altcoininvestor.com/how-to-track-defi-yield-for-taxes/)), your total reported income should match within a few percent. Large discrepancies indicate missing transactions or incorrect categorization.

For users with positions across multiple chains, repeat this process for each chain. Ethereum, Arbitrum, Optimism, Base, Polygon, and Avalanche all require separate reconciliation because they are synced separately in Koinly.

## Common Failure Modes and How to Detect Them

Auto-compounding detection gap: Aave aTokens, Yearn vaults, and Convex positions often fail to import daily compounding events. The symptom is that your reported yield income is significantly lower than the APY you know you earned. The fix is to query the smart contract for your balance at the start and end of the tax year, calculate the difference, and manually add it as a reward.

LP token basis loss: Obscure LP tokens replaced with NULL\* during import result in zero cost basis. The symptom is that every LP withdrawal shows a 100% gain, which is incorrect if you deposited assets with value. The fix is to manually edit the deposit transaction to assign the correct cost basis to the LP token.

Missing chain syncs: Transactions on Arbitrum, Base, or Polygon do not appear because the wallet was only synced for Ethereum. The symptom is that your transaction count is much lower than expected, and known DeFi positions do not appear. The fix is to add the same wallet address for each chain where it has activity and re-sync.

Rebasing versus wrapper misclassification: Koinly treats wstETH as a rebasing token instead of a wrapper, or vice versa. The symptom is that your reported income for stETH or wstETH holdings does not match the staking rewards you received. The fix is to manually verify the token type and, if necessary, edit the transactions to reflect the correct yield accrual method.

Bridge transactions treated as taxable trades: Bridging assets from Ethereum to Arbitrum creates a burn and a mint. Koinly treats these as separate taxable events (a sale on Ethereum and a purchase on Arbitrum) instead of a non-taxable transfer. The symptom is phantom capital gains or losses at the time of the bridge. The fix is to label both transactions as "Bridge" to link them as a single non-taxable event.

## What to Do Next

Connect your wallets and exchanges to Koinly. Start with the free tier to verify that automatic import works for your transaction history. For each wallet, add it separately for every blockchain where it has activity.

Review the imported transactions. Filter by DeFi-related labels and check for NULL\* placeholders, zero cost basis, or "Unknown" labels. Correct these before proceeding.

Add missing DeFi yield manually. If you know you earned staking rewards or LP fees that did not import, use the CSV template to add them. Include the date, amount, token, and USD value at the time of receipt.

Reconcile against on-chain data. Export Koinly's transaction list and compare it to your blockchain transaction history. Fix discrepancies before generating the final tax report.

Select your cost basis method. FIFO is the default and is required in some jurisdictions. HIFO minimizes capital gains if allowed in your country. Make this selection in the settings menu before generating reports.

Generate the tax report and review it. Check that total income, total capital gains, and total transaction count align with your expectations. If anything looks incorrect, return to the transaction list and fix the underlying data.

Export to TurboTax or TaxAct. Koinly generates the necessary forms (8949, Schedule D) and provides export files compatible with major tax filing software. If filing manually, download the PDF reports and attach them to your return.

Save your Koinly account for next year. Transaction history carries over, and cost basis lots are maintained across tax years. Starting early in the next tax year (January or February) makes the process faster because you can import and reconcile transactions as they occur rather than waiting until filing season.

For users with complex multi-protocol positions, consider [alternative tax software](https://altcoininvestor.com/summ-crypto-tax/) that offers deeper DeFi indexing. Summ tracks 2,300+ DeFi protocols with on-chain indexing and may capture auto-compounding events that Koinly misses.

## The Takeaway

Koinly handles centralized exchange trades accurately. DeFi yield requires manual verification and protocol-specific fixes. Auto-compounding tokens, LP positions, and cross-chain bridges are the highest-risk areas for missing income or incorrect cost basis. The verification workflow (on-chain reconciliation, NULL\* placeholder correction, chain-specific syncing) reduces audit risk and prevents overpayment on capital gains.

Accurate tax basis calculation prevents overpaying on gains or triggering audit flags from underreported income. The difference between automated import and verified import is often 10-20% of reported income for users with active DeFi positions. That gap widens when auto-compounding vaults or rebasing tokens are involved.

The patterns described here are current as of 2026\. Protocol coverage and auto-detection logic improve with each update, but the structural limitations (smart contract state changes versus blockchain transactions) remain. Manual verification will continue to be necessary for users who hold yield-generating DeFi positions.

## Frequently Asked Questions

### Does Koinly automatically track auto-compounding DeFi yield like Aave aTokens?

No. Auto-compounding tokens like aUSDC and aDAI accrue yield through smart contract state changes, not blockchain transactions. Koinly does not import these automatically. You must query the smart contract or use a block explorer to calculate the difference between your starting and ending balance, then manually add that amount as a reward deposit with the correct timestamp and USD value.

### Why do some of my LP tokens show as NULL\* in Koinly?

Koinly replaces unrecognized LP token names with NULL\* placeholders during CSV import to prevent import errors. This often happens with newer protocols, cross-chain bridges, or tokens that do not match Koinly's naming conventions. The placeholder prevents the import from failing, but it sets the cost basis to zero, which will incorrectly calculate 100% capital gains when you withdraw from the pool. You must manually edit the deposit transaction to assign the correct cost basis.

### How do I sync DeFi transactions from Arbitrum or Polygon in Koinly?

Each blockchain is a separate sync in Koinly. When you add a wallet address, you must manually select each chain where that address has activity. If you used the same address on Ethereum, Arbitrum, Optimism, Base, and Polygon, you need to add that address five separate times, once for each chain. After adding, re-sync to pull the missing transactions. Missing DeFi activity is usually caused by not syncing the correct chain.

### What cost basis method should I use in Koinly for DeFi yield?

FIFO (First In, First Out) is the default and is required in many jurisdictions. HIFO (Highest In, First Out) minimizes capital gains by selling the highest-cost tokens first and is allowed in the US. For DeFi yield positions where you receive the same token in multiple batches, HIFO typically produces the lowest tax bill. You can select the method globally in Koinly's settings before generating your tax report, but you must use the same method consistently across tax years.

### Can Koinly handle stETH and wstETH correctly for tax reporting?

Koinly updated its stETH handling in 2026 to import accrued stETH rewards automatically on Ethereum. However, it does not always correctly classify the difference between rebasing tokens (stETH, aTokens) and non-rebasing wrappers (wstETH, sfrxETH). Rebasing tokens change balance with no transfer, while wrappers keep balance fixed and accrue value through an increasing exchange rate. You must manually verify that Koinly classified the token type correctly and edit transactions if needed.

Tool mentioned above

Koinly

Koinly imports from 800+ exchanges and wallets and handles the DeFi cases most tools get wrong - rebasing tokens, LP positions, staking rewards.

[Try Koinly](https://koinly.io/?via=F6E2E35A&utm%5Fsource=affiliate) 

We may earn a commission if you sign up through this link, at no cost to you. It does not change what gets recommended.

The Weekly Yield Report

You have just reviewed the specific protocols Koinly auto-imports, the CSV fixes required for LP tokens, and the cost basis methods available. That coverage will expand and those methods will remain, but the manual verification steps will not change.

Every Thursday: where crypto yield actually is - stablecoins, liquid staking and DeFi lending, with the risk named next to the rate and what changed since last week.

[Get it free every Thursday](#/portal/signup) 

Free. No trade calls, no allocations, no hype. Unsubscribe in one click.