VDALedger

Crypto tax, worked out in full

See exactly what your crypto trades cost you in tax

Drop in the trade history from your exchange. VDALedger works out your gains the way Indian rules require — oldest purchase first, 30% plus cess on every winning trade, 1% TDS — and then shows you the working for every single number.

Your files never leave this device. The calculation runs inside your browser. There is no account, no upload and no server involved — open your browser's Network tab and watch: this page makes no requests at all while it works.

Add your trade history

Drop your exchange export here

or click to choose files · .xlsx, .csv or .json · add every exchange and wallet you used

Broadly, you are a specified person if you have no business or professional income, or your business turnover is under ₹1 crore (₹50 lakh for a profession). If you are unsure, the lower threshold is the cautious choice and is selected by default.

How this works, and what it does not do

What it calculates

  • FIFO cost basis. Every sale is matched against your oldest unsold purchases first, per coin, across all the accounts you add.
  • 30% plus 4% cess on each winning disposal, worked out separately per trade.
  • No set-off. A losing trade never reduces the tax on a winning one — not across coins, not across the year, not into next year.
  • 1% TDS once your sale value for the year passes the threshold, treated as a credit against what you owe.
  • Transfers between your own accounts are recognised and keep their original cost basis, instead of being taxed as if you had sold.
  • Trading one coin for another counts twice. Buying BTC with USDT disposes of the USDT and acquires the BTC — both are transfers of a virtual digital asset, so both are worked out, and the coin you received starts with a cost basis instead of appearing from nowhere.

What it does not do

  • Surcharge is not modelled. It depends on your total income across everything, which this tool does not know.
  • It has no market price feed. INR pairs are exact. For USDT pairs it uses the price from your own USDT purchases and sales in rupees, on the day you made them — which is why loading your Indian exchange's history alongside your Binance one makes the figures better. Where it has to borrow a price from a nearby day, or has none at all, it says so on the trade rather than quietly picking a number.
  • Futures, perpetuals and options are out of scope. This is a spot ledger. Whether a margined derivative is even a VDA transfer is an open question, and a tool should not answer it for you.
  • It does not guess. If a file cannot be read confidently it is refused, and if a sale has no matching purchase you are told which one.
  • It is not a Chartered Accountant. Rules change, exports contain errors, and treatment can turn on facts a file does not carry.

Questions people actually ask

How is tax on crypto calculated in India?

Every sale is taxed on its own. You take what you sold it for, subtract what you originally paid for those exact coins, and if that is a profit you pay 30% of it plus a 4% cess on the tax — an effective 31.2%. If it is a loss you pay nothing on that sale, but the loss does not reduce the tax on any of your winning sales. Separately, 1% TDS is deducted on your sale values once they cross a threshold for the year.

Can I set off my crypto losses against my crypto gains?

No. This is the rule that surprises almost everybody. A loss on one coin cannot reduce the tax on a gain from another, cannot reduce tax on your salary or any other income, and cannot be carried into next year. If you made ₹5 lakh on one trade and lost ₹5 lakh on another, you broke even in reality and still owe tax on the ₹5 lakh gain.

Why does my crypto tax report show a huge gain I never made?

Almost always because the tool lost track of what you paid. If you moved coins from one exchange to another, a naive calculator treats the coins arriving at the second exchange as though they appeared from nowhere, with a cost of zero — so when you sell, it taxes the entire sale value instead of your actual profit. On a single bitcoin that is the difference between roughly ₹62,000 of tax and ₹16 lakh. VDALedger matches transfers between your own accounts and keeps the original cost, and where it genuinely cannot find a purchase it tells you which coins are affected instead of quietly assuming zero.

Is the 1% TDS an extra tax on top of the 30%?

No. TDS is money already sent to the government on your behalf when you sold. It is a credit: it reduces what you still have to pay when you file. If more was deducted than you owe, you are in a refund position. Your exchange calculates TDS only on the trades it can see, so if you use more than one exchange your own total will not match any single exchange's statement.

I only swapped one coin for another — why is there tax on that?

Because each virtual digital asset is its own asset, so exchanging one for another is a transfer of the first one. Buying BTC with USDT disposes of that USDT at its rupee value on the day, and any gain on the USDT since you acquired it is taxable, exactly as if you had sold it for rupees and bought BTC a moment later.

In practice the gain on a stablecoin leg is usually small — it only moves with the rupee — but it is not nothing, and it is not zero by default. The same applies in the other direction: the coin you received has a cost basis from the day you received it, which is what stops it being taxed on its whole value when you eventually sell it.

This is also why loading your Indian exchange's history matters. Without it, VDALedger can see USDT being spent but has no record of you acquiring it, and has to tell you so rather than guess what it cost you.

Why doesn't this TDS figure match my Form 26AS or AIS?

Usually because the two are answering different questions, and both can be right.

This tool works out the TDS that the rule produces on your whole year, across every file you loaded, with the threshold applied once to your combined sale value.

Form 26AS and the AIS show the TDS that was actually deducted and deposited against your PAN, exchange by exchange. Each exchange applies the threshold to its own trades only, because it cannot see the others. Two exchanges each below the threshold can leave you above it overall with nothing deducted anywhere.

There is a second, more mechanical reason: the sale that takes you past the threshold is charged 1% on the whole of it, not on the part above the threshold — and earlier sales below the threshold are not charged retrospectively. Exchanges do not all apply this the same way. Where they differ, it is a difference in how much credit lands in your 26AS and when, not in what you owe.

Which number goes in your return. Claim credit for the TDS that appears in Form 26AS / the AIS — that is the money the department has actually received. Your tax liability is calculated on your real gains regardless of what was withheld. If less was withheld than the rule required, you pay the balance when you file; you do not get to keep it because nobody deducted it. If more was withheld, you claim a refund.

Where a figure here differs from your 26AS, the disposal-by-disposal working shows which trades produced it, so the gap can be traced rather than guessed at.

Do I have to upload my trading history anywhere to use this?

No. The calculation runs inside your browser on your own device. There is no account and no server — the page contains no code capable of sending a network request, and it is served with a security policy that instructs your browser to refuse one. You can open the Network tab in your browser and watch it stay empty while the calculation runs.

Does this handle futures, perpetuals or options?

No, and deliberately so. VDALedger is a spot ledger. A short position makes money when the price falls, so feeding one through a buy-then-sell model would report a real profit as a loss of the same size. On top of that, whether a margined derivative is even a "transfer of a virtual digital asset" is genuinely unsettled, and a calculator should not answer that question on your behalf.

Which exchanges does it support?

Bring an export from any of them. VDALedger reads Excel and CSV files, finds the header row under whatever cover page or account block the exchange put on top, works out the timezone the file was exported in, and maps the columns. If it cannot map a file confidently it refuses it and shows you the column names it found, rather than guessing and producing a confident wrong number. Publishing a list of "supported exchanges" would be a promise about file formats that none of them actually publish.