Home / Store / Crypto Tax Guide: Never Get Surprised by the IRS Again / Complete Guide

Complete Guide

Crypto Tax Guide: Never Get Surprised by the IRS Again

Crypto tax problems usually come from operational sloppiness, not from the tax forms themselves. This guide shows how to classify taxable events, choose a defensible cost-basis method, use Koinly, TaxBit, or CoinTracker intelligently, prepare Form 8949 and Schedule D, harvest losses without relying on bad folklore, and keep records strong enough to survive an IRS question later.

1. Foundation

For U.S. taxpayers, crypto is generally treated as property, which means every disposal can create a capital gain or loss. Selling bitcoin for dollars is a taxable event, but so is swapping ETH for SOL, spending USDC on goods, converting one token to another inside a wallet, or using appreciated coins to pay transaction fees. Transfers between your own wallets are not taxable if you truly maintain ownership from start to finish, but they become a recordkeeping problem if the receiving wallet loses the original acquisition data. Ordinary income can also arise when you receive coins from staking rewards, mining, airdrops, referral bonuses, or compensation. The fair market value at receipt becomes ordinary income and also becomes the cost basis for the lot you now own. The most reliable way to stay out of trouble is to separate events into three buckets as you import data: non-taxable transfers, capital disposals, and ordinary-income receipts. If software cannot tell those apart, you still have cleanup work to do.

Cost basis is the second major decision because it determines which lot you are treated as selling. FIFO assumes the oldest units are sold first. HIFO aims to sell the highest-cost units first, which often reduces gains or increases losses in rising markets. Specific identification can produce a similar result, but only if your records show exactly which units left your control and you apply the method consistently. Some software platforms support a wider range of lot-selection rules than others. Koinly is strong for users with many exchanges and broad integrations, CoinTracker is often praised for a polished interface and simpler workflows, and TaxBit is common among users who have exchange-issued tax reports or accountant-driven processes. The right tool depends less on marketing and more on whether it imports your venues correctly, lets you resolve transfers cleanly, supports your preferred basis method, and produces export files your tax preparer can actually use.

Form 8949 and Schedule D are where the recordkeeping work becomes visible. Form 8949 lists each sale or disposal, usually with acquisition date, sale date, proceeds, cost basis, and resulting gain or loss. Schedule D summarizes those totals into short-term and long-term buckets and flows them into the return. If you have hundreds or thousands of trades, the software may attach a substitute statement instead of typing every line directly into the PDF, but the underlying math still has to reconcile. Review totals before filing: proceeds on Form 8949 should agree with the exports from your chosen software, and the split between short-term and long-term should make sense given your holding periods. If the software shows large blocks of unknown basis, missing acquisition dates, or negative holdings in a wallet, you are not ready to file just because the report exists.

Loss harvesting deserves special attention because crypto investors often hear outdated or oversimplified advice. Under current U.S. law, the wash sale rule in Section 1091 generally applies to securities, and crypto is not currently treated as a security for that specific rule in the same way stocks are. That means many taxpayers currently harvest crypto losses and buy back the same asset immediately without triggering the classic wash-sale disallowance. But that is not a license for careless behavior. You still need an actual sale, a real disposition timestamp, and a defensible record that the loss occurred. Congress could change the rule later, and sham transactions or circular self-dealing can still invite scrutiny. Recordkeeping is therefore part of the tax strategy: keep CSV exports, API pull dates, screenshots of major transactions, wallet addresses, and notes on any manual adjustments. If you ever have to explain why a loss is real, a clean audit trail matters more than a clever tactic.

2. Step-by-Step System

1

Build the master transaction inventory

List every exchange, wallet, on-chain protocol, and payment app that touched your crypto during the tax year. Include closed accounts, custodial accounts you rarely use, and wallets that only received transfers. Then export the most detailed history available from each source: trades, deposits, withdrawals, rewards, fees, and transaction IDs. API imports are helpful, but do not assume they replace raw exports; exchanges can change API scopes, and historical data sometimes disappears after a platform failure or account closure. Name each file with the venue and date of export so you can prove when the data was pulled. Your goal is a complete raw-data package before you start any tax software cleanup. Most missing-basis problems begin because one old wallet or one dead exchange is forgotten until after the software has already created dozens of phantom gains.

2

Choose software based on cleanup ability, not advertising

Run a trial import in the platforms that actually connect to your activity. Koinly is often strong when you need wide wallet support and hands-on reconciliation tools. TaxBit can be appealing when your exchange already partners with it or your accountant expects its exports. CoinTracker is often easier for users who value a polished dashboard and have more standard exchange activity. When comparing them, check four things: whether transfers auto-match correctly, whether the software supports your preferred basis method, how it handles staking or DeFi income, and whether the final reports can be exported in a form your preparer can review. Count the cleanup tasks after the first import. If one platform shows fifteen unresolved transfers and another shows two, the cheaper price tag may not be the cheapest total solution once your time is included.

3

Reconcile transfers, fees, and basis gaps before you classify gains

A clean tax file requires wallet-to-wallet transfers to be paired up so you do not accidentally create fake sales. Match outgoing BTC from Exchange A to incoming BTC in Wallet B using timestamps, amounts, and transaction hashes. Then account for network fees. If you sent 1.0000 ETH and only 0.9975 ETH arrived because 0.0025 ETH was burned as gas, record the fee correctly instead of treating the shortfall as a mysterious missing asset. Look for negative balances, duplicate imports, or lots that appear to have no acquisition date. Those are red flags that your software is inventing answers. Repair them before you move on, even if it means manual entries. A return with fewer transactions but correct basis is far better than a huge automated report built on incorrect transfer matching.

4

Document the cost-basis method and the lot-selection rule

