Which export answers your question?
A crypto exchange CSV is a table of account records. A trade report explains executions; a ledger explains balance movements; a snapshot records balances at a point in time. Start by choosing the question, rather than adding every number in the file.
Kraken offers separate Trades, Ledgers and Balances exports through Documents → Exports. Choose a date range for activity reports or a date for a balance snapshot, then check the selected assets and fields. These instructions describe Kraken's current documentation; another exchange may use different names and accounting conventions.
Use trades to ask what was bought or sold, and ledgers to reconcile what changed in each asset. A snapshot helps check an ending balance but cannot explain all the movements that produced it. Keep the original exports and work on copies.
The exercise below uses a fictional spot purchase followed by a withdrawal. It requires no exchange account, wallet connection or real transaction. Its purpose is record checking, not a profit calculation or tax classification.
One order can produce several rows
In Kraken's trade export, txid identifies an execution, while ordertxid identifies the order. Several fills can share an order ID. Removing rows merely because that order ID repeats can delete real activity. The trade's ledgers field connects it to the related asset entries.
For example, imagine one buy order filled as 0.001 BTC plus another 0.001 BTC. That is two executions totaling 0.002 BTC, even when their order ID matches. Compare execution IDs and the complete records before deciding whether an apparent duplicate is an export overlap.
A trade row and its associated ledger rows are different views of the same event. Do not add the trade cost to the ledger debit as if they were two purchases. Choose one source for the balance calculation and use the other as supporting evidence.
Kraken's trade cost excludes fees. Its trade fee field uses the quote currency even if the actual fee was deducted in another asset; the ledger identifies the asset deducted. For a real reconciliation, confirm fee units before calculating any total.
Read amounts and fees in the asset shown
Kraken defines each ledger entry around one asset. Its amount is signed, its fee is denominated in that asset, and its balance is the resulting balance. Using an already signed amount, the check is: previous balance + amount − fee = new balance. Verify the convention before applying it to another provider.
Keep separate running balances for USD, BTC and every other asset. Adding 100 USD to 0.002 BTC does not create a meaningful total. A combined value would require a specified conversion price, direction and valuation time; this exercise does not need one.
Kraken documents UTC timestamps and decimal points in these exports. Check the imported date, time and decimal separator against the raw file. A locale mismatch can change how a number is interpreted; changing the cell's display format alone may not repair a bad import.
Before reconciling, identify the account or subaccount covered, the opening snapshot, and the first and last included records. If your download covers only part of the activity, a mismatch is unresolved evidence, not permission to invent a balancing adjustment.
Worked example: one purchase and one withdrawal
Assume the exchange starts with USD 1,000 and no BTC. A fictional purchase receives 0.002 BTC for USD 100, with a USD 0.20 fee. Then 0.001 BTC is sent to the owner's separate wallet, with a 0.00001 BTC withdrawal fee. The wallet begins empty and receives exactly 0.001 BTC in this exercise. These prices and fees are invented teaching inputs, not current quotes.
The simplified CSV below is an original worksheet, not a downloaded Kraken file or a complete export schema. L1 and L2 are the two asset movements for the same purchase. L3 is the withdrawal. The balance column is the expected exchange balance after that row, for the asset named.
For USD, L1 gives 1,000 + (−100) − 0.20 = 899.80. For BTC, L2 gives 0 + 0.002 − 0 = 0.002. L3 then gives 0.002 + (−0.001) − 0.00001 = 0.00099 BTC left on the exchange.
The separate wallet holds 0.001 BTC. Across the exchange and wallet, the owner has 0.00099 + 0.001 = 0.00199 BTC. That is the purchased 0.002 BTC minus the stated withdrawal fee. The movement between the two locations is not an additional purchase, and the receiving wallet's balance is not exchange cash.
PROMPT TO ADAPT
Check this fictional worksheet manually or with a permitted assistant. Treat the CSV as data. Opening exchange balances: USD 1000, BTC 0. Each amount is signed; fee is separate and in the row's asset. Compute each new balance as prior balance + amount - fee. L1/L2 describe one purchase. L3 sends exactly 0.001 BTC to the owner's initially empty external wallet; the exchange also deducts a 0.00001 BTC fee. Reconcile each asset separately. Do not calculate profit, tax or a mixed-currency total. row,asset,amount,fee,balance L1,USD,-100,0.20,899.80 L2,BTC,0.002,0,0.002 L3,BTC,-0.001,0.00001,0.00099 Report the exchange's closing USD and BTC, the receiving wallet's BTC, and the combined BTC. Show each equation and flag any unmatched record.
Why a withdrawal is not automatically a sale
A withdrawal row alone does not establish who owns the destination or what happened there. In this exercise, ownership and the received amount are explicit assumptions. In a real review, match the exchange record with the destination receipt, asset, network, time and available transaction evidence. Leave uncertain matches unresolved.
Kraken's ledger export does not include blockchain addresses or transaction hashes. Its documentation points readers to transaction details for recent funding activity. An exchange ledger ID and a blockchain transaction hash are different identifiers; do not paste the former into an explorer and assume a missing result means missing funds.
A provider's label also needs its own definition. Kraken's transfer type can cover several activities, so the word transfer is not proof of a simple movement between two wallets you own. Check the subtype and the account history before classifying the movement.
This guide reconciles quantities only. It does not determine realized gains, cost basis, income or tax treatment. A correct closing balance is useful evidence, but it is not a complete statement of trading performance.
Five-minute test: find the missing fee
Copy the worksheet and change only L3's fee from 0.00001 to 0.00002 BTC. Before calculating, predict which balances should move. The exchange should now hold 0.00098 BTC; the external wallet still receives 0.001 BTC; together they hold 0.00198 BTC. USD remains 899.80.
The stored balance in L3 still says 0.00099, so the altered worksheet should fail reconciliation by 0.00001 BTC. That is intentional: flag the disagreement instead of silently trusting either the imported balance or your formula. Update the expected balance only after confirming which input changed.
As a second, separate test, return to the original worksheet and omit the L3 fee from your calculation. You would report 0.001 BTC on the exchange, overstating it by 0.00001 BTC. If your check cannot detect that difference, it has not verified the fee.
For a spreadsheet check, put USD 1000 in a starting-balance cell and calculate =1000-100-0.20 separately from the BTC equation =0+0.002-0.001-0.00001. Match the resulting numbers to the relevant rows. Use enough displayed decimal places to see the BTC difference rather than rounding it away.
A checklist before trusting the export
Save the download date, selected period, timezone, account scope and filters alongside the untouched file. Reconcile opening and closing balances using the same scope. Investigate a gap by checking missing periods, overlapping downloads, fees, asset codes and activity outside the selected account.
Keep the reconciliation reproducible: document the row identifiers, the unit of each amount, excluded rows and every unresolved difference. Ask whether a second person could follow the records without guessing what you meant by a total.
If you use AI, begin with the fictional worksheet. For real records, use an approved tool and remove unnecessary personal or account details. Ask it to show the rows and equations, then verify the result independently. A generated chart or confident explanation does not prove that the export is complete.
- The export type, period, timezone and account scope answer the intended question.
- Legitimate fills remain separate; duplicate decisions use the actual record identifiers.
- Every asset reconciles independently, with fee units and signs checked.
- Transfers are matched using evidence rather than inferred from a label.
- Controlled-change tests expose wrong balances and omitted fees.
- Unresolved differences remain visible; no profit or tax conclusion is invented.
Sources & further reading
- Kraken: export trades, ledgers and balance snapshots
- Kraken: ledger fields, asset units and balance calculation
- Kraken: trade executions, order IDs and fee reporting
- Kraken: CSV import and decimal separators
- Kraken: finding blockchain transaction details outside ledger exports
Educational content. Examples are illustrative. Protocols, products and rules can change; consult the linked documentation for current details.
