CSV Export to CoinTracker: Setting Up Cryptocurrency Tax Accounting

Manual export of transactions to a tax service almost always produces discrepancies: transfers between wallets are double-counted, and cost basis is lost. We set up CoinTracker integration turnkey — from wallet and exchange audits to ready-to-use reconciliation procedures. Automated reconciliation reduces reporting preparation time many times over and eliminates manual tagging errors.

Blockchain Development Services

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1365
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1330
  • B2B Advance company logo design
    B2B Advance company logo design
    776
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1077
  • AIDER company logo development
    AIDER company logo development
    1022
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1113

CoinTracker integration vs manual export: where accounting breaks

Cryptocurrency tax accounting breaks not at the calculation stage, but at the input — where data is collected manually.

CSV export into CoinTracker for each exchange arrives as a separate file, wallets return history in their own format, and some transactions remain outside the export. The calculation module receives not the movement of assets, but a set of poorly compatible fragments.

The first breaking point is a transfer between your own addresses. If the row is not marked as an internal transfer, the debit and credit are recognized as two independent transactions: the debit goes into expenses, and the credit goes into income at the price on the date. A profit that did not exist appears in the report.

The second is lost cost basis. An asset bought long ago and moved between several wallets enters accounting without its original price; the first-in, first-out write-off method substitutes a zero basis, and the tax base grows out of nowhere. The error is silent — it is not visible until the first reconciliation.

The third is duplicates and misaligned periods. There is no unique transaction identifier in the file, so a repeated export for the same interval adds rows again, and manual export of transactions over several years accumulates dozens of overlaps. One missed row changes the remaining lot balance and drags down the totals of subsequent periods.

Discrepancies in the report are revealed during reconciliation and cost days of manual review, and the next export brings them again. Let's break down how this is closed.

What automatic transaction reconciliation and cost basis provide

Manual tagging breaks on the very first transfer between your own wallets: an unmarked movement of funds turns into a fictitious sale with zero basis.

Automatic transaction reconciliation removes this work — matching is done by time, amount, and network fee, and the cryptocurrency cost basis is restored across the entire chain of transactions.

Inputs are CSV exports from exchanges and wallets, and the output is a single register of transactions without duplicates: the same order imported in two ways collapses instead of doubling turnover.

Each row stores a link to the source transaction, so a discrepancy is traced down to a specific transfer, not to "somewhere in March."

The accounting method — first-in, first-out or average cost — is set once and applied to the entire history, not to a single period. Changing the method recalculates the entire chain, and you can see how this changes the result before the numbers go into crypto reporting.

The result is transaction reconciliation that can be presented to an auditor: turnover matches platform exports, accounting for transfers between wallets does not distort the basis, and the report is reproduced from the same data again.

CoinTracker covers this part out of the box, and we configure import, matching rules, and discrepancy resolution for your set of exchanges and wallets — including those that synchronization does not pick up automatically.

CoinTracker integration or manual export: comparison of approaches

The method of keeping records determines how much manual reconciliation remains at period close. In practice, people choose between three modes: one-time export, regular manual upload, and continuous transaction synchronization — and the difference only shows up at scale.

While there are dozens of transactions and one platform, manual CSV export wins on setup time.

As soon as wallets, staking rewards, and transfers between your own addresses are added, reconciliation starts consuming hours in each period, and a missed transaction turns into a break in the chain.

Option When it fits Limitations Effort
One-time CSV export Close one reporting period, one platform, few transactions No accumulated history; each new export is manual reconciliation again A few hours one-time, and again with every format change
Regular manual upload Several platforms, infrequent transaction flow Any omission breaks the chain; a process and an owner are needed Fixed effort in each period
Continuous synchronization Active trading, many exchanges and wallets One-time setup of access, reconnection when keys change Setup once, then minutes to check

Implementation stages: from wallet audit to handover of the process

Implementing crypto accounting starts not with export, but with an asset flow map: until it is clear which wallets, exchanges, and counterparties are involved in turnover, reconciliation falls apart on the very first transfer.

That is why a crypto transaction audit comes first, and data exchange setup comes after for the ready tagging scheme.

  1. Inventory of sources. Exchanges, custodial and hardware wallets, staking, over-the-counter trades, transfers between your own addresses — we set up access as read-only.
  2. Transaction tagging scheme. We fix the types: purchase, sale, swap, internal transfer, staking income, network fee. For each, a lot write-off rule so that a transfer between your own accounts does not become a second taxable transaction.
  3. Data exchange setup. Unified tickers, a single time zone, regular exports to CSV and via API into CoinTracker. We separately review rows with zero and broken amounts — they account for the majority of discrepancies.
  4. Convergence check on a test period. We take a closed interval and reconcile balances for each address, number of transactions, income, and fees. We explain every discrepancy line by line rather than closing it with an adjustment.
  5. Handover of the accounting process. We hand over the asset flow map, tagging rules, period close instructions, and a report template for accounting.
  6. Support for the first cycle. We go through period close together with your team, and add edge cases to the process.

Handover package: configurations, flow charts, processes

After launch, all accounting remains with the client — not in chat messages and not in the engineer's head, but in the repository, instructions, and processes.