Once the inventory is clean, choose the method you will use for the year and confirm the software is actually applying it. FIFO is usually easiest to explain and may match the default used by many platforms. HIFO can reduce taxable gains in volatile markets, but only if the lots are identified correctly. If you rely on specific identification, keep records that show how the specific units were selected. Write the rule in plain English: for example, 'For 2025 digital-asset disposals, I will use HIFO in Koinly for all taxable wallets and retain the lot-level export that shows selected units.' That note sounds simple, but it protects you against future confusion when you compare year-over-year returns or switch software later. Consistency matters because unexplained method changes can create reconciliation headaches with prior filings.

5

Harvest losses deliberately and keep the evidence package

Review unrealized losers near year-end or whenever large drawdowns create planning opportunities. If you sell to realize a loss, note the exact time, proceeds, and replacement plan. Under current rules, many practitioners treat the wash sale rule as not applying to crypto the way it applies to stocks, which means an immediate repurchase may still preserve the tax loss. Even so, do not reduce the exercise to a one-click rumor. Keep the trade confirmations, the tax-lot report showing cost basis, and a note explaining why the transaction was entered. Also remember that harvesting a loss is only useful if it offsets gains now or can be carried forward into years when you expect to use it. Selling solely for tax optics while increasing trading fees or abandoning your investment plan is not smart tax management.

6

Review Form 8949, Schedule D, and the record-retention file before filing

Before the return goes out, read the totals instead of assuming the software is correct. Check short-term versus long-term totals, compare total proceeds against what you actually sold, and confirm that large disposals are listed with realistic basis numbers. Then make a retention package: the final Form 8949 output or substitute statement, Schedule D summary, raw CSV exports, software reconciliation notes, screenshots of large manual adjustments, and a list of wallets and exchange accounts used during the year. Save it in one folder. If the IRS sends a notice two years later, the time to build the file will have passed. A filing process is complete only when the supporting records are easy to retrieve.

3. Key Worksheets & Checklists

Use these worksheets while your exports are open. They are designed to answer the questions a CPA, enrolled agent, or IRS notice will force you to answer later anyway: what happened, which lots were sold, and where the support lives.

Your entries save automatically in your browser.

Crypto Filing Map Worksheet

Tax year scopeList the filing year, the exchanges and wallets active that year, and any prior-year carryforward losses that still matter.
Software selectedRecord whether you are using Koinly, TaxBit, CoinTracker, or another platform, plus the reason it won.
Cost-basis methodWrite FIFO, HIFO, specific identification, or another method exactly as configured in the software.
Taxable event categoriesNote which apply: sales for cash, token swaps, spending, staking income, airdrops, mining, NFT sales, or compensation.
Open reconciliation issuesList transfers, missing basis lots, duplicate imports, or unknown assets that must be fixed before filing.
Form outputs neededSpecify whether the final package must include Form 8949 detail, Schedule D totals, accountant export files, or state-return support.
Loss-harvesting logNote every realized tax-loss trade with date, proceeds, and whether you repurchased the asset.
Record-retention locationState exactly where CSV files, screenshots, API export dates, and final reports will be stored.

Execution Checklist

  • Export raw trade and transfer history from every exchange and wallet before relying on API-only imports.
  • Confirm transfers between your own wallets are marked non-taxable and matched on both sides.
  • Review gas fees, bridge fees, and withdrawal fees so missing amounts do not become phantom gains.
  • Pick a cost-basis method intentionally and make sure the software setting matches the written policy.
  • Check whether any staking, mining, airdrop, or referral income needs to be reported as ordinary income before later disposal.
  • Review unrealized loss opportunities with the current understanding that wash sale rules generally do not apply to crypto in the same way they apply to securities today.
  • Inspect every 'unknown basis' or 'missing acquisition date' flag before treating the report as final.
  • Read Form 8949 totals and Schedule D totals manually instead of assuming the software summary is self-validating.
  • Save the final reports together with raw exports and notes on manual adjustments in one retention folder.

Annual Crypto Tax Maintenance Tracker

Review PointWhat to CheckDecision or Output
MonthlyImport new exchange and wallet activity and resolve transfer mismatches while they are fresh.Prevent year-end cleanup from becoming impossible.
QuarterlyEstimate realized gains, ordinary-income receipts, and any tax reserve needed for upcoming payments.Avoid surprise balances and underpayment pain.
Year-endReview unrealized losses, verify basis methods, and lock down all missing historical exports.Enter filing season with a mostly finished file.
Post-filingArchive final 8949/Schedule D outputs, carryforward schedules, and software settings used.Make next year's opening balance easier to trust.

4. Common Mistakes

Treating wallet transfers as taxable sales

A transfer between your own accounts is usually not taxable, but software only knows that if the outgoing and incoming records line up. Unmatched transfers are one of the fastest ways to manufacture fake gains.

Letting the software choose a basis method by default

Default settings are not strategy. If FIFO, HIFO, or specific identification changes your tax bill materially, you need to know which one is actually being applied and keep evidence of that choice.

Talking about wash sales without reading the current rule

Crypto loss harvesting is not a free-for-all just because the classic securities wash sale rule generally does not apply the same way today. Real trades, timestamps, and support still matter.

Saving only the final PDF and not the underlying exports

If you ever need to respond to a notice, the IRS will care about how the totals were built. Raw CSV files, wallet addresses, and notes on manual edits are often more important than the final summary page.

5. Next Steps

After you finish the guide, lock in a repeatable monthly import habit so tax season becomes a review exercise instead of a rescue mission. Then keep one permanent folder for raw exports, one for working reconciliations, and one for final filed reports so your future self can answer questions without rebuilding the entire year from memory.

⬇ Download PDF

Back to product page · Paid access page