For every transaction (deposit, withdrawal, trade) Koinly will determine its worth (fair market value on the day), which in turns allows us to calculate the gain or loss on a transaction, establish the cost basis of the acquired asset, etc.
Crypto-fiat trades
For trades where one side of the trade was a fiat currency (USD, GBP, AUD, etc.) Koinly will assume the worth of the trade was equal to the fiat side of the trade.
For purchases of crypto, the fiat value becomes the cost basis of the acquired asset:
For sales of crypto, Koinly compares the fiat value to the cost basis of the disposed asset, calculating the gain or loss:
Crypto-crypto trades
For trades where no fiat is involved, Koinly will use the average market rates from largest market aggregators like CoinMarketCap or CoinGecko. You can see the source of the market rate and which asset's price was used in the transaction details:
For tokens that are not listed on neither of the aggregators, Koinly will not be able to determine the market value automatically and will show a "Missing market price" warning - you can read more about it in:
Fiat forex rates
If your base currency is different than the fiat currency traded, Koinly will use the exchange rates on the day from European Central Bank (ECB) and automatically convert the valuation to your base currency.
📌 Eg. You bought 0.0124 BTC with 1372 USD but your base currency is set as EUR, so Koinly converts the fiat value to 1210 EUR (which becomes the cost basis of BTC)
Koinly has daily Forex rates for every commonly used fiat currency including EUR, GBP, AUD, CAD, DKK, SEK etc.
API-imported value
Some exchanges like Coinbase provide the value of each transaction directly via their API or CSV files. In such cases, Koinly will use this valuation instead of the market average from the aggregators, as it's usually more accurate.
If the market value was imported together with the transactions, it will show a yellow information (ℹ️) badge next to it:
Manually set value
If Koinly doesn't have the market rate for the token you traded or you believe it's inaccurate, you can assign a different worth of the transaction yourself. See how in:
If the market value was set manually, it will show a yellow information (ℹ️) badge next to it, just like for API/CSV imported valuations:





