# How to organise crypto transaction records across exchanges and wallets

<https://kriptometa.com/en/organize-crypto-transaction-records>

Author: Özkan Göçer
Language: English

Published: 2026-10-14T14:33:58+03:00

Updated: 2026-10-14T14:33:58+03:00

![Conceptual illustration of matching exchange and wallet records around an Ethereum transfer](https://kriptometa.com/uploads/kripto-islem-kayitlari-nasil-duzenlenir-borsa-ve-cuzdani-eslestirme-5bac6bb47787_article.webp)

## Quick answer

Organise crypto transaction records by retaining original exports and standardising account, network, asset, time and fee fields. Match the outgoing and incoming legs of transfers between your own wallets; fees can still reduce total holdings. Matching balances does not establish missing acquisition costs or complete a tax return.

A transfer recorded twice can distort a portfolio report. Build a traceable ledger from original exports, then check closing balances before calculating returns.

A portfolio total tells you what your accounts hold. It does not tell you which deposit came from your own wallet, what a transfer cost, or how much of an asset you actually sold. Organising crypto transaction records starts with **reconciling movements before calculating returns**.

Keep three layers: untouched exports, a working ledger with consistent fields, and evidence for transactions that need explanation. The aim is to reproduce each account’s closing balance and identify unresolved entries. Choosing a tax-lot method or preparing a national tax return is a separate task.

## Identify gaps before combining files

List every exchange account, subaccount and wallet address you used. Record the network for each address: identical address strings can appear on different networks. Choose an opening and closing time with an explicit time zone. For example, a review from 1 October 2026 at 00:00 UTC to 8 October at 00:00 UTC can include the start and exclude the end, provided every source follows that boundary.

For each export, note its coverage, download date and report type. A simple weekly or monthly coverage grid exposes missing periods. Without a verified opening balance, you can reconcile changes within the period but cannot reconstruct total holdings by assuming the account started at zero.

[Coinbase statements](https://help.coinbase.com/en/coinbase/taxes/tools/statements) offer monthly and filtered exports. [Kraken’s comparison of Ledger and Trades histories](https://support.kraken.com/articles/115000302707-differences-between-ledger-and-trades-history) illustrates why report names matter: balance movements and executions are different records. A fee shown in quote currency in its Trades export may differ from the asset actually deducted; certain app conversions can appear only in Ledger.

For wallets, use the explorer for the relevant network. [MetaMask’s Ethereum account-history instructions](https://support.metamask.io/configure/accounts/reconciling-and-keeping-track-of-your-accounts) describe an Etherscan CSV export that excludes internal transactions. Do not assume one download covers every network, token movement or DeFi event. When an entry needs explanation, [checking the transaction in a block explorer](https://kriptometa.com/en/track-crypto-transaction) helps locate the underlying evidence.

## Preserve originals and build a separate working ledger

Keep each downloaded CSV unchanged. Give it a descriptive name such as `2026-10_exchange-a_ledger.csv`, then work on a copy. Record the old value, replacement and reason when correcting a field. A fresh export can then be compared with your adjustments without relying on memory.

Import CSV files through the spreadsheet’s data-import tool instead of opening them by double-clicking. [Microsoft explains](https://support.microsoft.com/en-gb/excel/keeping-leading-zeros-and-large-numbers) that numeric-looking identifiers can lose leading zeros or precision beyond 15 significant digits. Assign identifier columns the **text** type before conversion. Reformatting an already damaged value will not recover missing digits.

Amounts and fees should remain numeric so that they can be summed. Check decimal and thousands separators on a few sample rows. Store an unambiguous timestamp such as `2026-10-14T09:00:00Z`, while retaining the original timestamp and time zone in separate fields. For a US account, do not apply a fixed local offset to a whole year when daylight saving time changes it.

Working fields for a combined transaction ledger
| Field group | What to retain | Error it helps prevent |
|---|---|---|
| Source | Filename, row, account alias, provider record ID | Losing the evidence behind an entry |
| Time | Original timestamp, time zone, normalised UTC time | Matching entries to different days |
| Asset | Network, symbol, token contract if relevant, quantity | Combining distinct assets with the same ticker |
| Event | Purchase, sale, transfer, reward or fee; direction | Treating every incoming balance as profit |
| Fee | Amount, fee asset and net/gross convention | Deducting the same fee twice |
| Matching | Execution/order reference, TXID if present, linked rows, status | Importing the same event again |



## Match transfer legs without deleting shared transaction IDs

An ordinary transfer between accounts you own is not a new purchase or sale in a consolidated portfolio ledger. Link the outgoing and incoming entries as one transfer group. Preserve both source rows, then consider them together when calculating portfolio movements. Bridging, wrapping or exchanging assets needs separate treatment rather than being forced into the same simple category.

Use the network, asset, addresses, quantity and timing together. A [transaction hash](https://kriptometa.com/en/glossary/transaction-hash) is useful evidence, not a universal row-deletion key. One on-chain transaction can produce several token movements. An exchange order may have multiple fills, while an internal account movement may have no on-chain identifier at all.

To detect duplicate imports, compare the account, report type, provider record or fill ID, and event leg. Where no reliable identifier exists, flag suspected duplicates and inspect the originals. Two genuine transactions can share a timestamp and amount.

## Worked example: tracing a 0.5 ETH transfer

The hypothetical example below covers two wallets owned by the same person. Wallet A starts with 2 ETH and wallet B with zero. A sends 0.5 ETH to B, with a **0.001 ETH network fee charged to A in addition to the transferred amount**. The fee is an assumption, not a current network quote.

Effect of one transfer on two wallets — hypothetical ETH quantities
| Entry | Wallet A | Wallet B | Combined |
|---|---|---|---|
| Opening balance | 2 | 0 | 2 |
| Two transfer legs | −0.5 | +0.5 | 0 |
| Network fee | −0.001 | 0 | −0.001 |
| Closing balance | 1.499 | 0.5 | 1.999 |



![A 0.5 ETH transfer leaves combined holdings unchanged; a 0.001 ETH fee reduces 2 ETH to 1.999 ETH](https://kriptometa.com/uploads/kripto-islem-kayitlari-nasil-duzenlenir-borsa-ve-cuzdani-eslestirme-f3ea5515ed8a_article.webp)Wallet A reconciles as **2 − 0.5 − 0.001 = 1.499 ETH**. The portfolio has not lost 0.5 ETH; those units changed location. Only the [network fee](https://kriptometa.com/en/glossary/gas-network-fees) reduced the combined quantity. Including the fee in the outgoing amount and subtracting it again in a fee column would produce the wrong closing balance.

An exchange may show withdrawals net or gross of fees. Check the export’s definition before applying the example to your account. The distinction between execution commission, withdrawal charge and network cost is covered in our [exchange-fee comparison](https://kriptometa.com/en/crypto-exchange-fees-compared).

## A reconciled balance does not establish profit

The acquisition cost of an incoming asset is not necessarily its market value when it arrives. If the original purchase record is missing, flag the cost as unresolved instead of entering zero. Quantity reconciliation can be complete while the return calculation remains uncertain.

Provider dashboards can also use their own assumptions. Coinbase’s US beta [portfolio-performance feature](https://help.coinbase.com/en/coinbase/trading-and-funding/sending-or-receiving-cryptocurrency/my-investment-performance) may treat external transfers as assumed returns. Its “realized return” figure can therefore differ from a sale-based calculation covering all your accounts. A dashboard label should not replace the underlying transaction evidence.

Separate the result on units sold from the changing value of units still held. Our [realised and unrealised profit and loss example](https://kriptometa.com/en/glossary/roi-realized-unrealized-pnl) explains the distinction. Once purchase quantities and costs are verified, an [average-cost calculation](https://kriptometa.com/en/tools/crypto-average-cost-calculator) can provide a cross-check. It cannot supply missing purchase history or select the tax-lot method appropriate to your situation.

## Investigate closing-balance differences in order

For each account and asset, calculate **opening balance + inflows − outflows − separately recorded fees = closing balance**. Do not subtract fees again if the outflow already includes them. Reconcile asset units before looking at the dollar total: market moves can hide a quantity error.

- Check the reporting window and time zone first. A movement near midnight may sit in the adjacent day’s export.
- Look for missing accounts, networks and token records. Keep different contracts separate even when their symbols match.
- Inspect failed on-chain transactions. No asset transfer does not necessarily mean no fee was charged.
- Compare overlapping reports. Appending a second export in full can duplicate part of the first period.
- Leave unexplained differences in an exceptions list with their amount, source and required evidence. Do not invent a balancing “other expense”.

Close the review when coverage is complete, transfer pairs are matched and remaining differences are explained. In KriptoMeta’s approach, the useful test is whether you can trace a number back to its source row. Restrict access to raw exports and remove personal details from copies you share. [Recovery phrases](https://kriptometa.com/en/glossary/seed-phrase) and private keys have no place in a transaction spreadsheet.

## Frequently asked questions

### How can I reconstruct records from a closed exchange?

Start with saved exports, account notifications and bank records. A block explorer can verify on-chain transfers but will not reveal every trade made inside an exchange. Leave unsupported entries unresolved and record what is missing rather than inventing amounts.

### How do I spot a CSV imported twice?

Compare the account, source files and provider record IDs, especially where reporting periods overlap. An identical amount or timestamp alone does not prove duplication. Inspect the original records before deleting entries without reliable identifiers.

### Does a trade-history file include every account movement?

Check its stated coverage. Execution history may be separate from deposits, withdrawals, rewards and some conversions. Reading the balance ledger alongside the trade report helps expose missing movements.

### Can I value an old transfer using today’s dollar price?

Today’s price describes current value, not historical transaction value. Where a past valuation is needed, use a timestamp and pricing method appropriate to that purpose. Keep quantities, historical values and current marks separate, with the price source recorded.

### Do I need to download transaction records every day?

There is no universal daily schedule. Choose a cadence suited to your activity and the provider’s historical-access limits. Download a final statement before closing an account or changing service, and check that successive periods have no gaps.

### Does a reconciled spreadsheet replace a tax return?

No. Reconciliation organises evidence and checks quantities. Tax treatment, cost-basis methods and filing requirements depend on the relevant jurisdiction and circumstances; matching balances alone does not establish compliance.
