Crypto

Best Crypto Tax Software For 2023

Why Do We Need Crypto Tax Software?

Best Crypto Tax Software September 2023

We spent hours analyzing various crypto tax software. We then rated our experience with each of them. The table below summarizes our overall experience calculating our taxes on crypto with each tool.

Below the table, we walk through our methodology and how we went about testing each of these crypto tax tools.

SoftwarePlan & CostOverall ExperienceAccuracyAutomationUser ExperienceAwakenCoinTrackerCrypto Tax CalculatorCoinLedgerKoinlyAccointingTokenTax

Methodology: Comparing Crypto Tax Software Tools

Part 1: The Play-By-Play

We started with ~$500 of USDC, made a bunch of transactions, and then (tried to) calculate our taxes using these eight different providers.

The goal?

Find out which crypto tax software products were the most accurate, most automated, followed the crypto tax rules, and had the best user experience in preparing a crypto tax report.

What Crypto Transactions Did We Make?

1. For starters, we swapped $500 worth of USDC for ~0.27 ETH on Uniswap, a decentralized exchange on Ethereum.

2. We then used some of this ETH to buy an NFT on X2Y2, an NFT trading platform.

3. We then deposited some of this ETH into AAVE, the top borrowing/lending platform on Ethereum …

… we borrowed $50 of USDC against this ETH deposit in AAVE …

… then we swapped this borrowed USDC for stETH (a liquid staking derivative for ETH) on Uniswap.

4. We bridged the remainder of our ETH to Arbitrum, a layer-2 scaling solution …

… we waited 15 minutes for the ETH to actually get to Arbitrum …

… we then swapped this ETH on Arbitrum for GMX (the native token of the GMX decentralized exchange) using Uniswap’s deployment on Arbitrum. Then we staked the GMX.

We waited two days …

… and then unwound everything.

The Unwind

  1. We tried to sell our NFT by listing it on x2Y2 …

…. we couldn’t find any takers. So, we disposed of the NFT by sending it to Ethereum’s burn address …

butwe claimed some X2Y2 token rewards (worth ~$1.25) for trading on the platform. Then we swapped these X2Y2 tokens for ETH.

2. We swapped our stETH for USDC and used the proceeds to repay our loan on AAVE …

… we removed our ETH deposit from AAVE.

3. We unstaked our GMX on Arbitrum, and swapped it for ETH using Uniswap …

… we then bridged this ETH back to Ethereum L1 using Hop, a cross-chain bridging protocol. It took a few minutes.

And voila! We got (pretty much) everything back into ETH on Ethereum L1.

Part 2: Assessing the Damage

Well, that was fun.

But what actually happened when we pushed through all of these transactions to build a crypto tax report?

To answer this question, we first took a look at our trusty old block explorers. (Let’s not go into this tax calculation completely blind.)

What Did The Block Explorers Say?

Here are the high level stats that we pulled together from Etherscan (Ethereum block explorer) and Arbiscan (Arbitrum block explorer).

Block explorer summary stats

This quick look at the explorers provided some valuable insight:

  1. We ended with far less (on both an ETH and a USD basis) than the ~$500 we started with.
  2. Ethereum transaction fees were the biggest reason that we lost money.(You’re welcome, ETH stakers.)
  3. Arbitrum L2 transaction fees were way lower than Ethereum L1 transaction fees. (Yup, L2s are actually driving down the cost of transacting on blockchains.)

What Did The Crypto Tax Software Say?

That’s what the block explorers said. But what was the actual tax impact associated with our transactions?

To (try to) answer this question, we put these 7 providers to the test: Accointing, Awaken, CoinLedger, CoinTracker, Crypto Tax Calculator, Koinly, and TokenTax.

For starters, we dropped our Ethereum and Arbitrum wallet addresses into each of their softwares. They loaded up our transaction data, and did some number crunching.

Here are the high-level outputs they came back with:

Results of submitting crypto wallet addresses to different crypto tax platforms

Yikes!

We expected them to be a bit different (and also expected some manual “touch-ups” to be required). But not anywhere close to this different to start with.

