Koinly will first of all try to determine the market price using data available on your transaction. For example, if you bought 1 BTC for 1000 USD then Koinly will set 1000 USD as the market price. No market prices are needed here.
If you bought the BTC in a different fiat currency ex. 1 BTC for 1000 GBP then Koinly will convert the GBP to USD (or your base currency) using Forex rates for the day of the transaction (more info below). Koinly has Forex rates for every commonly used fiat currency including EUR, GBP, AUD, CAD, DKK, SEK etc.
Market prices for cryptocurrencies
For transactions that don't involve any fiat currency, Koinly will use market data from price aggregators like CoinMarketCap and CoinGecko.
For popular currencies, all prices come from CMC and for lesser-known currencies, we fall back to other data aggregators. Rates are fetched multiple times an hour via the API provided by these services.
Koinly can also fetch market rates directly from certain exchanges like Coinbase and Uphold if you are syncing via API.
If Koinly was not able to find the market price of your coin or token then you will see an error for Missing market price
Market prices for fiat currencies
If your base currency is different from USD then Koinly will apply additional rate conversions to determine the market value of USD in your base currency on the date of the transaction.
The price source for the conversion of USD to Base currency (ex. EUR, AUD, GBP etc) comes from sources such as the European Central Bank. The rates are synced once a day.
Overriding the market price for transactions
If you feel that the market price of some coins is higher/lower than what you paid for them, you can also override Koinly's prices by editing the worth of the transaction.
This is mainly used for deposits and withdrawals since the actual amount received or spent in fiat might differ from the market value at the time.