Skip to content
how-to

How to reconcile crypto transactions: a seven-step process for month-end

12 min read
How to Do Crypto Accounting for Companies With a Native Token background

The short answer: To reconcile crypto transactions, inventory every wallet, exchange and custodian, pull the complete history and prove nothing is missing, de-duplicate, match internal transfers, classify and price each transaction, tie balances per wallet and token to the chain, then post to Xero or QuickBooks and tie the ledger to the subledger. Reconcile balances daily and everything monthly.

A crypto book runs on dozens of wallets, a few exchange accounts, sometimes a custodian, and tokens moving between all of them. Nobody sends you a statement at the end of the month. Comparing tools instead? Start with the crypto reconciliation software guide.

What crypto reconciliation proves

Three reconciliations, stacked. Transaction reconciliation matches every recorded line to a source record, such as a chain transaction or exchange fill. Balance reconciliation matches the quantity per wallet and token to what the chain or custodian shows at a fixed timestamp. Ledger reconciliation ties the general ledger's digital asset accounts to the subledger. A bank reconciliation is only the last two. On-chain, nobody does the first for you.

The seven steps and the evidence each one leaves

StepEvidence it produces
1. Inventory every sourceSigned-off source register, owner and purpose per address
2. Pull complete historyBlock ranges or export logs, transaction count per source
3. Normalize and de-duplicateDe-duplication log with the rule applied
4. Identify internal transfersTransfer matching report, unpaired legs listed
5. Classify and priceClassification rules, pricing source and timestamp rule
6. Reconcile balancesBalance comparison and wallet roll-forward per token
7. Post and tie outJournal entry batch, tie-out schedule, reviewer sign-off

Step 1: Inventory every source

Register every place the company holds or moves crypto: self-custody wallets, exchange accounts and sub-accounts, custodians, stablecoin payment processors, and contract positions (staking, lending, liquidity pools) where value sits outside any wallet balance. Record the address or account ID, chain, key holder and purpose. Then scan every known wallet's outgoing transactions for destinations not on the list. An unknown address is a vendor, a new internal wallet, or a problem, and needs a name.

Step 2: Pull complete history and prove completeness

Completeness fails silently. A missing transaction raises no error, it only leaves a balance that will not tie. Pull on-chain wallets by block range and record the first and last block covered. Include token transfers and contract-generated internal transactions, or fee refunds and DeFi payouts go missing. Some exchange APIs return only a window of history, so take the full CSV export too and compare counts. The count per source is your completeness evidence.

Step 3: Normalize and de-duplicate

Map every source into one schema: UTC timestamp, source account, direction, token, quantity in base units, fee token and quantity, reference hash or ID, counterparty. Duplicates come from overlapping exports, one wallet pulled through two integrations, and tokens appearing as both a chain transfer and an exchange deposit. De-duplicate on hash plus token plus direction, never on amount alone, and log what you removed and why.

Step 4: Identify internal transfers

Moving ETH from a hot wallet to an exchange is neither a sale nor a purchase, but without matching it gets booked as both, inventing a gain and a cost basis. Match legs by hash where both sides are on-chain. Exchange records usually carry no hash, so match those on token, quantity net of fees and a timestamp window. Book the pair as a transfer with the network fee as the only expense. Anything still unpaired is a real external movement and needs a counterparty.

Step 5: Classify and price every transaction

Each line gets a type (purchase, sale, swap, transfer, income, expense, fee, staking reward) and a fiat value. Write the policy down once. Pricing source, timestamp rule (block time, not export time), fee treatment (capitalized on acquisition, deducted from proceeds on disposal, expensed on transfers). Cost basis follows from those choices, and the HIFO and FIFO guide covers which method fits which entity. DeFi lines have their own traps, covered in the DeFi reconciliation checklist.

Step 6: Reconcile balances per wallet and token

This check proves the previous five steps worked. For every wallet and token, compute the closing quantity (opening plus ins, minus outs, minus fees) and compare it with what the chain or custodian shows at period-end. They must agree to the unit. Then build the wallet roll-forward: opening balance, additions, dispositions, transfers in and out, fees, closing balance, per wallet per token. A balance that ties to the chain but not to the roll-forward means the movements are wrong, usually a misclassified transfer.

Step 7: Post to the general ledger and tie out

Post summarized journal entries per account per period and keep the detail in the subledger. Then tie the digital asset, gain or loss, fee and income accounts in Xero or QuickBooks Online to the subledger totals. The ledger holds fiat, not token quantities, so the token-level proof lives in step 6. A manual ledger adjustment that bypasses the subledger is next month's break. The journal entries guide has the templates and the month-end close checklist covers the rest of the close.

Common breaks and how to fix them

BreakTypical causeHow to fix it
Balance short by a round amountMissing transaction: API gap, unsupported chain, incomplete block rangeRe-pull the block range, add the lines, record the new range
Gain on a move between own walletsInternal transfer booked as a sale plus a purchaseMatch the legs, rebook as a transfer, reverse the gain and new basis
Balance off by a tiny fractionFee at the wrong quantity, or wrong token decimalsCheck decimals against the contract, rebook the fee exactly
Same transaction twiceOverlapping exports, or two integrations on one walletDe-duplicate on hash, token and direction, log it, fix the pull
Fiat value differs from the ledgerDifferent pricing source or timestamp, or a manual ledger entryOne pricing rule, reverse the manual entry, repost from the subledger
Unknown token appearsAirdrop, dust, or a scam tokenIncome at fair value if it has one, otherwise zero and flag. Never touch a suspected scam token
Exchange ties, wallet does notWithdrawal in flight at the snapshot, in neither balanceBook the transfer at send time, note the in-transit quantity
Staking or liquidity position missingThe position sits in a contract, not the walletAdd the contract as a source in step 1, reconcile to the protocol's view

The break log

Every difference gets a row, including the ones you resolve in a minute. The log is what a reviewer reads first at sign-off, and it is what tells you in three months that the same wallet keeps breaking for the same reason. Eight columns hold it. Build it in a spreadsheet next to the close file, one row per break, and freeze it with the rest of the evidence at period-end.

  • Source: the exchange, chain, custodian or import where the difference showed up.
  • Wallet: the address or account ID, so a repeat offender is visible across months.
  • Token: the token or contract, because a wallet can break on one token and tie on the rest.
  • Difference: the quantity, in base units, and its fiat value at the period-end price.
  • Cause: what happened, in one sentence. "Missing transaction" is not a cause, "the block range stopped three days short" is.
  • Resolution: what you changed, which entry you posted or reversed, and on what date.
  • Evidence: the proof a reviewer can open, a transaction hash, an export file, a custodian confirmation.
  • Sign-off: who reviewed the fix and when, which is the column auditors go to first.

Custodian reconciliation

A custodian, whether an exchange or a qualified custody provider, gives you a statement, and a statement is a claim, not proof. Reconcile in two layers: your records to the statement (opening balance, movements, fees and closing balance per asset at the statement timestamp), then the statement to the chain wherever the custodian discloses the addresses holding your assets. Where it discloses none, file the custodian's control report and note that no chain check was possible. The PCAOB's staff spotlight on audits involving crypto assets listed ownership of crypto assets and the relevance and reliability of information used as audit evidence among its inspection findings (PCAOB, June 2023). A statement alone settles neither.

Controls and evidence to keep

Reconciliation without evidence is an opinion. Keep every item in the evidence column above plus the break log, frozen at period-end so nothing moves after sign-off.

The AICPA's free practice aid on accounting for and auditing digital assets added chapters on auditing the existence, rights and obligations of digital assets and their valuation (AICPA, June 6, 2024). For US GAAP filers, ASU 2023-08 requires an annual reconciliation of opening and closing crypto asset balances showing additions, dispositions, gains and losses, plus the name, cost basis, fair value and units held per significant holding, effective for fiscal years beginning after December 15, 2024 (Grant Thornton, December 21, 2023). The per-token roll-forward is that disclosure's working paper.

How often to reconcile

Balances daily, everything monthly. The daily check is step 6 alone and catches missing transactions, failed syncs and unauthorized movements the day they happen. The monthly run is all seven steps and produces the evidence pack. Write the cadence down.

What a subledger automates

By hand this works for two wallets. At volume it stops working, and that is the job a crypto subledger does. It matches internal transfers, applies the classification and pricing rules you wrote down in step 5, and keeps the per-wallet, per-token roll-forward current. Breezing pulls activity from 80+ blockchains and exchanges and posts summarized journal entries to Xero, QuickBooks Online and Bexio. Reclassify a transaction after posting and its journal entry updates in place, with no delete and repost. Invoices paid in crypto close without a clearing account, per the invoicing and reconciliation guide.

Quick answers

What is crypto reconciliation?

Crypto reconciliation proves that the transactions and balances in your accounting records match what happened on-chain, on exchanges and at custodians. It runs at three levels: activity against source records, wallet balances against the chain or custodian, and the subledger against the general ledger.

