Skip to main content
Here’s something a lot of crypto users don’t realise: the category of a transaction determines whether it’s taxable, how much it’s taxed, and where it shows up in your tax report. Getting this wrong is one of the most common reasons a tax report looks off. This article explains how KoinX decides a transaction’s category, how to fix anything that’s been miscategorised, and walks through the four scenarios that cause the most confusion.

AI Summary

  • KoinX auto-categorises transactions using exchange API data, on-chain patterns, and your Tax Settings
  • Getting categories right is the single most important thing you can do before generating your tax report
  • Use the Label Transaction option to fix any miscategorised entry in seconds

How KoinX Decides a Transaction’s Category

KoinX uses three signals to auto-categorise every transaction: 1. The exchange API label Most exchanges tag their own transaction data: buy, sell, deposit, withdrawal, expense. This label is sent directly to KoinX. When this data is present, KoinX trusts it. 2. On-chain data patterns For blockchain wallets (MetaMask, Ledger, Phantom, etc.), KoinX reads the smart contract interaction to figure out what happened. A Uniswap swap looks different from a simple ETH transfer at the contract level. 3. Your Tax Settings The global toggles you’ve set, like “Treat Airdrops as Income” or “Treat Reward as Income”, tell KoinX how to handle entire categories of transactions across all your accounts.

Transaction Types and Labels: What Each One Means

KoinX uses two distinct concepts: Transaction Type and Label. The Type is the broad category (set by the exchange or blockchain data). The Label is a more specific tag you apply to give it meaning. Labels available change depending on the Type. The 6 transaction types in KoinX are:
TypeWhat It Is
DepositCrypto arriving in your account, includes Airdrop, Borrow, Collateral Unlock, Consultancy Income, External Deposit, Fixed Deposit Unlock, Funding Interest, Futures Realised Profit, Lend Settlement, Mining Income, Options Realised Profit, Receive from Bridge, Receive from Pool, Receive Loan, Refund, Remove Liquidity, Reward, Salary, Settlement In, Staking Interest, Unstake
WithdrawalCrypto leaving your account, Add Liquidity, Borrow Settlement, Collateral Lock, Donation, External Withdraw, Fixed Deposit Lock, Funding Fee, Futures Realised Loss, Lend, Lost, Options Realised Loss, Repay Loan, Send to Bridge, Send to Pool, Settlement Out, Stake
TradeCrypto-to-crypto swap or spot trade on an exchange
ExpenseBrokerage or Gas Fee, Consultancy Expense, Futures Fee, Margin Interest Payment, Mining Expense, Options Fee
Futures TradeDerivatives / futures contract activity
Margin TradeMargin trading activity
The Label is what you apply within a Type to tell KoinX what kind of deposit, withdrawal, or trade it actually is, for example, labelling a Deposit as an Airdrop, or a Withdrawal as a Transfer. This is what drives the tax treatment.

How to Change a Transaction’s Category

1

Go to Transactions and use the Types or Labels filter to find miscategorised entries

Or scroll through and look for anything that seems off.
2

Click the three-dot menu (···) on the transaction

Screenshot 2026 03 06 200750 2
3

Select Label Transaction

Screenshot 2026 03 06 201312 1
4

Pick the correct category from the list

5

The transaction updates immediately and the system reconciles your data instantly


Internal Transfers: The Most Common Source of Confusion

Moving crypto from your Binance account to your MetaMask wallet is a Transfer: not a sale. Nothing was sold. No taxable event happened. You’re just moving your own assets. But KoinX sometimes misclassifies this because it needs to see both sides of the transfer to confirm it’s an internal move:
  • The withdrawal from Binance (your exchange)
  • The deposit into MetaMask (your wallet)
If only one side is visible (because one of those accounts isn’t connected to KoinX), the deposit looks like a new acquisition and the withdrawal looks like a disposal. Both will be taxed incorrectly. How to fix it: Connect both the sending and receiving accounts to KoinX. Once both sides sync, KoinX automatically matches them as an internal transfer and removes the incorrect taxable events. For transfers that still aren’t matching automatically, go to Tax Settings → Internal Transfer Settings to adjust the matching configuration. Here’s what each setting controls:
  • Time Window for Automatic Matching: The maximum time gap (in minutes) between a withdrawal and deposit for KoinX to consider them a matched pair. Default is 120 minutes. Example: withdrawal at 2:00 PM and deposit at 4:00 PM, matched if the window is 120 minutes.
  • Maximum Amount Difference (%): The allowed percentage difference between the withdrawal and deposit amounts, to account for gas fees or slippage. Default is 5%. Example: 100 MATIC withdrawn, 96 MATIC deposited, valid at 5% threshold. 100 withdrawn, 85 deposited. Not valid, exceeds limit.
  • Strict Timestamp Ordering: When enabled, the withdrawal must occur before the deposit for KoinX to match them. Example: withdrawal at 2:00 PM → deposit at 2:30 PM = valid. Deposit at 2:00 PM → withdrawal at 2:10 PM = not valid.
  • Reverse Timestamp Threshold: Only active when strict ordering is disabled. Defines how many minutes a deposit can appear before a withdrawal and still be matched. Example: deposit at 1:58 PM → withdrawal at 2:00 PM = valid if the reverse limit is 5 minutes.

