Accurate crypto tax reports begin with a complete transaction history. CoinLedger supports several import methods—exchange API or OAuth, platform CSV files, public wallet addresses and manual entries. This tutorial explains when to use each method and how to avoid missing cost basis, duplicated trades and incorrect transfers.
Prepare a complete account inventory
Before importing anything, write down every exchange, broker, wallet and blockchain used in every tax year. Include closed accounts, old phones, hardware-wallet addresses, DeFi wallets and services used only for rewards. A disposal in the current year may depend on a purchase made years earlier, so importing only the filing year can leave the original cost unknown.
Method 1: API or OAuth import
API connections can synchronize exchange history without repeated file uploads. In CoinLedger, open the Import stage, choose Add Account, select the exchange and follow its current instructions. OAuth connections redirect to the exchange for authorization. Traditional API connections require keys created in the exchange settings.
Grant read-only or view permissions. CoinLedger does not need trading or withdrawal authority to calculate taxes. If an API form requests broader access, stop and re-check the official guide and domain. After connection, confirm the imported date range and transaction count rather than assuming the API returned every historical record.
Method 2: exchange CSV files
CSV import is useful when an API is unavailable or does not provide complete history. Download the exact report identified in CoinLedger’s platform guide. Exchanges may separate spot trades, conversions, deposits, withdrawals, futures and rewards into different exports, so several files may be necessary.
Do not edit a native exchange file unless the guide explicitly instructs you to. Spreadsheet applications can change timestamps, long identifiers or decimal formatting. Upload the file to the matching exchange account in CoinLedger and review errors before trying an alternative template.
Method 3: blockchain wallet address
For a supported blockchain, add the public address used by the wallet. A public address is safe to share for transaction lookup; a seed phrase and private key are not. Never type recovery words into CoinLedger or any tax application. Repeat the import for every relevant chain and address.
Wallet imports may detect activity from supported dApps automatically. Still review bridges, wrapped assets, liquidity positions, NFT transactions and staking. New or unusual contracts can arrive as uncategorized activity that needs manual classification.
Method 4: Universal Manual Import
Use CoinLedger’s Universal Manual Import template for unsupported or partially supported platforms. Keep the original headers, use the required UTC timestamp format and do not add currency symbols or extra characters. Enter each buy, sale, swap, deposit, withdrawal, income item and fee in the appropriate fields.
- Keep an untouched copy of every original exchange export.
- Do not delete optional template columns; leave unused cells blank.
- Use consistent asset symbols and distinguish tokens on different chains.
- Import a small sample first when mapping a complicated file.
- Check the error message before repeatedly uploading a failed CSV.
Preventing duplicates
Duplicates commonly appear when the same exchange history is imported through both API and CSV or when overlapping date ranges are uploaded. Review existing accounts before adding another connection. If updating a file import, follow CoinLedger’s start-date settings or platform instructions so old records are not added again.
Review after importing
Inspect missing-cost-basis and negative-balance warnings. Match transfers between your own accounts so they are not treated as sales or income. Compare asset balances with external records and spot-check several high-value transactions against exchange statements or blockchain explorers.
When should an import be refreshed?
Refresh a connected account after new trades, deposits, withdrawals or rewards and before producing final reports. A refresh may append records, so confirm that the connection did not change its historical scope. For file-based accounts, keep a note of the last imported timestamp and follow the platform guide when adding a later period.
When an exchange corrects a statement or a blockchain reorganizes activity, compare the updated source with the existing CoinLedger account before replacing data. Keep a dated backup of exported reports so changes can be explained later.
Final takeaway
The fastest import method is not always the most complete. Use API access where it reliably covers the account, CSV files where platform reports are authoritative, public addresses for on-chain activity and manual templates for gaps. A careful reconciliation before generating forms can prevent far more work during filing or an audit.


