My experience with Koinly

I tried using the following software:

  • ZenLedger
  • Accointing
  • Koinly

I didn’t have time evaluate other software, so my experience and feedback is limited to these platforms. Koinly is by FAR the best out of the three in my humble opinion, but still has a lot of room for improvement.


  • Total Time Spent: Poor. 48 hours of work to import, review, adjust, and double-check about 500 transactions.
  • API Imports: Good. Other platforms missed transactions on both wallet and exchange API imports. Koinly got it mostly right.
  • CSV Imports: Good. Other platforms required a proprietary CSV format for all imports. In contrast, Koinly seems to support a lot of native wallet export CSV formats.
  • Token Support: Good. Koinly recongized most tokens I have, but a few were missing.
  • UI/UX: Good. Koinly was by far the best. The navigation hierarchy was the best organized out of the three. A lot of small things still missing though.
  • Customer Support: Poor. The team is probably overwhelmed during tax season, but customer support was non-existant, which is a huge shame. Not even an anouncement that they are overwhelmed.
  • Documentation: Poor. Fragmented, incomplete, hard to find, inconsistent language, and no single source of truth.


Unclear error messages and how to fix them.
The fact that there were errors was clear. What they meant and how to fix them was not. Error messages like missing purchase history triggerd a hunt for documentation which took a lot of time. Suggestions:

  • Better (read, more complete with laymans terms) error messaging
  • Link from error messages directly to official help documentation

Unclear relationship between transaction type and label.
Some labels are available on some types, which wasn’t immediately clear. Suggestions:

  • When opening the label menu, make it clear these labels apply only for this transaction type:
    “The following labels are available for deposits. Don’t see the label you’re looking for? (link to further steps)”

Inconsistent terminology.
When opening the transaction type dropdown, we see an option to mark a transaction as a Trade. When we do so, it’s represented as an Exchange in the transaction list. Taxes are about specifics, and while this seems small, it caused me to waste a lot of time looking for help documentation to explain the difference (only to find out it’s the same thing, I think). Suggestions:

  • Spend some time making the language consistent throughout the app. If different terminology is needed in the context menu vs the transaction list, make that clear. Example: Show both the transaction type and the label in the transaction list so users can see the relationship (Type: Trade. Label: Exhange).

Irreversable actions.
We can merge transactions, but we can’t unmerge them if we did so by mistake. Suggestions:

  • Allow unmerge.
  • If that’s technically not possible, explain that it’s a one-way change.
  • Explain how to work around unmerge if there was an error directly in the UI
    “If you need to unmerge the transaction, delete it and synch the wallet from the beginning”

Incorrect transaction sequences
In cases where many transactions happen at the same time, transactions are listed in the wrong order. One example is where there is a cost and an exchange. Sometimes a third transaction from a different transaction hash is displayed in between them in the transaction history. Suggestion:

  • When there are several transactions at the same timestamp, consider grouping them by transaction hash so costs and exchanges are grouped together.
  • Display the transaction hash on the transaction in the transaction history page so users can easily verify the sequence without the need to expand the transaction to see details (maybe in a small lighter font to avoid information overload).

Fragmented, incomplete, hard to find, and inconsistent documentation.
There’s a lot of information in the help documentation but it’s hard to find. Explanation of transaction types and labels are in different locations and explained slightly differently in each. Spent A LOT of time comparing and contrasting to understand what I should do. Suggestions:

  • A single source of truth for all transaction types and labels.
  • Under each type and label, provide use cases
  • Provide links to the relevant help contextually in the UI. If I’ve labeled something a swap, I should be able to jump to the documentation that explains it directly from the UI.

Incomplete filter/search
Sometimes I want to track a transaction flow between several tokens. Example: ETH ➜ Token X ➜ Stake token X ➜ Unstake token X ➜ ETH. Date range isn’t applicable because there are other token transactions in between. Suggestions:

  • Allow users to filter multiple token types
  • Allow users to exclude certain token types from the filter
  • In the token list, provide a section that displays tokens currently in the user’s history (example, there are many SLP tokens, but only one of them is in my history… I shouldn’t have to guess which SLP token I want to filter for… I want to filter by the one that is in my history.
  • Allow options to show 50 or even 100 transactions at once.

Small UI issues
Plenty of small ui issues. Some small ones that jump to mind:

  • Transaction synching notification is in the bottom left. This is conveniently placed over the ‘Save’ button when editing a transaction.
  • Transaction synching notification has an “X” button implying it can be closed, but clicking it does nothing.

Customer support
Nonexistant. Suggestion:

  • Display a notification when you are experiencing delays directly in the UI so customers are aware.

That’s all from the top of my head. Plenty more, but these were the most painful.

Overall, I’d summarize by experience as somewhat happy but frustrated at the same time.