How do you reconcile cryptocurrency transactions?

List every wallet, exchange account, custodian and payment processor. Pull the full history, remove duplicates, pair internal transfers, then classify and price each line. Compare the balance per wallet and token to the chain, investigate every difference, and post summarized entries to the general ledger.

What are the steps in crypto reconciliation?

Seven: inventory every source, pull and prove complete history, normalize and de-duplicate, match internal transfers, classify and price every transaction, reconcile balances per wallet and token to the chain and roll-forward, and post to the general ledger with a tie-out. A classic bank reconciliation covers only the last two, since a bank statement already proves completeness.

How often should crypto be reconciled?

Reconcile balances daily and run the full seven-step process monthly. The daily balance check per wallet and token catches missing transactions, failed syncs and unauthorized movements within a day instead of at month-end. The monthly run adds classification, pricing, the roll-forward and the ledger tie-out.

Why do crypto balances not match the ledger?

The usual causes are a missing transaction from an API gap, an internal transfer booked as a sale and a purchase, a fee priced but never booked, a duplicate import, a token decimal error, or a pricing timestamp that differs between subledger and ledger.

How do you reconcile internal wallet transfers?

Match the outgoing leg to the incoming leg by transaction hash, or by amount, token and timestamp when no hash exists. Book the pair as one transfer with the network fee as the only expense, so you recognize no gain, loss or income on the move.

What is custodian reconciliation?

Custodian reconciliation compares the balances and activity a custodian, such as an exchange or qualified custody provider, reports against your records and, where possible, against the chain. It confirms the assets exist, that you hold the rights to them, and that every movement and fee is booked.

Can you reconcile crypto in Xero or QuickBooks?

Not directly. Xero and QuickBooks Online hold summarized journal entries in fiat, not token balances, so token-level matching happens in a crypto subledger. The subledger posts the entries, and the reconciliation inside Xero or QuickBooks is a tie-out, where the general ledger digital asset accounts equal the subledger totals.

What evidence do auditors want for crypto reconciliation?

Proof of completeness (block ranges or export logs per source), proof of ownership (signed messages or custodian confirmations), the pricing source and timestamp per transaction, the wallet roll-forward per token, a break log with each resolution, and the general ledger tie-out to the subledger, all frozen at period-end.

Bottom line

Crypto reconciliation is a bank reconciliation with the bank removed. Inventory every source, prove completeness before you match, pair internal transfers before you price, tie every wallet and token to the chain, and only then post. Keep the evidence and the break log, and next month starts from a balance you can prove.

Sources

  • Spotlight: Inspection Observations Related to Public Company Audits Involving Crypto Assets, PCAOB, published June 2023, checked 2026-09-03: supports the custodian reconciliation section's claim that the PCAOB's staff spotlight lists ownership of crypto assets and the relevance and reliability of audit evidence among its inspection findings.
  • AICPA Updates Practice Aid for Digital Assets, AICPA & CIMA, published June 6, 2024, checked 2026-09-03: supports the claim that the AICPA's free digital assets practice aid added chapters on auditing the existence, rights and obligations of digital assets and their valuation.
  • ASU 2023-08 clarifies accounting for certain crypto assets, Grant Thornton, published December 21, 2023, checked 2026-09-03: supports the claim that ASU 2023-08 requires an annual reconciliation of opening and closing crypto asset balances with additions, dispositions, gains and losses, plus name, cost basis, fair value and units held per significant holding, effective for fiscal years beginning after December 15, 2024.

More articles

Stablecoin invoicing: how to bill, get paid and close the books in USDC or USDT
Sep 4, 2026how-to

Stablecoin invoicing: how to bill, get paid and close the books in USDC or USDT

How to issue an invoice payable in USDC or USDT, get paid on-chain, match the payment in Xero or QuickBooks, book fees and FX, and account for the receipt.

Cryptio alternatives: the 2026 comparison for finance teams
Sep 4, 2026comparison

Cryptio alternatives: the 2026 comparison for finance teams

Cryptio is an institutional crypto subledger priced by quote. Compare Breezing, Bitwave, Cryptoworth, SoftLedger, and Ledgible on price, ERPs, wallets, and fit.

Crypto accounting journal entries: how to record every common transaction
Sep 4, 2026how-to

Crypto accounting journal entries: how to record every common transaction

Worked crypto accounting journal entries in tables: buying, customer payments in USDC, vendor payments, gas, swaps, staking, ASC 350-60 fair value and IFRS.