Last updated: 2026
Author: EDITORIAL TEAM
Affiliate disclosure: This page may contain links to cryptocurrency exchanges, accounting software, security services or tax-compliance tools. We may receive a commission when a reader uses an eligible link. Commercial relationships do not change the formulas, risks, limitations or tax explanations presented in this guide.
Important tax notice: This crypto tax calculator is an educational estimation tool. It is not a substitute for a Chartered Accountant, tax lawyer or personalised professional advice. Indian tax rules, return forms, reporting procedures and interpretations can change. Always reconcile calculator results with your exchange statements, wallet records, AIS, Form 26AS and the applicable Income Tax Return before filing.
Quick Answer
A basic crypto tax calculator for India should perform two separate calculations:
- Calculate taxable income from each disposal of a Virtual Digital Asset.
- Track the TDS deducted from the transaction value separately.
For a straightforward profitable transaction:
Taxable VDA income = Sale consideration − Cost of acquisition
If the result is negative, the calculator should normally report the taxable amount for that transaction as zero rather than using the loss to reduce another profitable VDA transaction.
Taxable gain for transaction = MAX(0, Sale consideration − Cost of acquisition)
The base tax estimate is:
Base VDA tax = Total taxable VDA income × 30%
Where no surcharge applies:
Health and Education Cess = Base VDA tax × 4%
Gross estimated tax = Base VDA tax + Cess
This produces an effective rate of 31.2% on taxable VDA income before considering any applicable surcharge.
TDS is calculated separately:
Estimated TDS = Eligible transfer consideration × 1%
The official Income Tax Department’s current VDA guidance states that income from a VDA transfer is taxed at 30% plus applicable surcharge and cess. Only the cost of acquisition is permitted as a deduction under the basic statutory calculation, and VDA losses cannot be set off or carried forward in the ordinary way.
The 1% deduction is not an additional tax rate on profit. It is tax collected in advance from an eligible transfer and may be available as a credit when the return is filed.
Important 2026 Update: Section Numbers Changed from 1 April 2026
Taxpayers may see two sets of section references in 2026.
For transactions governed by the Income-tax Act, 1961, the familiar provisions are:
- Section 115BBH for tax on VDA income.
- Section 194S for TDS on consideration paid for a VDA transfer.
The Income Tax Act, 2025 came into force for relevant events occurring on or after 1 April 2026. Under the new structure, non-salary TDS provisions are consolidated in Section 393. TDS on a VDA transfer appears under Section 393(1), Table, serial number 8(vi).
The Income Tax Department has clarified that the transition changed section numbering and reporting architecture but did not reduce the 1% VDA TDS rate or the associated monetary thresholds. Transactions triggered on or before 31 March 2026 remain governed by the old Act, while relevant payments or credits on or after 1 April 2026 use the new Act.
This guide refers to “Section 194S TDS” where helpful because that expression remains widely used in exchange statements, older records and taxpayer searches. For post-1 April 2026 compliance, however, taxpayers and deductors should use the current section reference required by the e-filing system.
India Crypto Tax Calculator
Use the following fields for each sale, swap, purchase made with crypto or other taxable disposal:
| Calculator input | What to enter |
|---|---|
| Transaction date | Date on which the VDA was transferred |
| Asset disposed | BTC, ETH, SOL, NFT or other relevant VDA |
| Transaction type | Sell, swap, spend, transfer for consideration or other disposal |
| Quantity disposed | Number of tokens or units transferred |
| Sale consideration | Total INR value received or receivable |
| Cost of acquisition | Matched acquisition cost for the units disposed |
| Actual TDS deducted | Amount shown in the exchange statement or tax records |
| TDS applicable | Yes, no or requires professional review |
| Source platform | Exchange, P2P transaction, wallet or other platform |
| Transaction reference | Exchange order ID or blockchain transaction hash |
Calculator Formula 1: Raw Gain or Loss
For each disposal:
Raw result = INR sale consideration − INR cost of acquisition
A positive result is an economic gain. A negative result is an economic loss.
Calculator Formula 2: Taxable Gain
Taxable gain = MAX(0, Raw result)
Example:
Sale consideration: ₹1,20,000
Cost of acquisition: ₹90,000
Raw result: ₹30,000
Taxable gain: ₹30,000
For a loss:
Sale consideration: ₹70,000
Cost of acquisition: ₹90,000
Raw result: −₹20,000
Taxable gain used by calculator: ₹0
Economic loss tracked separately: ₹20,000
The Income Tax Department’s Schedule VDA guidance requires transaction-wise disclosure. It explains that the final amount for a transfer is calculated from consideration less cost of acquisition, a loss is reported as nil, and the positive transaction amounts are totalled for the return.
Calculator Formula 3: Base VDA Tax
After processing all disposals:
Total taxable VDA income = Sum of all positive taxable gains
Base VDA tax = Total taxable VDA income × 30%
Calculator Formula 4: Surcharge
Surcharge cannot be calculated reliably from crypto transactions alone. It may depend on:
- Total taxable income from all sources.
- The taxpayer’s legal status.
- The tax regime selected.
- Applicable surcharge limits.
- Marginal-relief provisions.
- Other special-rate income included in the return.
Where a tax professional has supplied an applicable surcharge rate:
Surcharge = Base VDA tax × Applicable surcharge rate
Do not enter an arbitrary surcharge percentage simply because a calculator asks for one.
Calculator Formula 5: Health and Education Cess
Cess should be calculated on the tax plus surcharge:
Cess = (Base VDA tax + Surcharge) × 4%
Calculator Formula 6: Gross Tax Estimate
Gross VDA tax estimate =
Base VDA tax + Surcharge + Cess
Calculator Formula 7: TDS
Where VDA TDS applies:
Expected TDS = Transfer consideration × 1%
The calculation uses the transaction consideration, not the profit.
A person could therefore have:
- A small trading profit but comparatively high TDS.
- No taxable gain on a transaction but TDS already deducted.
- A large taxable gain with TDS covering only a small part of the final tax.
- Excess TDS that may become available as a credit or refund after the complete return is processed.
Calculator Formula 8: Estimated Filing Position
Estimated balance =
Gross VDA tax
− Verified VDA TDS credit
− Advance tax already paid
− Other eligible tax payments
When the result is positive, it represents an estimated amount still payable before interest or other adjustments.
When it is negative, do not label the amount as a guaranteed refund. Display it as:
Potential excess tax credit, subject to return-wide calculation and verification
A refund depends on the taxpayer’s complete income, deductions, tax payments, outstanding demands and the information accepted during processing.
Why a Normal Profit Calculator Can Produce the Wrong Result
A conventional portfolio tracker usually calculates:
Overall profit = Total sale proceeds − Total purchase cost
That is useful for measuring investment performance, but it may not reproduce the Indian VDA tax calculation.
Suppose a trader completes two disposals:
| Transaction | Gain or loss |
| Bitcoin disposal | +₹40,000 |
| Ether disposal | −₹40,000 |
| Portfolio result | ₹0 |
A conventional profit dashboard reports no overall profit.
A transaction-wise VDA tax calculation may instead produce:
Bitcoin taxable amount = ₹40,000
Ether taxable amount = ₹0
Total taxable VDA income = ₹40,000
At a 30% base rate:
Base tax = ₹12,000
Cess without surcharge = ₹480
Gross estimate = ₹12,480
The taxpayer can therefore have no portfolio-level profit while still having taxable VDA income.
This asymmetry is one of the main reasons to maintain both figures:
- Economic profit or loss, for investment records.
- Taxable VDA income, for tax estimation.
Never overwrite the economic loss. Store it in a separate column so that your accountant can see what occurred, even though the calculator does not use it to reduce another positive VDA amount.
30% Crypto Tax and 1% TDS Are Not the Same Charge
The distinction between tax and TDS is essential.
The 30% Rule
The 30% rate is applied to taxable income calculated from the transfer of VDAs. The official rule permits the cost of acquisition but restricts other expenditure deductions, loss set-off and loss carry-forward. Applicable surcharge and 4% cess are added separately.
The 1% TDS Rule
The 1% TDS mechanism operates on consideration paid or credited for an eligible VDA transfer. It is designed as a withholding and transaction-reporting mechanism, not as a final calculation of the seller’s profit.
Under the current Act, VDA TDS is listed at 1% in Section 393(1), Table, serial number 8(vi). The no-deduction thresholds continue to be ₹50,000 for qualifying individual or HUF payers and ₹10,000 for other payers, based on aggregate consideration during the tax year.
Why TDS May Be Larger Than the Tax on Profit
Consider this simplified example:
Annual eligible sale consideration: ₹10,00,000
Taxable VDA gain: ₹10,000
Estimated TDS: ₹10,000
Base tax: ₹3,000
Cess without surcharge: ₹120
Gross VDA tax estimate: ₹3,120
The expected TDS is higher than the estimated tax on the gain because TDS is based on turnover or consideration, while the 30% tax is based on taxable income.
Any excess is not automatically paid back at the time of the transaction. It must be reconciled through the taxpayer’s return and tax records.
Why TDS May Be Much Smaller Than Final Tax
Eligible sale consideration: ₹1,00,000
Cost of acquisition: ₹20,000
Taxable gain: ₹80,000
Estimated TDS: ₹1,000
Base tax: ₹24,000
Cess without surcharge: ₹960
Gross estimate: ₹24,960
Estimated balance after TDS: ₹23,960
The presence of TDS does not mean the entire tax has been paid.
TDS Thresholds for Crypto Transactions
TDS does not necessarily apply to every rupee of every small transaction.
The no-deduction threshold is generally:
- Up to ₹50,000 of aggregate consideration where the payer is a qualifying individual or HUF covered by the specified-person conditions.
- Up to ₹10,000 of aggregate consideration for other payers.
For the ₹50,000 category, the payer is generally an individual or HUF without business or professional income, or one whose preceding-year turnover or receipts remain within the specified limits. The official threshold guidance retains the ₹1 crore business-turnover and ₹50 lakh professional-receipts tests.
The threshold is based on aggregate consideration during the relevant tax year. It should not be treated as a separate exemption for every trade.
A calculator should therefore include:
Payer category
Aggregate consideration before this transaction
Current transaction consideration
Threshold reached: Yes or No
For exchange trades, use the TDS actually shown by the exchange and reconcile it against official tax records. Do not manually invent TDS simply because the mathematical estimate equals 1%.
Crypto-to-Crypto Swaps
A swap such as BTC to ETH is not merely an internal portfolio rebalance for tax-record purposes. One asset has been transferred in exchange for another.
A practical transaction record should capture:
Asset disposed: BTC
Asset received: ETH
INR fair value of BTC transferred
INR fair value of ETH received
Cost of the BTC units disposed
TDS paid or withheld
Date and time
Exchange order ID or blockchain hash
Price source used for INR valuation
Where consideration is wholly in kind, partly in kind or exchanged for another VDA, the current TDS provisions require the responsible person to ensure that the required tax has been paid before the consideration is released.
Swap Example
Assume:
Cost of BTC units disposed: ₹42,000
INR value received in ETH: ₹60,000
Raw gain: ₹18,000
Taxable gain: ₹18,000
Estimated TDS: ₹600
With no surcharge:
Base tax: ₹5,400
Cess: ₹216
Gross tax estimate: ₹5,616
Less illustrative TDS: ₹600
Estimated balance: ₹5,016
The INR valuation source should be retained. Exchange timestamps, order confirmations and historical price evidence can become important when several platforms show different prices.
For the newly received ETH, the recorded acquisition value should be reviewed with a CA before being used as its cost basis for a later disposal.
Spending Cryptocurrency
Using cryptocurrency to purchase goods or services can involve a transfer of the VDA.
For example:
Original BTC cost: ₹25,000
INR value of product purchased: ₹40,000
Potential disposal consideration: ₹40,000
Raw gain: ₹15,000
Taxable gain: ₹15,000
Do not record the transaction only as an expense. Preserve:
- The merchant invoice.
- INR value of the goods or services.
- Crypto quantity transferred.
- Wallet transaction hash.
- Date and time.
- Cost basis of the crypto units spent.
- Any TDS documentation.
Complex commercial, overseas or non-resident transactions require professional review because the resident-payee VDA TDS rule may not be the only relevant provision.
Transfers Between Your Own Wallets
Moving tokens from an exchange wallet to a self-custody wallet is different from selling the tokens to another person.
A self-transfer may not represent a disposal where beneficial ownership remains unchanged. However, automated tax software can misclassify it when:
- The destination wallet has not been marked as belonging to the taxpayer.
- The receiving platform creates a new deposit address.
- Network fees reduce the quantity received.
- Tokens cross a bridge and return in wrapped form.
- A centralised exchange batches withdrawals.
- Wallet labels are missing.
Maintain a wallet register containing:
Wallet label
Blockchain
Public address
Owner
Purpose
Date first used
Source exchange
Related destination wallets
Mark internal transfers clearly in the CSV and preserve both transaction hashes. Do not allow an automated importer to treat every outbound wallet movement as a taxable sale.
Cost of Acquisition: The Most Important Input
The calculator is only as reliable as the cost entered for the units disposed.
A complete cost record normally needs:
- Purchase date.
- Purchase quantity.
- INR purchase value.
- Exchange order ID.
- INR conversion method.
- Platform statement.
- Matched disposal quantity.
- Remaining quantity after disposal.
Partial Sales
Assume a taxpayer purchased:
0.50 BTC in April for ₹15,00,000
0.50 BTC in June for ₹18,00,000
The taxpayer later sells 0.30 BTC.
The calculator needs a method for determining which acquisition lot supplied the 0.30 BTC. FIFO is frequently used as a practical accounting convention, but a generic calculator should not describe FIFO as a universally mandated statutory rule unless that position has been confirmed for the taxpayer’s circumstances.
Under a FIFO assumption:
Cost per BTC from April lot = ₹30,00,000
Cost of 0.30 BTC disposed = ₹9,00,000
The April lot would then retain 0.20 BTC.
Store the matching method in the file:
Cost matching method: FIFO
Professional review completed: Yes/No
Apply one method consistently. Switching between FIFO, weighted average and manual lot selection simply to produce a lower tax figure creates an unreliable audit trail.
Exchange Fees and Network Fees
The statutory formula permits the cost of acquisition while restricting deductions for other expenditure.
Because the exact treatment of a particular buy-side fee, trading charge, gas fee or platform deduction can depend on how it is characterised, this calculator should use the following conservative design:
- Do not deduct fees automatically as a separate expense.
- Store fees in a dedicated informational column.
- Ask a CA whether a particular amount can properly form part of acquisition cost.
- Retain invoices and exchange statements.
- Do not silently subtract withdrawal fees from taxable gains.
This avoids presenting a disputed fee treatment as settled law.
Indian Crypto Tax CSV Template
Use one row for each transaction, not one row per asset or one row per exchange.
Transaction_ID,Transaction_Date,Asset,Transaction_Type,Quantity,Consideration_INR,Cost_of_Acquisition_INR,Fees_Tracked_Separately_INR,Actual_TDS_INR,TDS_Applicable,Platform,Wallet_or_Order_Reference,Notes
TX10001,2026-04-10,BTC,BUY,0.05000000,0.00,260000.00,250.00,0.00,NO,Example Exchange,ORDER-BTC-001,Purchase lot
TX10002,2026-06-15,BTC,SELL,0.05000000,290000.00,260000.00,300.00,2900.00,YES,Example Exchange,ORDER-BTC-002,Full disposal of April lot
TX10003,2026-05-12,ETH,BUY,1.20000000,0.00,288000.00,200.00,0.00,NO,Example Exchange,ORDER-ETH-001,Purchase lot
TX10004,2026-07-20,ETH,SELL,1.20000000,252000.00,288000.00,250.00,2520.00,YES,Example Exchange,ORDER-ETH-002,Economic loss
TX10005,2026-06-01,SOL,BUY,10.00000000,0.00,120000.00,100.00,0.00,NO,Example Exchange,ORDER-SOL-001,Purchase lot
TX10006,2026-08-05,SOL,SELL,10.00000000,150000.00,120000.00,150.00,1500.00,YES,Example Exchange,ORDER-SOL-002,Profitable disposal
Recommended Transaction Types
Use standard values:
BUY
SELL
SWAP
SPEND
GIFT_SENT
GIFT_RECEIVED
AIRDROP
STAKING_REWARD
MINING_REWARD
SELF_TRANSFER
DEPOSIT
WITHDRAWAL
OTHER
The basic calculator should process only confirmed disposal categories. It should flag gifts, airdrops, rewards, mining receipts and unusual DeFi activity for manual review.
Additional Columns for Advanced Records
For users with several exchanges or wallets, add:
Financial_Year,Acquisition_Date,Asset_Received,Quantity_Received,INR_Price_Source,Expected_TDS_INR,Form_26AS_TDS_INR,AIS_Matched,Cost_Method,Review_Status,Reviewer_Notes
These columns make it easier to identify differences between exchange-reported TDS, calculator estimates and official tax records.
Spreadsheet Formulas
Assume the following columns:
| Column | Field |
| A | Transaction date |
| B | Asset |
| C | Transaction type |
| D | Consideration in INR |
| E | Cost of acquisition in INR |
| F | Actual TDS |
| G | Raw gain or loss |
| H | Taxable gain |
| I | Economic loss |
| J | Estimated TDS |
| K | Base tax |
| L | TDS applicable |
Raw Gain or Loss
In G2:
=IF(OR(C2="SELL",C2="SWAP",C2="SPEND"),D2-E2,0)
Taxable Gain
In H2:
=MAX(0,G2)
Economic Loss
In I2:
=MAX(0,-G2)
Expected TDS
In J2:
=IF(L2="YES",D2*1%,0)
Base Tax
In K2:
=H2*30%
Copy the formulas down to the final row.
Summary Formulas
Assuming rows 2 to 500:
Total economic result:
=SUM(G2:G500)
Total taxable VDA income:
=SUM(H2:H500)
Total economic losses:
=SUM(I2:I500)
Estimated TDS:
=SUM(J2:J500)
Actual TDS:
=SUM(F2:F500)
Base VDA tax:
=SUM(K2:K500)
If the base tax is in N2 and the CA-approved surcharge rate is entered in N3:
Surcharge:
=N2*N3
Cess:
=(N2+N4)*4%
Gross tax:
=N2+N4+N5
Estimated balance after actual TDS:
=N6-SUM(F2:F500)
Use separate output cells for:
- Amount payable.
- Potential excess credit.
- Unmatched TDS.
- Transactions needing review.
- Missing acquisition costs.
Do not hide negative results by displaying zero without explanation.
Transparent Python Crypto Tax Calculator
The following script uses only Python’s standard library. It does not connect to an exchange, submit a return or determine whether a transaction is legally taxable. It processes the CSV fields supplied by the user.
import csv
from decimal import Decimal, InvalidOperation, ROUND_HALF_UP
from pathlib import Path
MONEY = Decimal("0.01")
ZERO = Decimal("0")
VDA_TAX_RATE = Decimal("0.30")
TDS_RATE = Decimal("0.01")
CESS_RATE = Decimal("0.04")
DISPOSAL_TYPES = {"SELL", "SWAP", "SPEND"}
def money(value: str, field_name: str, row_number: int) -> Decimal:
"""Convert a CSV value to a non-negative Decimal."""
try:
amount = Decimal((value or "0").strip())
except InvalidOperation as exc:
raise ValueError(
f"Row {row_number}: invalid number in {field_name}: {value!r}"
) from exc
if amount < ZERO:
raise ValueError(
f"Row {row_number}: {field_name} cannot be negative."
)
return amount
def rupees(value: Decimal) -> Decimal:
return value.quantize(MONEY, rounding=ROUND_HALF_UP)
def calculate_crypto_tax(
csv_path: str,
surcharge_rate_percent: str = "0"
) -> dict:
path = Path(csv_path)
if not path.exists():
raise FileNotFoundError(f"CSV file not found: {csv_path}")
try:
surcharge_rate = Decimal(surcharge_rate_percent) / Decimal("100")
except InvalidOperation as exc:
raise ValueError("Surcharge rate must be a valid percentage.") from exc
if surcharge_rate < ZERO:
raise ValueError("Surcharge rate cannot be negative.")
totals = {
"economic_gain": ZERO,
"economic_loss": ZERO,
"taxable_vda_income": ZERO,
"estimated_tds": ZERO,
"actual_tds": ZERO,
"consideration": ZERO,
"review_rows": 0,
}
details = []
with path.open("r", encoding="utf-8-sig", newline="") as file:
reader = csv.DictReader(file)
required = {
"Transaction_ID",
"Transaction_Date",
"Asset",
"Transaction_Type",
"Quantity",
"Consideration_INR",
"Cost_of_Acquisition_INR",
"Actual_TDS_INR",
"TDS_Applicable",
}
missing = required.difference(reader.fieldnames or [])
if missing:
raise ValueError(
"CSV is missing required columns: "
+ ", ".join(sorted(missing))
)
for row_number, row in enumerate(reader, start=2):
transaction_type = row["Transaction_Type"].strip().upper()
if transaction_type not in DISPOSAL_TYPES:
continue
consideration = money(
row["Consideration_INR"],
"Consideration_INR",
row_number,
)
acquisition_cost = money(
row["Cost_of_Acquisition_INR"],
"Cost_of_Acquisition_INR",
row_number,
)
actual_tds = money(
row["Actual_TDS_INR"],
"Actual_TDS_INR",
row_number,
)
raw_result = consideration - acquisition_cost
taxable_gain = max(ZERO, raw_result)
economic_loss = max(ZERO, -raw_result)
tds_status = row["TDS_Applicable"].strip().upper()
if tds_status == "YES":
estimated_tds = consideration * TDS_RATE
elif tds_status == "NO":
estimated_tds = ZERO
else:
estimated_tds = ZERO
totals["review_rows"] += 1
totals["consideration"] += consideration
totals["taxable_vda_income"] += taxable_gain
totals["economic_gain"] += max(ZERO, raw_result)
totals["economic_loss"] += economic_loss
totals["estimated_tds"] += estimated_tds
totals["actual_tds"] += actual_tds
details.append({
"transaction_id": row["Transaction_ID"],
"date": row["Transaction_Date"],
"asset": row["Asset"],
"type": transaction_type,
"consideration": rupees(consideration),
"cost": rupees(acquisition_cost),
"raw_result": rupees(raw_result),
"taxable_gain": rupees(taxable_gain),
"economic_loss": rupees(economic_loss),
"estimated_tds": rupees(estimated_tds),
"actual_tds": rupees(actual_tds),
})
base_tax = totals["taxable_vda_income"] * VDA_TAX_RATE
surcharge = base_tax * surcharge_rate
cess = (base_tax + surcharge) * CESS_RATE
gross_tax = base_tax + surcharge + cess
balance = gross_tax - totals["actual_tds"]
result = {
"transactions": details,
"total_consideration": rupees(totals["consideration"]),
"economic_portfolio_result": rupees(
totals["economic_gain"] - totals["economic_loss"]
),
"economic_losses": rupees(totals["economic_loss"]),
"taxable_vda_income": rupees(totals["taxable_vda_income"]),
"base_tax_30_percent": rupees(base_tax),
"surcharge": rupees(surcharge),
"cess_4_percent": rupees(cess),
"gross_tax_estimate": rupees(gross_tax),
"estimated_tds": rupees(totals["estimated_tds"]),
"actual_tds_credit_entered": rupees(totals["actual_tds"]),
"estimated_amount_payable": rupees(max(ZERO, balance)),
"potential_excess_credit": rupees(max(ZERO, -balance)),
"rows_needing_tds_review": totals["review_rows"],
}
return result
def print_summary(result: dict) -> None:
print("\nCRYPTO TAX ESTIMATE — INDIA")
print("-" * 52)
print(
f"Total disposal consideration: "
f"₹{result['total_consideration']:,.2f}"
)
print(
f"Economic portfolio result: "
f"₹{result['economic_portfolio_result']:,.2f}"
)
print(
f"Economic losses tracked: "
f"₹{result['economic_losses']:,.2f}"
)
print(
f"Taxable VDA income: "
f"₹{result['taxable_vda_income']:,.2f}"
)
print(
f"Base tax at 30%: "
f"₹{result['base_tax_30_percent']:,.2f}"
)
print(
f"Surcharge entered: "
f"₹{result['surcharge']:,.2f}"
)
print(
f"Health and Education Cess: "
f"₹{result['cess_4_percent']:,.2f}"
)
print(
f"Gross tax estimate: "
f"₹{result['gross_tax_estimate']:,.2f}"
)
print(
f"Estimated TDS from flags: "
f"₹{result['estimated_tds']:,.2f}"
)
print(
f"Actual TDS credit entered: "
f"₹{result['actual_tds_credit_entered']:,.2f}"
)
print(
f"Estimated amount payable: "
f"₹{result['estimated_amount_payable']:,.2f}"
)
print(
f"Potential excess credit: "
f"₹{result['potential_excess_credit']:,.2f}"
)
print(
f"Rows needing TDS review: "
f"{result['rows_needing_tds_review']}"
)
print("\nImportant: This is an estimate, not a tax return.")
if __name__ == "__main__":
try:
tax_result = calculate_crypto_tax(
"crypto_transactions.csv",
surcharge_rate_percent="0",
)
print_summary(tax_result)
except (FileNotFoundError, ValueError) as error:
print(f"Unable to calculate: {error}")
What the Script Does Correctly
The script:
- Separates tax from TDS.
- Calculates each disposal independently.
- Records economic losses without using them to reduce taxable VDA income.
- Applies 30% tax only to positive taxable amounts.
- Applies cess after adding any entered surcharge.
- Separates estimated TDS from actual TDS entered by the user.
- Shows potential excess tax credit separately from tax payable.
- Flags uncertain TDS rows for review.
- Rejects negative monetary inputs and malformed numbers.
What the Script Does Not Do
It does not:
- Match acquisition lots automatically.
- Decide whether FIFO is legally appropriate.
- Import exchange APIs.
- Determine the correct INR market price.
- Verify AIS or Form 26AS.
- Calculate advance-tax interest.
- Determine the taxpayer’s surcharge rate.
- Calculate tax on salary, business, property or other income.
- Handle gifts, mining, staking or airdrops automatically.
- Prepare or submit Schedule VDA.
- Guarantee that actual TDS credit will be accepted.
- Replace professional review.
Complete Scenario Walkthrough
Consider three disposals during a tax year:
| Asset | Cost of acquisition | Sale consideration | Raw result | Taxable amount | Illustrative TDS |
| BTC | ₹50,000 | ₹75,000 | +₹25,000 | ₹25,000 | ₹750 |
| ETH | ₹30,000 | ₹25,000 | −₹5,000 | ₹0 | ₹250 |
| SOL | ₹10,000 | ₹18,000 | +₹8,000 | ₹8,000 | ₹180 |
Step 1: Calculate Economic Result
BTC gain: ₹25,000
ETH loss: ₹5,000
SOL gain: ₹8,000
Economic portfolio profit:
₹25,000 − ₹5,000 + ₹8,000 = ₹28,000
Step 2: Calculate Taxable VDA Income
The ₹5,000 ETH loss is tracked but is not used to reduce the two positive disposal amounts.
BTC taxable gain: ₹25,000
ETH taxable gain: ₹0
SOL taxable gain: ₹8,000
Total taxable VDA income: ₹33,000
Step 3: Calculate Base Tax
₹33,000 × 30% = ₹9,900
Step 4: Calculate Cess
Assume no surcharge:
₹9,900 × 4% = ₹396
Step 5: Calculate Gross Tax
₹9,900 + ₹396 = ₹10,296
Step 6: Reconcile TDS
₹750 + ₹250 + ₹180 = ₹1,180
Step 7: Estimate Remaining Tax
₹10,296 − ₹1,180 = ₹9,116
The calculator should display:
Economic portfolio profit: ₹28,000
Taxable VDA income: ₹33,000
Gross tax estimate: ₹10,296
Actual TDS entered: ₹1,180
Estimated balance: ₹9,116
This side-by-side display prevents the taxpayer from confusing portfolio profit with taxable VDA income.
Schedule VDA and Income Tax Return Reporting
Schedule VDA is designed for transaction-wise reporting of VDA transfers. The official guidance identifies information such as:
- Date of acquisition.
- Date of transfer.
- Consideration received.
- Cost of acquisition.
- Tax head.
- Transaction-level income.
- Special handling where an asset was received as a gift.
The current Schedule VDA tutorial states that it applies across ITR-2, ITR-3, ITR-5, ITR-6 and ITR-7. For individuals, the practical choice between ITR-2 and ITR-3 can depend on whether the activity is reported as capital gains or business income and on the taxpayer’s wider circumstances.
Do not select an ITR form only because an exchange labels you as an “investor” or “trader.” Consider:
- Frequency and volume of activity.
- Intention.
- Accounting treatment.
- Whether trading is organised as a business.
- Other sources of income.
- The form’s eligibility rules.
- Advice from the person preparing the return.
A calculator can produce numbers. It cannot decide the correct tax head or return form for every user.
Reconciling TDS with AIS and Form 26AS
The TDS shown in an exchange statement should be checked against official tax information.
Create a reconciliation table:
| Record | Amount |
| Expected TDS from calculator | ₹_____ |
| TDS shown by exchange | ₹_____ |
| TDS appearing in AIS | ₹_____ |
| TDS appearing in Form 26AS | ₹_____ |
| Difference requiring review | ₹_____ |
Common reasons for differences include:
- Exchange reporting delay.
- Wrong PAN or incomplete KYC.
- Reversed transactions.
- TDS deposited in a later reporting period.
- Duplicate imported trades.
- Incorrect tax-year grouping.
- P2P trades where the buyer had the deduction obligation.
- Crypto-to-crypto trades reported differently.
- Records spread across more than one exchange.
- TDS entered manually in the CSV but not actually deducted.
Do not claim credit based only on the calculator’s expected-TDS column. The final claim should be supported by tax records and professional review where necessary.
P2P and Direct-Wallet Transactions
On a centralised Indian exchange, the platform may handle withholding and reporting under the applicable framework.
In a direct P2P transaction, responsibility can be less obvious. The buyer or person paying consideration may have a TDS obligation, subject to the transaction, residence status, threshold and applicable law.
For transactions occurring after 1 April 2026, the Income Tax Department introduced Form 141 as the common challan-cum-statement mechanism. Schedule D covers TDS on VDA transfers by an individual or HUF under Section 393(1), Table, serial number 8(vi). Older transactions may continue to use the forms and section references applicable under the previous Act.
For every direct trade, preserve:
- Buyer and seller details.
- PAN information where legally required.
- Date of transfer.
- Total consideration.
- Cash and in-kind portions.
- Crypto exchanged.
- TDS calculation.
- Challan information.
- Proof of payment.
- Wallet transaction hashes.
Do not assume that using a decentralised platform removes tax or reporting obligations.
Gifts, Airdrops, Staking and Mining
The basic calculator on this page is designed for ordinary purchases and disposals. It should not automatically process every receipt of a token as if it were a normal buy.
Gifts
The correct treatment can depend on:
- Relationship between donor and recipient.
- Occasion.
- Value.
- Whether the receipt is exempt.
- Tax already arising on receipt.
- Cost rules applied when the gifted VDA is later transferred.
Schedule VDA contains specific cost-of-acquisition instructions for assets received as gifts. Do not enter zero cost automatically without reviewing those instructions and the underlying gift treatment.
Airdrops
An airdrop can create more than one question:
- Whether value is taxable when received.
- What INR fair market value should be recorded.
- Whether restrictions affected the value.
- What cost is available on a later transfer.
- Whether the token was received in return for a service.
Staking Rewards
Staking rewards may require analysis at receipt and again when the rewarded tokens are transferred. The basic 30% disposal calculator does not determine the correct treatment of the original reward.
Mining
Mining involves questions about the character of receipts, business activity, equipment and electricity costs, and the later disposal of mined tokens. Do not insert mining expenses into the VDA-transfer formula without professional advice.
Store these transactions in the CSV but mark them:
Review status: Specialist review required
DeFi Transactions the Basic Calculator Should Flag
Manual review is advisable for:
- Liquidity-pool deposits.
- Liquidity-pool withdrawals.
- Wrapped tokens.
- Cross-chain bridges.
- Lending collateral.
- Liquidation events.
- Borrowed tokens.
- Yield-farming rewards.
- Rebasing tokens.
- Token migrations.
- DAO distributions.
- NFT minting.
- NFT royalties.
- Derivatives settled in crypto.
- Token burns.
- Failed smart-contract transactions.
A wallet exporter may describe these events as deposits, withdrawals or swaps without identifying their legal or economic substance.
The safest calculator design is to flag the row rather than assign a confident but unsupported tax result.
Common Crypto Tax Calculator Mistakes
1. Taxing Net Portfolio Profit
The calculator subtracts all losses from all gains and taxes only the net amount.
Better approach: Keep a transaction-wise taxable-gain column and an independent economic-loss column.
2. Applying 1% to Profit
TDS is entered as 1% of the gain.
Better approach: Where applicable, estimate it from consideration and then replace the estimate with actual verified TDS.
3. Treating TDS as an Expense
TDS is subtracted from the sale value or cost basis.
Better approach: Track it as a separate tax credit.
4. Ignoring Cess
The calculator stops after multiplying taxable income by 30%.
Better approach: Add surcharge where applicable and calculate 4% cess on tax plus surcharge.
5. Applying Cess Only to Base Tax When Surcharge Exists
This understates the result.
Better approach:
Cess = (Base tax + Surcharge) × 4%
6. Assuming Every Transfer Has 1% TDS
The calculator ignores thresholds, payer category and residence status.
Better approach: Include a TDS-applicability field and compare estimates with actual records.
7. Using Current Prices Instead of Historical INR Values
The calculator values an old swap using today’s token price.
Better approach: Use the transaction-time INR value and retain the price source.
8. Treating Self-Transfers as Sales
An exchange withdrawal is imported as a disposal.
Better approach: Maintain a register of personally controlled wallets and match both sides of the transfer.
9. Giving Every Unknown Asset a Zero Cost
This can significantly overstate tax.
Better approach: Reconstruct acquisition records and flag unresolved cost rather than silently entering zero.
10. Deducting Every Fee
The calculator subtracts internet bills, gas fees, software subscriptions and platform costs.
Better approach: Track fees separately and include an amount in acquisition cost only where the treatment is supportable.
11. Using One Annual Row per Coin
Multiple purchase and sale lots are collapsed into one line.
Better approach: Preserve each disposal and its matched acquisition history.
12. Assuming a Negative Balance Is a Guaranteed Refund
The calculator says “refund due” whenever TDS exceeds estimated VDA tax.
Better approach: Label it potential excess credit, subject to the complete return and verification.
13. Forgetting the 2026 Section Transition
Post-April records continue to quote only old section numbers.
Better approach: Retain old references for historical transactions but use the current Section 393 table reference where required for post-1 April 2026 compliance.
Limitations of This Crypto Tax Calculator
It Is Not a Filing Tool
The output is an estimate. It does not create a valid ITR, Schedule VDA, challan, TDS statement or audit report.
It Cannot Choose the Correct Tax Head
The same type of asset may be reported differently depending on the taxpayer’s activity and facts.
It Cannot Determine Residence
TDS rules can differ where the payee is not a resident. Do not apply the resident VDA TDS formula automatically to cross-border transactions.
It Cannot Reconstruct Missing Cost Basis
A tax figure based on incomplete acquisition records can be materially wrong.
It Does Not Calculate Surcharge Automatically
Surcharge requires the taxpayer’s total-income and status information.
It Does Not Calculate Interest
Advance-tax and return-filing consequences may involve interest or other additions that are outside this tool.
It Does Not Resolve Valuation Disputes
Different exchanges can show different INR prices at the same time.
It Does Not Verify TDS Credit
Only the relevant tax records and processing system can confirm available credit.
It Does Not Handle Every DeFi Event
Complex smart-contract activity requires transaction classification before arithmetic can begin.
It Does Not Provide Legal Certainty
Tax law can be amended, and administrative guidance or judicial interpretation can affect an individual case.
Crypto Tax Record-Keeping Checklist
Before calculating:
- Export trade history from every exchange.
- Export deposits and withdrawals.
- Download wallet transaction histories.
- List all wallets controlled by you.
- Collect P2P payment records.
- Record all crypto-to-crypto swaps.
- Obtain historical INR valuations.
- Collect TDS statements from exchanges.
- Review AIS and Form 26AS.
- Identify missing acquisition costs.
- Separate financial years correctly.
- Preserve evidence for gifts and rewards.
During calculation:
- Process each disposal separately.
- Match the quantity disposed to acquisition records.
- Preserve economic losses.
- Set transaction-level taxable losses to nil in the tax-estimation column.
- Calculate 30% base tax on positive taxable income.
- Enter surcharge only when correctly determined.
- Calculate cess on base tax plus surcharge.
- Track actual TDS separately.
- Flag unclear transactions.
- Avoid automatic fee deductions.
Before filing:
- Reconcile exchange TDS with official records.
- Review Schedule VDA requirements.
- Confirm the correct ITR form.
- Confirm capital-gain or business-income classification.
- Check P2P TDS obligations.
- Review in-kind transactions.
- Review gifts, mining, staking and airdrops.
- Check advance-tax implications.
- Ask a CA to examine high-value or complex activity.
- Retain the final CSV and supporting statements.
Frequently Asked Questions
How much tax do I pay on crypto profit in India?
Taxable income from a VDA transfer is subject to a 30% rate, plus applicable surcharge and 4% Health and Education Cess. With no surcharge, the combined tax and cess equal 31.2% of taxable VDA income.
Is the 1% crypto TDS charged on profit?
No. Where it applies, TDS is calculated from the consideration paid or credited for the VDA transfer, not from the profit.
Can I subtract a Bitcoin loss from an Ether gain?
The VDA rules restrict set-off of losses. Schedule VDA reporting is transaction-wise, with a loss shown as nil and positive amounts aggregated.
Can a crypto loss be carried forward?
The special VDA rule does not allow the relevant loss to be carried forward to succeeding years.
Is TDS the final crypto tax?
No. TDS is a withholding or advance tax credit. The final result depends on taxable VDA income, surcharge, cess, the rest of the return and verified tax credits.
Does TDS apply below ₹50,000?
The answer depends on the payer category and aggregate consideration. The ₹50,000 threshold applies to qualifying individual or HUF payers. A ₹10,000 threshold applies to other payers.
Is a BTC-to-ETH swap taxable?
A swap involves transferring one VDA in exchange for another. It should not be ignored simply because no INR entered the bank account. Record the transaction-time INR value and obtain advice where classification or valuation is uncertain.
Which cost-basis method should I use?
A consistent method is required to match units disposed with their acquisition records. FIFO is often used operationally, but this calculator does not claim it is legally mandatory in every situation. Have the selected method reviewed for your circumstances.
Can I deduct trading fees and gas fees?
The statutory VDA calculation permits cost of acquisition but restricts other expenditure deductions. Do not deduct every fee automatically. Track the amounts separately and ask a CA whether any specific purchase-related charge properly forms part of acquisition cost.
Do I pay tax if I only hold crypto?
The 30% VDA-transfer calculation concerns income arising from a transfer. Merely viewing an unrealised increase in a wallet is different from completing a disposal. Other events, including rewards or receipts, can create separate issues.
Does moving crypto to my hardware wallet create tax?
A transfer between wallets under the same beneficial ownership may be an internal movement rather than a sale. The transaction must still be documented so that software does not classify it as a disposal.
Can I claim a TDS refund when I made a loss?
Potentially excess TDS may be available as credit when the complete return is calculated, but a calculator cannot guarantee a refund. The amount must appear in the relevant records and remain subject to return processing.
Which form replaced Form 26QE in 2026?
For applicable post-1 April 2026 transactions, Form 141 is the common challan-cum-statement. Its Schedule D covers individual or HUF TDS on VDA transfers under Section 393(1), Table, serial number 8(vi).
Do I use Section 194S or Section 393 in 2026?
Use the provision governing the date of the transaction or payment event. Events on or before 31 March 2026 remain under the old Act. Relevant events on or after 1 April 2026 are governed by the Income Tax Act, 2025 and its Section 393 structure.
Is cryptocurrency legal in India because it is taxed?
Tax treatment does not by itself create a blanket approval, legal guarantee or investor protection for every token, platform or activity. This calculator addresses tax estimation only.
Final Calculation Summary
A transparent crypto tax calculator for India should always display at least these seven numbers:
1. Total disposal consideration
2. Economic portfolio gain or loss
3. Total economic losses tracked
4. Taxable VDA income after transaction-wise restrictions
5. Base tax at 30%
6. Applicable surcharge and 4% cess
7. Actual TDS credit and estimated remaining balance
The central formula is:
Taxable VDA income =
SUM(MAX(0, consideration − cost of acquisition))
The gross tax estimate is:
Base tax = Taxable VDA income × 30%
Surcharge = Base tax × Applicable surcharge rate
Cess = (Base tax + Surcharge) × 4%
Gross tax estimate = Base tax + Surcharge + Cess
TDS remains a separate calculation:
Expected TDS =
Eligible transfer consideration × 1%
The final estimated position is:
Estimated balance =
Gross tax estimate
− Verified TDS credit
− Other eligible tax payments
This framework is deliberately transparent. Every number can be traced to a transaction, formula or tax record. It does not conceal assumptions inside a black-box result, and it does not suggest that an estimated output is the same as a professionally reviewed tax return.
For straightforward exchange purchases and sales, the calculator can provide a useful working estimate. For P2P transfers, gifts, staking, mining, airdrops, DeFi, non-resident transactions, missing cost records or high-value portfolios, obtain advice from a qualified Chartered Accountant before filing.