The 4 Most Common Miscategorisation Scenarios

Scenario 1: Airdrop not labelled correctly

What happened: Tokens were airdropped into your wallet. KoinX correctly records this as a Deposit (which is the right transaction type for any incoming crypto). But the Label may not have been set to Airdrop, which matters for tax treatment. Why it matters: An airdrop is taxable income in most jurisdictions at the time of receipt. Without the Airdrop label, it won’t be treated correctly in your income report. How to fix it:
1

Find the transaction (it will show as a Deposit)

2

Three-dot menu → Label Transaction → select Airdrop as the label

The transaction type stays as Deposit, only the label changes.
3

Check Tax Settings → Treat Airdrops as Income, make sure this toggle is on so future airdrops are labelled correctly


Scenario 2: Staking reward showing as a Deposit without the right label

What happened: Your staking reward arrived in your wallet and KoinX logged it as a Deposit, which is technically correct for the type, but the label may not reflect that it’s a staking reward. Why it matters: Staking rewards are taxable income at the time they’re received. Without the right label, the reward won’t appear in your income report correctly. How to fix it:
1

Find the staking reward transaction

2

Three-dot menu → Label Transaction → select Staking as the label

3

Check Tax Settings → Treat Reward as Income, should be toggled on


Scenario 3: Staking and Unstaking

Staking involves two separate transactions: locking your crypto into a pool, and getting it back later. KoinX has specific labels for both:
  • Sent to Pool: apply this to the original transaction where you staked (sent crypto into the staking protocol)
  • Received From Pool: apply this to the transaction where you received your assets back on unstaking
You must label the staking deposit as Sent to Pool first. The Received From Pool label won’t work correctly if the parent transaction hasn’t been marked.
How to fix it:
1

Find the transaction where you originally staked your crypto

2

Three-dot menu → Label Transaction → select Sent to Pool

3

Find the transaction where you received your assets back

4

Three-dot menu → Label Transaction → select Received From Pool


Scenario 4: P2P trade showing as a Deposit

What happened: You bought crypto from someone directly (peer-to-peer) and the coins just appeared in your wallet. KoinX has no exchange record of the purchase, so it logs the incoming crypto as a deposit. Why it matters: A deposit has no cost basis attached to it. A buy creates a cost basis, which you’ll need when you eventually sell. How to fix it:
1

Find the incoming P2P transaction

2

Three-dot menu → Label Transaction → select Buy

3

Then use Edit to enter the price you paid for the crypto at the time of the P2P trade


Common Issues / Edge Cases

Labels and warnings solve different problems. A label tells KoinX what kind of transaction it is. A warning tells you that some data is missing or inconsistent. If you relabelled a transaction but the warning is still showing, it usually means there’s still a missing price, a ₹0 cost basis, or an unmatched transfer. Check the Transaction Warnings & Errors article to resolve it.
After relabelling, you need to regenerate your Tax Report for the changes to appear in the final numbers. Also check that the Treat Reward as Income toggle is enabled in Tax Settings. Both need to be correct for the reward to show up in your income section.

Frequently Asked Questions

In most jurisdictions, airdrops received are treated as income at the time of receipt. KoinX follows this by default. If your jurisdiction treats airdrops differently, speak to your CA and adjust the Tax Settings toggle accordingly.
Use the Label Transaction option and select Refund. Since refunds can have nuanced tax treatment, check with your CA to confirm the right approach for your situation.
KoinX can’t always identify crypto loan events from transaction data alone. Use Label Transaction and select Receive Loan for the incoming crypto, and label the repayment transaction as Loan Repayment. In Tax Settings, check that Treat Loan Repayment as Sale is toggled off. It should be off for standard loan arrangements.
Changing a label updates the transaction, but your previously generated tax report is not retroactively updated. You’ll need to regenerate your Tax Report after making label corrections to see the updated numbers.
Last modified on March 13, 2026