· four exchange APIs · rebuilt daily

The finding
Exchange CSV exports fail to track crypto tax cost basis across venues, misstating realized capital gains by up to 100% on transferred assets.
Tax treatment varies by country and jurisdiction, and this technical breakdown of ledger settlement is not tax advice.
A single exchange only sees deposits and withdrawals, treating incoming crypto as a zero-cost asset or an unpriced transfer.
Every tax jurisdiction sets its own criteria for digital asset taxation, but most regulatory frameworks identify three core actions as taxable events: converting crypto to fiat currency, swapping one token for another, and realizing profit or loss on closed derivative contracts. Merely buying crypto with fiat or moving funds between wallets you own does not generate a tax liability.
In perpetual futures trading, taxable events occur when you close a position and lock in profit or loss in settlement units like USDT or USDC. Opening a leveraged long or short position allocates margin collateral but does not trigger a taxable disposition.
Funding payments paid or received every 8 hours introduce an additional accounting requirement. On OKX, holding an ETH long contract when the 8-hour funding rate is -0.0034% pays you a cash settlement. Depending on local tax codes, these periodic settlements are categorized either as ordinary income or as adjustments to the realized cost basis of the trade.
Your crypto tax cost basis represents the total purchase cost of an asset, including all trading fees incurred to acquire it. Calculating this baseline correctly is essential because taxable capital gains equal your final gross disposal price minus the established cost basis and disposal fees.
For spot asset acquisitions, the math requires adding spot exchange fees to the raw token purchase value. If you purchase 10 ETH at 3,000 USDT per token on MEXC, the raw transaction cost is 30,000 USDT. Applying the MEXC spot taker fee of 0.0005 adds 15 USDT to the acquisition cost, raising the true total cost basis to 30,015 USDT.
Worth knowing
Transferring crypto between your own wallets or exchange accounts is not a taxable event, but it destroys the audit trail inside single-exchange transaction exports.
When you subsequently sell those 10 ETH on Bybit at 3,200 USDT per token, gross proceeds equal 32,000 USDT. Applying Bybit spot taker fee of 0.001 deducts 32 USDT in selling costs, yielding net proceeds of 31,968 USDT. Subtracting your 30,015 USDT original cost basis leaves a true taxable capital gain of 1,953 USDT.
Exchanges produce internal account ledgers designed for trading audits, not cross-platform tax compliance. When you deposit assets into an account, the receiving venue records the incoming transfer as a zero-cost deposit or an external transfer without historical context.
If you deposit the 10 ETH purchased on MEXC into Bybit, Bybit's automated reporting software does not know you paid 30,015 USDT on MEXC. If you sell that ETH on Bybit, Bybit’s generated tax report lists a cost basis of 0 USDT, recording a false capital gain of 31,968 USDT instead of the actual 1,953 USDT profit.
| Exchange | Spot Maker Fee | Spot Taker Fee | Futures Maker Fee | Futures Taker Fee | Native Export Cost Basis Tracking |
|---|---|---|---|---|---|
| Bitget | 0.0010 | 0.0010 | 0.0002 | 0.0003 | Single account only; ignores external transfers |
| Bybit | 0.0010 | 0.0010 | 0.0002 | 0.00055 | Single account only; ignores external transfers |
| MEXC | 0.0000 | 0.0005 | 0.0000 | 0.0002 | Single account only; ignores external transfers |
| OKX | 0.0008 | 0.0010 | 0.0002 | 0.00055 | Single account only; ignores external transfers |
Relying solely on native exchange exports forces you to overpay taxes on phantom gains or underreport realized profits when collateral values fluctuate between venues.
Perpetual swaps add complexity because positions settle unrealized profit into realized balances while generating ongoing funding payments. Consider a position in BTC perps across OKX, Bybit, or Bitget, where the 8-hour funding rate is +0.0100%. Holding a long position of 1 BTC at 60,000 USDT nominal value costs 6.00 USDT in funding every 8 hours.
Where this goes wrong
Neglecting 8-hour funding settlements on perpetual futures creates compounding errors in cost basis, as paid funding reduces net trade return without altering position token count.
Over a 72-hour period (9 funding intervals), a 1 BTC long position incurs 54.00 USDT in total funding payments. If the position is closed at 61,000 USDT with a futures taker fee of 0.00055 (33.55 USDT), the gross price gain is 1,000 USDT.
Subtracting 33.55 USDT in taker execution fees and 54.00 USDT in funding payments results in a net realized gain of 912.45 USDT. If your tax jurisdiction requires treating funding payments as separate deductible expenses rather than position cost adjustments, your tax report must split the 1,000 USDT trade gain from the 54.00 USDT ordinary expense stream.
What to do instead
Consolidate trade logs from all venues into a unified off-exchange ledger to maintain accurate historical cost basis across transfers and funding settlements.
Transferring crypto between your own accounts is not a taxable event, so your original cost basis remains unchanged. However, the receiving exchange cannot see your original purchase price and will export a tax report showing a zero-dollar cost basis. You must manually link the transfer to preserve the acquisition history.
Yes, funding payments trigger taxable events when they settle every 8 hours. Depending on local regulations, payments received are categorized as ordinary income, while payments paid act as trade expenses or adjustments to cost basis. Reporting rules vary by country.
Exchange exports only log transactions that occur on their specific platform. When you deposit tokens bought elsewhere, the receiving exchange sets the cost basis to zero in its ledger export. This causes the entire sale amount to register as profit unless corrected.