The package is assembled so that accounting and the internal technical team can change the scheme independently, without contacting us for every edit.

  • Source map: exchanges, wallets, custodial services — export method, period, person responsible for rotating read-only keys.
  • Asset flow chart: transfers between your own accounts, withdrawal to fiat, internal movements — with an explicit note of which transaction creates a taxable event and which does not.
  • Transaction tagging rules: dictionary of categories and tags, transaction matching procedure, processing of accruals, fees, and "stuck" transfers.
  • Handover of import settings in CoinTracker: account matching, reporting base currency, time zone — a repeated upload produces the same result, not a new reconciliation.
  • Instructions for accounting: period close procedure, how to look for discrepancies, what to do when data for an account is incomplete.
  • Period close process: deadlines, reconciliation checklist, control points, and the procedure if a discrepancy is found after reporting is submitted.
  • Accounting documentation and change log: how an edit in tagging affects already submitted periods and who approves such changes.

Handover is not an archive of files. We walk through each item in a review session, run the import on a test period, and record who is responsible for each step.

Case study: transaction reconciliation in a multi-exchange portfolio before and after

Before: where cost basis was lost

The input was a multi-exchange portfolio of four exchange accounts, two cold wallets, and several years of transactions.

This is a typical tax accounting case: some transfers between platforms were not matched to withdrawals, and the cost basis "got stuck" in an intermediate wallet instead of moving to the sold asset.

Reporting reconciliation relied on manual review — about three days per quarter were spent, and some sales remained without full cost basis.

After: what we changed

We brought exports to a unified format, linked "withdrawal — deposit" pairs across all platforms, and added duplicate checking by time and amount.

CoinTracker pulled history through direct connection to exchanges, and irregular transactions through file import with an upload log.

Implementation results

The share of automatically matched transactions rose from 78% to 99.6%, and quarterly reconciliation shrank from three days to two to three hours.

Before setup, every check started from scratch; now the cost basis reaches every sale, and the tax base is calculated from actual costs, not from zero.

Isolated discrepancies remain, but each is recorded in the log with a reason — during an audit, the entire path of a transaction from entry to report is visible.

What to do if transactions are already tagged manually and do not reconcile?

When a report does not reconcile after manual transaction tagging, the cause is almost always one of three: duplicate transactions, lost cost basis, and unmarked transfers between your own accounts.

There is no need to rebuild accounting from scratch — it is enough to put three data layers in order in the correct sequence.

A transfer between an exchange and a wallet in an export looks like a debit and a credit. Until both sides are linked as a transfer in CoinTracker, the system sees a sale and a purchase — hence extra turnover and an inflated result.

We match pairs by transaction ID and address, not by matching amount and date: otherwise two similar transfers to different accounts get merged.

Lost cost basis is closed by linking the missing leg: to the disposal we add a purchase with the original date and price from the exchange export or blockchain history.

If the price is unknown, the transaction is marked as estimated with the source specified — otherwise the report looks reconciled, but the calculation basis remains opaque for audit.

The order of work matters more than the edits themselves: first deduplication and tagging of transfers, then cost restoration, and only after that recalculation of the period.

Any correction to an early transaction changes the basis for subsequent disposals, so we run recalculation from the earliest corrected date forward, not across the entire history.

Control is reconciliation of balances for each account at period end with platform and wallet exports. A balance discrepancy points to a missing transfer leg, not to a calculation error.

Disputed accounting areas: duplicates, transfers, missing basis

Even with a correct export, some items remain disputed: transfer between your own wallets, in-service swap, fractional assets, transactions without saved cost basis. We break down how CoinTracker treats each case and what to configure before period close.

Is a transfer between your own wallets a sale?

No, it is a movement of an asset. The error occurs when import pulls in only one side: the debit is visible, the credit is not, and the system treats the transaction as a sale without writing off cost basis. Both sides are linked as your own wallets and marked as an internal transfer.

Does an in-service swap lose basis?

Services often show a swap as two separate transactions — a sale and a purchase. Then cost basis is zeroed out and an extra result appears. The transaction is reclassified as a swap, and the basis is carried over to the new asset without breaking the chain.

What if there is no data on the initial purchase?

Transactions before accounting was connected or an export from a platform that does not store history leave the position without basis.

Opening balances are entered with the date and value at that time, or a zero basis is recorded — in the second case, the result is calculated from the entire amount.

How to account for fractional assets and period close?

Rounding to whole units accumulates a discrepancy in balances, so values are stored with full precision, and reconciliation is done against final balances.

After reconciliation, the period is closed, and edits are not made to closed transactions — otherwise the report stops reconciling.

Let's discuss your task: transaction audit and setup plan

It is convenient to discuss the task when you have exports on hand: CSV from exchanges and wallets for at least one closed period, a list of public addresses, a list of assets.

They show the structure of transactions, the amount of manual work, and the places where accounting diverges from reality. This is enough to give timelines and assemble an accounting setup plan without assumptions like "we'll clarify later."

The first step is a transaction audit: we reconcile incoming and outgoing flows, catch duplicates on repeated import, missed transfers between your own wallets, fees, and rewards.

Then we fix ticker and category matching rules in CoinTracker, so that reporting matches between periods instead of being reassembled every quarter.

What we need from you and what we do:

  • transaction exports for the required periods and access to platforms where history is stored;
  • list of addresses, exchanges, and assets, including staking and yield accruals;
  • transaction audit with a list of discrepancies, duplicates, and uncovered transfers;
  • categorization rules: trading, transfer, fee, reward, withdrawal;
  • accounting setup plan with owners and the delivery point for the first report;
  • test run on one period and reconciliation of totals with your own reconciliation;
  • timeline estimate by stage: audit, setup, first full report;
  • reporting support — updating rules for new transaction types.

Describe the task — we will come back with an estimate and a plan, and then we will keep accounting exactly within the boundaries we agreed on.