So, we started doing some digging.

Doing A “Sanity Check” On Crypto Taxes

We are not CPAs.

(Although they probably wouldn’t know how to account for all of this anyway.)

But we are also not incapable of doing some “back of the envelope” math to check the various crypto tax reports.

Based on our look at block explorers and our (rapidly fading) knowledge of our transaction history, we could safely infer:

  1. We should be reporting losses, not gains. We could have realized some small crypto gains over the two-day span. But we ended with a lot less than we started with.
  2. Transaction fees were the biggest reason we lost money. Across Ethereum and Arbitrum, we paid a total of ~$245 in fees.
  3. Buying and disposing of our NFT was the second biggest reason we lost money. We paid ~$110 for it (including transaction fees) and disposed of it for $0.

So, we did some more digging. We identified the transactions which resulted in the largest preliminary gains/losses across each provider.

Check out the table below.

The blue bars show the biggest gain recorded by each provider. The yellow bars show the biggest loss recorded by each provider.

Gains and losses on crypto taxes

Based on this “sanity check” of crypto tax software programs, we were able to conclude:

  1. Some crypto tax providers recorded large gains when we initially swapped USDC for ETH. CoinLedger and Crypto Tax Calculator marked the cost basis of our initial $500 USDC deposit as $0. So, when we executed the initial swap of USDC for ETH, they recognized gains in the ~$500 range.
  2. Some crypto tax tools did not record the disposal of our NFT as a loss. The biggest loss that CoinLedger realized was ~$26. According to TokenTax’s calculations, we only realized ~$1 of losses throughout the whole exercise.
  3. Some providers did not book a large gain when we initially swapped USDC for ETH (which makes sense from our perspective). They also recognized a meaningful loss when we disposed of our NFT (which also makes sense from our perspective).

At this point, we had an idea of who was in the right ballpark in terms of total gains/losses:

Right ballpark: Accointing, Awaken, CoinTracker, Koinly

More importantly, we knew who was definitely in the wrong ballpark.

Wrong ballpark: CoinLedger, Crypto Tax Calculator, TokenTax

Part 3: The Clean Up

Getting Our Hands Dirty

With our original transaction data loaded into these crypto tax tools, now it was time to “touch-up” our transaction data and fill in some of the blanks.

We had three goals:

  1. Get providers that booked gains to reflect the economic reality that we lost money. (Let’s try to get them into the right ballpark.)
  2. Get providers that booked losses to reflect the correct amount of losses. (Let’s try to get them into the right section of the right ballpark.)
  3. Not spend an exorbitant amount of time doing so. (We wanted to be as correct as possible. But we ain’t got all week here.)

The amount of “cleanup” varied significantly.

Some providers required us to review/classify nearly 30 transactions, while others only required us to review/classify 5.

(Kinda makes sense given how all over the place preliminary gains/losses were.)

Adjusting tax information in crypto tax platforms

So, we rolled up our sleeves and got to making these adjustments.

Analyzing The Output

After making all of the manual adjustments (to the best of our ability), here is where the final gains/losses stood.

Making manual transactions update on crypto tax platforms

Here are some of the “touch-ups” we made along the way to try to figure out the cryptocurrency taxes we owed:

  1. We marked our initial USDC deposit as a “gift” in CoinLedger and CryptoTax Calculator. This removed those big ~$500 gains by changing the cost basis of our initial USDC deposit from $0 to ~$500. (Phew! Glad that we caught that one.)
  2. We clarified that certain transactions were stake/unstake operations, others were payments of transaction fees, and others were bridging transactions.(We didn’t expect software that costs <$100 to be omniscient.)
  3. We input price data for a number of intermediary assets, such as “VARIABLEDEBTETHUSDC” which were not natively supported in these softwares.(We had pretty much no idea what “VARIABLEDEBTETHUSDC” was either.)

The good news? None of the providers were reporting taxable gains anymore.

