Skip to content

EU9MY3 Crypto Resource

Crypto Tax Calculator India 2026: Calculate 30% VDA Tax and 1% TDS

  • Author: EDITORIAL TEAM
  • Last updated:
  • Educational information

Crypto Tax Calculator India 2026: Calculate 30% VDA Tax and 1% TDS content

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:

  1. Calculate taxable income from each disposal of a Virtual Digital Asset.
  2. 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 inputWhat to enter
Transaction dateDate on which the VDA was transferred
Asset disposedBTC, ETH, SOL, NFT or other relevant VDA
Transaction typeSell, swap, spend, transfer for consideration or other disposal
Quantity disposedNumber of tokens or units transferred
Sale considerationTotal INR value received or receivable
Cost of acquisitionMatched acquisition cost for the units disposed
Actual TDS deductedAmount shown in the exchange statement or tax records
TDS applicableYes, no or requires professional review
Source platformExchange, P2P transaction, wallet or other platform
Transaction referenceExchange 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:

TransactionGain 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:

ColumnField
ATransaction date
BAsset
CTransaction type
DConsideration in INR
ECost of acquisition in INR
FActual TDS
GRaw gain or loss
HTaxable gain
IEconomic loss
JEstimated TDS
KBase tax
LTDS 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:

AssetCost of acquisitionSale considerationRaw resultTaxable amountIllustrative 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:

RecordAmount
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.