If you are wondering how to file your tax with your crypto profits in mind, then you may be wondering which is the best crypto tax software to do this. In my post, I am going to reveal my personal experience using Koinly and Turbo Tax for my Crypto Taxes. Let’s go!
First of all, why did I choose Koinly?
I chose Koinly mainly because they allowed me to connect all the relevant exchanges and wallets I had. The biggest draw was that they supported Theta, which I used significantly in 2021. Koinly has proven to work fairly well. They support many exchanges and wallets and for the most part, importing data was pretty straightforward. I did hit some roadblocks though and I’ll go into detail on those below.
Pricing for Koinly was reasonable compared to some other sites. With over 2,000 transactions I paid something like $150 for tax reports. It should be noted that you don’t have to pay for Koinly until you want to generate tax reports.
So starting at the beginning, we’ll talk about the first set of difficulties I faced.
Importing transactions is pretty straightforward if you’re familiar with how crypto works. You can integrate with exchanges using APIs and this is pretty simple for places like Coinbase, but for lesser known exchanges like Bitrue for example, it doesn’t work as expected. For several exchanges, the API only reported certain transactions. For Binance.us, none of the Fiat deposits showed up so I was missing the purchase history for a lot of my trades. To fix these discrepancies I had to download CSV files from the exchanges and upload those to Koinly. The issue here was that this file can include every single transaction, so if you just upload it directly to Koinly you may end up creating duplicate transactions, which is what happened to me. I then had to go through and delete all the duplicate transactions.
(To prevent this, one could delete all the transactions except for the ones they were missing from the API, and then upload only those transaction from the CSV file.)
I eventually figured out all those issues. The next problem I ran into was Bitcoin using the Coinbase Wallet. Coinbase and Coinbase Wallet are two separate programs. I bought crypto on Coinbase, then sent it to the Coinbase Wallet, where I had the keys. What I didn’t really understand going into this process was the UTXO system that Bitcoin uses. I’m not going to spend much time on this concept but, essentially, it stands for Unspent Transaction Output, and any unspent coins in a bitcoin withdrawal go to a new wallet address. It works like cash and change. Suppose you want to spend $20 but only have a $100 bill. You give someone the $100 bill and they give you $80 in change. For certain Bitcoin wallets, that $100 would be taken out of one wallet address, the $20 sent to the intended recipient, and the $80 in change would go to a new wallet address. So, I sent $1,000 in BTC to somewhere. The way the Coinbase wallet handles this is it takes all the money in one wallet address out, sends $1000 somewhere, and then puts the remainder back in a new wallet address I own. How does that work? Again, without getting to far into the weeds, this is easily explained by how crypto wallet addresses are generated. With one seed phrase, you can generate an insane number of private keys, and from there you can generate an insane number of public keys. So one seed phrase could effectively generate infinite wallet addresses. While this is good for security, it’s very difficult to track transactions this way on the blockchain.
So the hurdle stems from this. I thought that I could just put in my Coinbase Wallet BTC public address and it could find all the transactions. But that didn’t happen. It only recorded transactions for that specific BTC address, not my entire wallet. This sent me on a mission to track every wallet that was used in my many BTC transactions. This was a huge, frustrating waste of time. What needed to be done was I needed to get my Extended Public Address from my Coinbase Wallet.
What is that and how do I get it?
The Extended Public Address is basically the public address that holds all your other derivable public addresses. For most wallets like Exodus or Trust Wallet, you can export this from the app. With other wallets without this feature, including Coinbase Wallet, you have to derive that XPUB key yourself using a relatively advanced method that’s actually fairly risky if you don’t know what you’re doing.
I ended up moving the BTC out of this wallet, deriving my keys, (if you’re curious the Coinbase Wallet uses BIP84 encryption, not the typical BIP 32), and then upon entering that into Koinly, all the BTC transactions were then entered correctly.
Now, this worked for BTC. It did not, however, work for DIVI. I ran into a similar situation with DIVI. Fortunately, I only had a few DIVI transactions relative to BTC, so, I finagled it work but downloading CSV transactions from the DIVI wallet. And it was a good thing I was so thorough because I found 17,000 DIVI on a wallet I had forgotten about!
So far we’ve only discussed getting all 2000 transactions into Koinly. Once you get all your transactions, you have another set of issues to deal with. The biggest one I was concerned with was the fact that anytime you send crypto somewhere and Koinly doesn’t catch that you sent it to a wallet you own, Koinly considers that a disposal, which is a taxable event. Transferring to wallets that you own is not a taxable event. So you have to make sure you include every wallet you own, and you have to go through and make sure that each withdrawal is actually a withdrawal, not a transfer. For the most part, Koinly’s software is smart enough to match up these transactions. But there were some mistakes and those could have cost me several thousand dollars in taxes if I wasn’t thorough. And to be clear, when I say “being thorough”, I mean spending nearly 2 weeks going through every transaction to ensure accuracy.
Here I’ll make a suggestion that would cut this time down significantly; Keep a manual Ledger. Every trade or transfer you make, write down the time and date, the coin, the dollar value, where it’hats going, and what the purpose is. I spent hours tracking down transactions that I didn’t remember why I made them or where I sent them. There are several ETH wallets I have that I have apparently forgotten about. Why did I send ETH there? What wallet did I use? Why did I take the ETH out? Don’t know. And don’t really have any other way of figuring it out.
Alright. So you’ve imported your transactions, you’ve verified that all the transactions, and now you’re ready to purchase a tax plan and export your records.
All this went fine. In fact, if you have an accountant, after you export the Schedule D and 8949 Form, you’re essentially done.
But what if you’re like me and usually file your own taxes? Well, then you have to get those transactions to wherever your doing your taxes. For many people, including myself, that happens to be Turbotax.
So, TurboTax will ask you if you’ve sold crypto during the tax year. Upon clicking “yes”, you’re brought to a screen that allows you to login to popular exchanges and/or at least one tax tracking software (CoinTracker). The issue here is that logging into Coinbase won’t allow you to track transfers, etc. So if you used Koinly or some other crypto tax tracking, you have to upload a CSV of all your crypto disposals.
Koinly exports a report that is set up specifically for TurboTax. Which was great. Upon uploading the file, I had about 900 disposals being reported. All went well until I got to the end and TurboTax reviewed the return. At which point I was met with a screen saying there were 900 things I needed to review and fix before I could move on. Upon investigation I learned that I needed to answer a single question for every single transaction: “How did you receive this investment?” Answers include, “I purchased it, I inherited it, I received it as a gift, Something Else”.
Surely there had a to be a way to include this information in the spreadsheet? After researching online and contacting TurboTax directly on two separate occasions, I found the only way forward was to go through every transaction and answer the question. At this point I deleted all the transactions that had $0 in cost basis and proceeds because I figure the IRS is really only after the 12% on the profits. This dwindled my transaction history down to around 400. So I spent nearly 3 entire days clicking “Fix”, “I purchased it”, and “Continue”. I can’t seem to capture the intense boredom I felt doing such a tedious task.
But, upon finishing, I was done. Now, all my transactions are tracked, correct, and reported to the IRS who want to profit off my brilliant trading strategies.
Some take aways:
- Keep a Master Ledger. Write down your transactions somewhere and be detailed with what you’re doing. Don’t rely on exchanges, wallets, or the blockchain to track your transactions accurately.
- Keep a detailed list of your wallets and wallet addresses.
- Be willing to spend the time to make sure things are accurate, or,
- Get an experienced CPA who understands crypto to help you file taxes.
So what am I going to do about next years taxes? I’m not sure. I’ll see if TurboTax keeps integrating new software to make crypto tracking and reporting easier. If by next year they haven’t fixed this, then I’ll likely do some research and find a good CPA.
I breezed through a lot in this article, but there’s a lot that could be discussed further. Such as staking income, liquidity pools, and how to reduce or defer tax liability legally. These are all things I’d love to discuss more in the future.
At any rate, thanks for reading and hope your tax seasons goes by without a hitch! Do you have any experience with Koinly or have your own Best Crypto Tax Software choice? Let me know in the comments below!