Disclaimer (read first): This is an operations manual, not legal/tax advice. Rules vary by country and change over time. Use this for orientation, then confirm with a qualified professional in your jurisdiction.
A clean crypto report is built on three pillars: **know your obligations (KYC/AML & Travel Rule), identify taxable events vs non-events, and keep complete, versioned records you can reconcile across CEX, DEX, and self-custody. This guide gives you the practical workflows, checklists, and sanity checks to make that happen without brand shilling or protocol-specific rabbit holes.
What “reporting” means (and what it doesn’t)
Action bullets (use these):
- Clarify who you report to: your tax authority (for gains/income) and sometimes regulators via exchanges (KYC/AML).
- Distinguish regulatory vs tax reporting; they overlap but are not the same thing.
- Decide your tax year cut-offs and base currency (e.g., EUR) for consistent conversions.
- Build a records pack (exports + on-chain proofs) you could hand to an auditor tomorrow.
- Tag self-transfers early to avoid false disposals later.
Regulatory scope (high-level): KYC/AML, Travel Rule, tax reporting
- KYC/AML: Centralized exchanges (CEXs) collect identity data to verify customers and monitor transactions. Expect ID, proof of address, and sometimes source-of-funds.
- Travel Rule: VASPs (Virtual Asset Service Providers) may need to transmit originator/beneficiary data for qualifying transfers between VASPs. Scope and thresholds vary by region.
- Tax reporting: You typically report capital gains/losses and income (staking rewards, interest, mining, airdrops). Some countries require annual position statements or foreign account disclosures.
- Reality check: DeFi/self-custody often lacks counterparty statements—you must reconstruct activity from chain data and your notes.
Centralized vs. decentralized activity (CEX vs DEX, self-custody data gaps)
- CEX: Easiest for records. You can export trades, deposits/withdrawals, distribution logs. Map exchange tickers to canonical symbols and normalize timestamps to UTC.
- DEX: You get TXIDs but no monthly statements. Extract swaps, LP adds/removes, fees via explorers or indexers. Keep your address book (labels) current.
- Self-custody: Transfers between your own wallets are not taxable events in many jurisdictions, but you must prove common ownership with labels, memos, and address derivation notes.
Non-advice disclaimer and personal-jurisdiction caveat
- The categories in this guide (capital vs income, taxable vs non-taxable) are conceptual. Your jurisdiction may differ.
- When in doubt, document the fact pattern and ask a professional. Clean records lower your advisory bill and speed answers.
KYC/AML on exchanges and the Travel Rule (overview)
Action bullets (use these):
- Complete KYC tiers early; failed KYC during tax season is avoidable pain.
- Record exact names/IDs used at each exchange (for future statement matching).
- Understand if your exchange applies the Travel Rule to VASP-to-VASP transfers you initiate.
- For self-custody withdrawals, note when VASPs require address ownership proofs.
- Preserve account opening/closing emails and monthly statements.
Typical KYC tiers and data collected
- Basic: Email + phone; sometimes allows browsing only.
- Intermediate: Government ID, selfie/liveness, basic PoA; unlocks deposits/withdrawals.
- Advanced: Enhanced PoA, source-of-funds (payslips, bank statements), higher limits, fiat rails.
- What to store: Copies of KYC confirmations, account numbers/UIDs, residency country selected, and any questionnaires you submitted (PDF or screenshots). These details explain why certain withholding or reporting appears on your statements.
The Travel Rule in plain English (what gets shared, when, who)
- For qualifying transfers between VASPs, providers may exchange originator name, account, and beneficiary info alongside or prior to the transaction.
- Thresholds and enforcement differ. Practically, you may see prompts asking for beneficiary exchange and beneficiary name when sending to another platform.
- Self-custody addresses: Many rules target VASP-to-VASP transfers; sending to a self-hosted wallet may invoke address ownership verification (e.g., signed message, micro-deposit) rather than Travel Rule data exchange.
Cross-border transfers and identity requirements
- Expect extra checks when sending to/from exchanges in different jurisdictions. Keep consistent name formats.
- Some VASPs block transfers to exchanges in restricted countries. Retain error messages as evidence when reconciling gaps.
Taxable events 101 (conceptual, not advice)
Action bullets (use these):
- Classify each transaction as disposal, income, or non-event (local law may differ).
- Capture cost basis, proceeds, fees, and timestamp for every disposal.
- Record fair market value (FMV) in your base currency at receipt for income-like events.
- Keep notes for edge cases (wrapping/bridging/NFT actions).
- When unsure, flag the transaction and create a “needs review” list for your advisor.
Disposals: sell, swap (crypto→crypto), spend (goods/services)
- Sell for fiat: Usually a taxable disposal; gains/losses = proceeds − cost basis − fees.
- Swap crypto→crypto: Commonly treated as disposal of the asset given and acquisition of the asset received at FMV. You realize gains/losses even without cash.
- Spend on goods/services: Paying with crypto typically counts as disposal at FMV at the time of payment.
Income-type events: staking rewards, airdrops, interest/yield, mining
- Staking/mining/yield: Generally income at FMV on receipt; later disposal triggers capital gain/loss using that FMV as basis.
- Airdrops/forks: Treatment varies; often income at FMV when you control the asset. Document claim/receipt timestamps, valuations, and network.
Non-events (usually): self-transfer between your own wallets, buying with fiat
- Self-transfers: Moving coins between your own wallets typically not taxable; fees may be non-deductible or adjust basis depending on local rules—document.
- Buy with fiat: Establishes cost basis; no gain/loss yet.
Edge cases: wrapped assets, bridge events, NFT mints/trades (high-level)
- Wrapping (e.g., ETH → wETH): Often treated as non-taxable transformation, but confirm locally; always record TXIDs and rationales.
- Bridges: Could be non-taxable movement or swap-like depending on mechanism (lock/mint vs burn/mint). Keep detailed bridge logs.
- NFTs: Mints may be expense-like or form part of basis; sales often disposals; royalties/airdrops can be income.
Taxable Events Table
Event | Typical Category (Capital/Income) | Data You Must Capture | Gotchas |
---|---|---|---|
Sell crypto → fiat | Capital | TXID/order ID, timestamp (UTC), proceeds (fiat), fees, original cost basis | Missing exchange rate to base currency; fees not netted |
Swap crypto → crypto | Capital (disposal of asset given) | TXID, asset out/in amounts, FMV of asset received at swap time, fees | Treating as non-taxable; ignoring LP/route fees |
Spend crypto on goods/services | Capital | Merchant invoice, FMV at spend time, fees | No invoice = no FMV proof |
Staking/mining rewards | Income | Timestamp of receipt, quantity, FMV at receipt, wallet address | Accrual vs cash-receipt timing; multiple micro-rewards per day |
Interest/yield (CeFi/DeFi) | Income | Statement or on-chain logs, FMV at receipt | Complex compounding; protocol tokens as rewards |
Airdrops/forks | Income (often) | Claim/receipt proof, FMV, conditions | Dust airdrops; spam tokens—document rationale if ignored |
Self-transfer | Non-event (usually) | TXID, from/to addresses you own, label | Fees treatment unclear; prove common ownership |
Wrap/unwrap | Varies; often non-taxable | TXIDs, amounts, rationale | Bridges masquerading as wraps; chain specifics |
NFT mint | Basis or expense | Mint TXID, mint cost, fees | Gas classification; failed mints |
NFT sale/trade | Capital | Sale TXID, proceeds, marketplace fees | Royalty deductions; bundled sales |
Cost basis and gains/losses (mechanics)
Action bullets (use these):
- Choose a cost basis method (e.g., FIFO or Specific ID) and apply consistently.
- Convert each transaction to your base currency (e.g., EUR) using timestamp-aligned rates.
- Include fees (trading, gas) appropriately in basis or proceeds.
- Track failed/invalid transactions separately to avoid noise.
- Document your policy decisions (in your IPS or notes) for future years.
Methods: FIFO / Specific ID (conceptual), consistent application
- FIFO: First-acquired units are treated as first disposed—simple, widely supported.
- Specific ID: You select which units you disposed of (requires robust lot tracking, often via CEX lot IDs or on-chain lot tagging).
- Consistency: Pick a method and stick to it within the same tax year and asset class unless your jurisdiction allows/mandates a change (document the change).
Adjustments: fees, failed/invalid tx, chain reorgs
- Fees: Trading fees often reduce proceeds or increase basis; gas may be included in basis (acquisition) or disposal costs (sale/swap). Document your rule.
- Failed tx: Reverted transactions with gas spent—store them in a “failed” bucket; treatment varies (expense vs basis adjustment).
- Reorgs: Rare but real; reconstruct using final confirmed TXIDs if a reorg affected your initial record.
Loss harvesting and wash-sale nuances (conceptual only)
- Loss harvesting: Selling losers to realize losses may offset gains; in some places wash-sale rules may or may not apply to crypto—don’t assume.
- Keep evidence of intent and timing; if rules are unclear, avoid superficial repurchases that look like wash trades.
Record-keeping: the one habit that saves you
Action bullets (use these):
- Export everything quarterly (or monthly if active): trades, transfers, rewards, statements.
- Maintain a wallet address book and derivation notes (xpubs not shared).
- Keep raw exports and a normalized master—both versioned by tax year.
- Store a conversion log (how you got from raw to normalized).
- Back up offline in encrypted archives; test restores yearly.
What to export (CSV/API): trades, transfers, income, fees, statements
- From CEX: Trades, deposits/withdrawals, distributions (staking/interest), fee summaries, monthly statements.
- From DeFi/self-custody: On-chain logs for swaps, LP adds/removes, rewards claims, bridge TXIDs.
- Rates: If your tool doesn’t auto-FX, export a timestamped rate source you can cite.
- Naming convention:
YYYY-EXCHANGE-dataset-utc.csv
(e.g.,2025-binance-trades-utc.csv
).
Wallets: labeling, derivation paths, and reconciling on-chain with CEX logs
- Maintain a labels file:
address,label,chain,notes
. Mark which are yours vs third parties. - Record derivation paths (e.g.,
m/84'/0'/0'
) in a private doc; do not share xpubs/seed. - Reconcile withdrawals → deposits using TXIDs, amounts, and timestamps across CEX and wallets.
Versioning your data: snapshots by tax year; store raw + normalized files
- Create
/raw/YYYY/
and/normalized/YYYY/
folders. - Use a README.md describing your transformations (e.g., merged tickers, fixed UTC, filled missing fees).
- Export PDF statements for each month and store alongside CSVs.
<a id=»crypto-records-pack»></a>
CHECKLIST — Crypto Records Pack (downloadable)
(Copy this into your notes app or print it. Keep an offline copy.)
Files
- CEX trades CSV (all venues)
- CEX deposits/withdrawals CSV
- CEX distributions (staking/interest) CSV
- Monthly statements (PDF) per venue
- On-chain TX logs for active wallets (CSV or JSON)
- FX rate source (CSV or documented method)
Naming & notes
- Unified UTC timestamps
- Canonical tickers (e.g.,
WETH
→ETH
if method requires) - Fees normalized (gas vs trading)
- Labels: wallet ownership, DEX/router notes
- README with transform steps
Retention & backups
- Keep 7–10 years (local rules vary)
- Offline encrypted archive + cloud copy
- Annual restore test completed
Reconciling CEX, DEX, and self-custody
Action bullets (use these):
- Import sources in the right order: CEX → Wallets/DEX → Rates.
- Normalize symbols, decimals, and timestamps before calculating gains.
- Close the loop with inflow/outflow parity and portfolio total sanity checks.
- Document assumptions (e.g., how you treated bridge fees).
- Sample-audit 10 random TXs end-to-end.
Common breaks: missing fees, dust outputs, internal transfers mis-tagged
- Missing fees: DEX routes often bake fees into output amounts; model them explicitly where possible.
- Dust: Tiny outputs (e.g., 0.000… tokens) create noise; apply a de minimis tag in your working file (but keep raw data).
- Internal transfers: Unlabeled self-transfers show as “disposals.” Fix by mapping from/to addresses you own.
Workflow: import order, normalize tickers, unify timestamps/UTC
- Import CEX trades and transfers.
- Import on-chain wallet logs for the same period.
- Normalize tickers (e.g., treat
WBTC
consistently; decide whether wrapping is an event). - Convert all timestamps to UTC; deduplicate overlapping logs.
- Attach FX rates for your base currency at transaction time.
- Rebuild lots (FIFO or Specific ID).
- Compute gains/income, then run sanity checks.
Sanity checks: portfolio totals, inflow/outflow parity, sample tx audit
- Portfolio total at year-end vs wallets + CEX balances (allow for valuation date/time).
- Inflow/outflow parity: CEX withdrawals should match wallet deposits (sum by asset).
- Sample audit: Pick 10 transactions; verify from TXID to final classification. Fix your process if 1–2 fail.
Cross-border view (very high-level)
Action bullets (use these):
- Understand CRS/FATCA concepts: information may flow across borders.
- Your residency drives your tax outcome more than the exchange’s domicile.
- Keep FX conversion notes (source, timestamp) for base currency reporting.
- Document stablecoin treatment: they are not cash in most regimes.
- Avoid moving assets to blocked jurisdictions.
Reporting regimes: CRS/FATCA context (conceptual differences)
- CRS (OECD): Many countries share financial account info automatically.
- FATCA (U.S.): U.S.-focused reporting of foreign accounts held by U.S. persons.
- Crypto treatment within CRS/FATCA is evolving; assume more data sharing over time, not less.
Exchange domiciles vs user residence (what that can imply)
- Your tax residency generally determines what you owe, not where the exchange sits.
- Exchange domicile may affect withholding, KYC friction, and statement formats; not usually your tax base.
Stablecoins and FX conversion notes
- Report values in your base currency; record the FX rate used at each event time.
- Stablecoins may de-peg; treat gains/losses accordingly if your jurisdiction requires it.
Tools and practical workflows
Action bullets (use these):
- Implement the 5-step loop: Export → Normalize → Reconcile → Review → Archive.
- Keep a spreadsheet with your policy choices (basis method, wrap/bridge treatment).
- Use block explorers for evidence; store TXIDs next to each line item.
- Set monthly reminders for exports and large-tx alerting.
- Consider version control (Git) for your normalized CSVs and README.
Export → Normalize → Reconcile → Review → Archive (the 5-step loop)
- Export raw logs from each venue/wallet.
- Normalize with consistent fields (UTC, decimals, tickers, fees).
- Reconcile flows across sources; fix breaks.
- Review: compute outcomes, sample-audit, document assumptions.
- Archive raw + normalized with version and README.
Using block explorers for evidence (TXID, confirmations, memos)
- Save TXIDs, confirmation counts, and route details (e.g., aggregator traces).
- Add memos for self-transfers (e.g., “Cold storage move; same owner”).
- Screenshots of explorer pages (with timestamps) help when tools drop support for old chains.
Alerting/automation ideas: monthly exports, large-tx flags
- Calendar monthly export reminders; more frequent if you trade daily.
- Set email alerts or bot notifications for transfers above X to catch theft or script errors quickly.
Common mistakes and audit triggers (avoidance tips)
Action bullets (use these):
- Don’t treat swaps as non-taxable by default; document your interpretation.
- Don’t ignore fees—they change basis/proceeds and can flip gains to losses.
- Don’t double-count bridge flows; anchor them to a single event.
- Keep income logs (on-chain staking included).
- Keep UTC consistent.
Treating swaps as non-taxable, ignoring fees, double-counting bridges
- Many regimes see crypto→crypto swaps as taxable; ignoring them is an audit magnet.
- DEX and gas fees add up; misplacing them distorts results.
- Bridge events: tag them clearly; do not record both chains as independent disposals unless that’s your explicit (documented) policy.
Missing income logs (staking on-chain vs CEX), wrong timestamps/UTC
- If you stake on-chain, your rewards won’t show in any CEX export—pull from explorers or indexers.
- Mixed timezones break FX mapping and can cause double counting; fix to UTC.
No paper trail for self-custody transfers
- Without labels and notes, tax tools may mark your self-transfer as a sale; prepare ownership proofs.
Security baseline for reporting data
Action bullets (use these):
- Store exports offline and encrypt backups; never upload seed/xpub data.
- Access exchange dashboards from a clean browser profile; use hardware-key 2FA.
- When traveling, prefer hotspot over public Wi-Fi and carry backup codes.
Store exports offline; encrypt backups; avoid sharing xpubs/seed data
- Use encrypted archives (e.g., 7z with AES, strong passphrase). Keep two offline copies in different locations.
- Never share seed phrases or xpubs in email or cloud docs. Document derivation paths privately.
Device/2FA hygiene when accessing exchange dashboards
- Hardware security keys (WebAuthn/FIDO2) for admin email and exchange logins.
- Dedicated “Finance” browser profile with minimal extensions; keep OS and browser patched.
Travel scenario basics (link a US21 security guide)
- See Security for Nomads for a full hardening playbook: /security-for-nomads. Favor withdrawal whitelists, cool-off timers, and backup 2FA you don’t carry across borders.
FAQs (short and practical)
Are crypto-to-crypto swaps taxable?
Often yes (disposal of the asset given). Record FMV at the time of swap, fees, and compute gain/loss. Confirm locally.
How do I tag self-transfers between my wallets?
Label both addresses as yours and keep TXIDs. In tools, mark as “transfer/self” so no gain/loss is computed (fees may be treated per your policy).
What if an exchange closed and I lost statements?
Use email receipts, bank transfer proofs, on-chain withdrawal TXIDs, and any cached CSVs. Document efforts to retrieve data and keep a list of known unknowns for your advisor.
Do I need to report dust/airdrops of tiny value?
Log them. Some jurisdictions allow de minimis thresholds; others don’t. If you ignore spam tokens, document the reason (no control, zero liquidity).
How long do I keep records?
Plan for 7–10 years (local rules vary). Keep raw + normalized files and PDF statements.
Disclaimer
Key takeaways:
- Separate regulatory obligations (KYC/AML & Travel Rule) from tax reporting—but satisfy both.
- Classify every action: disposal, income, or non-event; log basis/proceeds/fees/FX.
- The habit that saves you: Export → Normalize → Reconcile → Review → Archive on a monthly/quarterly cadence.
- Use labels and TXIDs to tie CEX, DEX, and self-custody together.
- Harden your security so your data and accounts survive device loss or SIM-swaps.
Compliance disclaimer: This guide is informational and not tax, legal, or investment advice. It avoids country-specific prescriptions. Always confirm treatment with a qualified professional in your jurisdiction. For a contrast with simpler, non-crypto reporting, see Gold as a Hedge (alternative asset reporting is typically simpler): /gold-as-hedge.
Interlinks:
- Security for Nomads → Tips for maintain safe your criptos.
- US Broker Requirements → Documentation and requirements for the US.
- Criptomonedas para novatos → Detailed guide step by step to adquire Criptos.
- Ledger vs Trezor → Accurate info about hardware wallets.