The bad news? The amount of losses each provider reported still varied significantly.

  • Underreporting capital losses is like leaving money on the table. These losses can be used to offset other capital gains (e.g., gains made on sale of equities). And if we don’t have any gains that could be offset this year, we could also carry them forward and offset next year’s gains.

The really bad news? If we had actually been “in the green,” we could have potentially paid the IRS less than we owed in capital gains taxes. That would have been illegal.

Part 4: The Takeaways

First off, calculating crypto taxes in the U.S. is challenging under the current tax regime. But, based on our analysis, some providers do a much better job than others.

Rankings

For the providers ranked “good,” we felt that we correctly made all necessary manual adjustments. While we felt the final gain/loss calculations were a bit conservative for some providers (e.g., Awaken’s), we understood how they got there and generally felt confident that their output was defensible.

The same could not be said for providers ranked “average” and “poor.” Given their lack of automation and the large quantity of manual adjustments required, we probably made errors along the way. We were not highly confident in the final gain/loss calculations of some providers (e.g., CoinLedger, Koinly). And we knew that other providers were still off by a sizeable margin (e.g., TokenTax).

Let’s unpack this a bit.

Cost Of Crypto Tax Software Tools

Given that we made less than 100 transactions, we chose the ~$50 to ~$100 plan for most providers. That allowed us to import all of our transaction data, access our tax calculations, and generate tax forms.

(Though 200 smackers for TokenTax did seem a bit steep.)

Accuracy

When it came to assessing accuracy, we tried to answer two questions:

  1. How close were the total final gains/losses to our estimated range?
  2. How did providers account for income-generating events?

How close were they?

Based on our “back of the envelope” math, we estimated total capital losses somewhere in the range of ~$200 to ~$300. The two major components of this were:

  1. The disposal of our NFT. Including the purchase price of the NFT, the fees we paid to acquire it, and the fees we paid to dispose of it, we expected this to result in ~$110 to ~$120 of losses all-in.
  2. The transaction fees we paid along the way. These totaled ~$200 (excluding the fees associated with buying and selling the NFT). We knew we would be able to deduct the fees which we paid in conjunction with swapping assets, but we expected that others would not be tax deductible.
Capital gains and losses by transaction type on crypto tax platforms

Of the providers analyzed, CoinTracker and Crypto Tax Calculator ended up being the closest to our estimated range. Their NFT disposal losses were in line with our range, and the total amount of deductible fees that they calculated were in the range of ~$130 to ~$150.

Rewards And Income

Thus far, the focus has been entirely on the capital gain/loss side of things.

But what about income?

During the course of our transactions, there was one event that generated (barely material) income and should have been reported separately from our capital gains/losses: claiming X2Y2 tokens for trading NFTs on the x2y2 platform.

(Remember that $1.25?)

For tax purposes, these X2Y2 rewards should have been taxed as income upon receipt. And when we sold them, we should have realized a capital gain/loss.

(That’s right. A classic “double whammy”.)

As displayed in the table below, the tax treatment of these rewards differed meaningfully across providers.

Income and capital gains loss associated with rewards on different crypto tax tools

Awaken, and Crypto Tax Calculator recognized the $1.25 rewards as income but also offset the income with the fees we paid to claim the rewards (best treatment, in our opinion). Accointing and Koinly recognized the X2Y2 rewards as taxable income of $1.25 but did not deduct our fees (not bad, but also a bit conservative). CoinLedger, CoinTracker, and TokenTax did not recognize any income at all in conjunction with the X2Y2 rewards (not good).

Automation

Automation rankings were largely driven by the amount of “touch-ups” we had to make to get to completion.

Take a look at the transaction below from Accointing. It was marked as “no classification.”

An example transaction on Accointing

In order to classify it, we had to look to Etherscan to retrace our steps and figure out what this could be …

An example tax transaction on Accointing

… turns out it was a fee payment to authorize our initial USDC <> ETH swap on Uniswap

So, we went ahead and marked the transaction as “fee.”(And did so for about ten other transactions.)

Crypto tax transactions on Accointing

For more automated providers, that was not the case.

Take a look at the screenshot below from CoinTracker.

Crypto transactions on accointing

It is the same “fee” transaction that is displayed above in Accointing. But CoinTracker automatically classified this fee payment transaction as a “send” which would only have realized gains/losses on transaction fee disposals.

(Thank you for the 15 minutes back, CoinTracker!)

OK, one more example.

Take a look at this screenshot below from Crypto Tax Calculator.

Crypto Tax Calculator screenshot

When we staked GMX on Arbitrum, Crypto Tax Calculator (and some other providers) actually recorded six total transactions, which included intermediary mint/burn transactions.

All of these intermediary transactions needed to be classified. And all of them resulted in (pretty much) zero tax impact.

Now take a look at this screenshot below from Awaken.

It is the same series of transactions that are displayed above in Accointing. But all of the sub-transactions were automatically classified under the same “Swap” transaction.

(Thanks for the 15 minutes back, Awaken!)

And last but not least: User Experience.

User Experience

When ranking user experience, we tried to answer two questions:

  1. How easy/hard was it to classify transactions?
  2. How easy/hard was it to understand why we had gains or losses?

Classifying Transactions

Compared to other providers, Awaken had the best transaction classification scheme.

Take a look at the screenshot of Awaken’s classifications below.

(Pretty much) every action that we made was easily classifiable under this scheme. It also eliminated other options which it knew would have been incorrect.

(See those options that are grayed out?)

That’s a big difference compared to other providers, which had less intuitive transaction classifications.

Take a look at the screenshot below from Accointing.

There were several operations we performed (e.g., depositing our ETH collateral into AAVE, bridging from Ethereum L1 to Arbitrum L2, and disposing of our NFT) which did not map to Accointing’s classifications. We did our best to classify these but could have made errors along the way.

Viewing Gain/Loss Calculations

If a provider did not give us visibility into which transactions resulted in gains/losses, it was tough to audit tax calculations and make sure there were no “hiccups” in the reporting process.

Take a look at the screenshot below from TokenTax.

Screenshot from TokenTax

It shows all of the taxable events over the two-day span. Based on TokenTax’s interface, it was unclear what transactions resulted in gains/losses. Furthermore, the software did not provide links to the Etherscan/Arbiscan records we needed to “retrace our steps” to identify which transactions resulted in gains/losses.

With other providers, we got a granular insight as to how gains/losses were recorded.

Take a look at the screenshot from Awaken below.

It clearly shows where we realized losses (on our actual sale of our stETH) and where we realized gains (disposing ETH to pay transaction fees to make the swap). (Makes sense to us!)

Which Crypto Tax Software Tool Is Right For You?

Several things stood out to us, which could be worth keeping in mind the next time you calculate your cryptocurrency taxes.

  1. How initial transaction data is classified is important.It drives the entire tax reporting process. Sure, we were able to make some modifications to get providers who were booking gains into the “right ballpark.” But we could have made plenty of mistakes along the way and significantly over or under-reported our taxable gains/losses.
  2. Our time horizon was very short.We made all of these transactions over a 2-day span. We still spent several hours digging through Etherscan and Arbiscan to retrace our steps as our memory of our transaction history faded.In reality, many people start doing their taxes ~12 to ~16 months after their first transaction of the year was made. So, if a provider’s initial profit/loss calculations were materially off and many manual adjustments were required, it would have been (pretty much) impossible to retrace steps taken over a year ago. (Try just remembering what you had for breakfast five days ago.)

Update: This article was updated on 5/8/23 to clarify that transactions are capable of being modified and classified with TokenTax. However no adjustments were made retroactively to the tax calculations/analysis in this article.

What Is Crypto Tax Software?

Taxes can be a complex task, and crypto taxes add another layer of complexity. Crypto tax software simplifies this process by gathering all the required data to calculate taxes on your crypto trades. In most cases, crypto tax software can also fill out the necessary forms to submit to the IRS. However, this convenience often comes with a fee.

Free Crypto Tax Software

Frequently Asked Questions

Sources

Related Articles

Check Also
Close
Back to top button