CryptoCMD CryptoCMD

Crypto Tax Lots: How FIFO, HIFO and Specific ID Change Your Bill

The same trades in the same year can produce very different taxable gains depending on which coins you say you sold, and your exchange report probably won't get it right for you.

Mia Chen · · 10 min read
Crypto Tax Lots: How FIFO, HIFO and Specific ID Change Your Bill
Photo: RDNE Stock project / Pexels

Key takeaways

  • →Your cost-basis method decides which purchase a sale is matched against, and that changes the gain you report.
  • →In the worked example, the same six buys and two sells give $3,800 of gain under FIFO but $1,200 under HIFO.
  • →HIFO usually defers tax rather than erasing it, because the cheap coins you keep carry a low basis into the future.
  • →Exchange reports only see their own platform, so transfers in, DEX swaps and casino deposits often show up with missing or wrong cost basis.
  • →Keep your own lot-level records at the time of each sale. Rebuilding them years later is painful and sometimes impossible.

Sell crypto and the tax authority wants to know which coins you sold. The answer can move your bill by thousands. Buy the same coin five times at five prices and every sale has to be matched to one of those purchases, or a mix of them. That matching is your cost-basis method. Change the method and the same trades give you a different taxable gain.

Here's how tax lots work, what FIFO, HIFO and Specific ID actually do, a worked example across a year of trading, and the records you need. Exchange reports leave real gaps, and I'll point at them.

What a tax lot is

A tax lot is one acquisition of an asset. It has a date, a quantity and a cost. Buy 0.5 BTC on Monday and another 0.5 BTC on Thursday and you hold two lots, even though your wallet shows a single balance of 1 BTC.

Coins are fungible. Your wallet doesn't care which satoshi came from which purchase. The tax system does. Each time you dispose of crypto, you realise a gain or loss. That covers selling for cash, swapping into another token, spending it, or (in many countries) depositing it into a casino or sportsbook that converts it:

Gain = proceeds − cost basis of the lot(s) you disposed of

Proceeds are usually easy. Cost basis is where it gets hard, because it depends on which lot you say you sold.

The main methods

FIFO: first in, first out

Your oldest coins count as sold first. It's simple and predictable, and it's the default in a lot of software and on a lot of exchanges. In a rising market FIFO tends to produce bigger gains, since your oldest coins are usually your cheapest.

HIFO: highest in, first out

Your most expensive lot counts as sold first. That usually means the smallest gain, or the biggest loss, on each sale, which is why active traders like it. Where it's allowed, HIFO is generally a form of Specific ID. You're picking particular lots; you just happen to pick the costliest every time.

Specific ID

You name exactly which lot you're selling. HIFO is one strategy inside it, not the only one. You might sell a cheap lot in a year when your income is low. You might pick a lot held long enough to get a lower long-term rate, if your country has one. The catch: you have to identify the lot at the time of sale, and you have to be able to prove it.

Others you'll run into

LIFO (last in, first out) treats your newest coins as sold first. Average cost pools your holdings into one blended basis. Some countries give you no choice. The UK uses a pooling system with special same-day and 30-day matching rules, and Canada uses an adjusted cost base that averages your holdings. So FIFO versus HIFO is mostly a live question where lot selection is allowed, the US being the best-known case. Check what your own tax authority permits before you pick anything. Rules get revised, so check again before each filing year.

Worked example: one year, two methods

Crypto Tax Lots Explained: FIFO, HIFO and Specific ID
Photo: Rafael Minguet Delgado / Pexels

All figures here are hypothetical and chosen to illustrate the mechanics. They are not real prices.

A trader buys ETH four times and sells twice in one calendar year:

DateActionQuantityPrice per ETHTotal
JanuaryBuy2$1,500$3,000
MarchBuy1$3,000$3,000
MayBuy2$2,200$4,400
JuneSell2$2,800$5,600
AugustBuy1$3,400$3,400
NovemberSell2$3,200$6,400

Total bought: 6 ETH for $13,800. Total sold: 4 ETH for $12,000. That leaves 2 ETH at year end. I've ignored fees to keep the arithmetic clean.

Under FIFO

June sale. The oldest lot is January's 2 ETH at $1,500, so basis is $3,000. Gain: $5,600 − $3,000 = $2,600.

November sale. The oldest remaining lots are March (1 ETH at $3,000), then one ETH from May at $2,200. Basis is $5,200. Gain: $6,400 − $5,200 = $1,200.

Total realised gain: $3,800. Left over: 1 ETH at $2,200 and 1 ETH at $3,400, a combined basis of $5,600.

Under HIFO

June sale. August's lot doesn't exist yet, so the options are January ($1,500), March ($3,000) and May ($2,200). The highest are March's 1 ETH and one May ETH. Basis is $5,200. Gain: $5,600 − $5,200 = $400.

November sale. Remaining lots: January (2 at $1,500), May (1 at $2,200), August (1 at $3,400). The highest are August and May. Basis is $5,600. Gain: $6,400 − $5,600 = $800.

Total realised gain: $1,200. Left over: the 2 January ETH at $1,500, a combined basis of $3,000.

What the numbers show

MethodJune gainNovember gainYear totalBasis carried forward
FIFO$2,600$1,200$3,800$5,600
HIFO$400$800$1,200$3,000

Same trades. Same cash in and out. HIFO reports $2,600 less gain this year.

Now read the last column. Under HIFO the trader keeps the cheap coins. Sell those 2 ETH later at $3,200 each and the gain is $6,400 − $3,000 = $3,400. Under FIFO it would be $6,400 − $5,600 = $800. The gap is the same $2,600. HIFO didn't make the gain vanish. It moved it into the future.

Deferral still has value. Tax paid later is cheaper than tax paid now, you might sell in a lower-income year, and in some places holding a lot past a set period moves it into a lower long-term rate. But if you think HIFO is free money, you've misread the arithmetic. One more wrinkle: HIFO picks the priciest lots, and those are often the newest, which means short-term. In a country with a long-term discount, blind HIFO can cost you more than a smarter Specific ID choice would.

The records you need to keep

A method is only as good as the data under it. For every acquisition and every disposal, record:

  • Date and time, with the time zone noted. Exchanges usually log in UTC, and a trade near midnight can land in a different tax year.
  • Asset and exact quantity, to full decimal precision.
  • Price in your home currency at the time, plus the source you used for it.
  • Fees, in both the crypto and fiat value. In many systems fees adjust your basis or your proceeds.
  • Platform or wallet where it happened.
  • Transaction hash for anything on-chain.
  • Which lot you sold, written down at the time of sale if you're using Specific ID or HIFO.
  • Transfers between your own wallets, marked as transfers and not as sales, with the lot's original basis carried along.

For gamblers: log every deposit to and withdrawal from a crypto casino or sportsbook. A deposit may count as a disposal if the platform converts it. A withdrawal of winnings is an acquisition with its own basis. Casino histories are often thin and vanish when accounts close, so export them while you can.

Where exchange reports fall short

Exchange tax reports are a starting point. They aren't a finished return.

  • They only see their own platform. Move ETH you bought elsewhere onto an exchange and sell it, and the exchange has no idea what you paid. Reports often show zero or missing basis. Zero basis means the entire sale price gets treated as gain.
  • They can't see DEX swaps, bridges or self-custody activity. A swap on a decentralised exchange is usually a taxable disposal, and no exchange report will include it.
  • They often apply one default method. Many default to FIFO within that account. If you meant to use HIFO, the report won't reflect it unless the platform lets you set it.
  • They track per account, not across your whole portfolio. Some tax systems now expect basis to be tracked wallet-by-wallet or account-by-account, and a universal pool across all your holdings may not be allowed. Exchanges handle their slice. Reconciling the rest is on you.
  • Rewards and odd income get mislabelled. Staking, airdrops, interest and promos may be missing, lumped together, or valued at the wrong moment.
  • Platforms close. When an exchange shuts or delists you, its history can go with it.

Step by step: setting up your lot tracking

  1. Find out which methods your tax authority allows, and whether it requires tracking by wallet or account. Write the answer down with the source.
  2. Export full transaction histories (CSV or API) from every exchange, casino and broker you've used, including closed accounts if you can still log in.
  3. List every self-custody wallet address you control and pull its on-chain history from a block explorer or your wallet app.
  4. Load everything into one ledger, either a spreadsheet or dedicated crypto tax software.
  5. Match transfers between your own wallets so they're tagged as transfers and not as sales and fresh buys.
  6. Fix every missing-basis warning by tracing the coin back to its original purchase.
  7. Choose your method and apply it consistently. If you're using Specific ID or HIFO, record the chosen lot on the day of each sale.
  8. Before filing, compare your totals against any exchange-issued forms. Where they differ, keep a note explaining why, such as a transfer-in basis the exchange couldn't see.
  9. Archive the raw exports, the ledger and your notes. Keep them for at least as long as your tax authority can audit you.

Common mistakes

  • Choosing lots after the year ends. Specific ID generally means identifying the lot at or before the sale. Rearranging lots in March of the following year to cut your tax is exactly what auditors look for.
  • Treating transfers as sales. Moving coins from an exchange to your own wallet isn't a disposal. Log it as one and you create phantom gains, then a phantom zero-basis lot.
  • Accepting zero basis. If a report shows zero cost on coins you paid for, you'll overpay unless you fix it.
  • Forgetting crypto-to-crypto swaps. Trading SOL for USDC is usually a disposal of the SOL. Plenty of traders think they owe nothing until they cash out to fiat. Often they're wrong.
  • Ignoring casino deposits. Funding a gambling account with appreciated crypto can trigger a gain before you've placed a single bet.
  • Switching methods mid-year without a reason or a record. Inconsistency is hard to defend. Some systems restrict changes outright.
  • Assuming HIFO is always best. It defers gains and can tilt you toward short-term lots. Run the numbers both ways.

FAQ

Can I use HIFO on one exchange and FIFO on another?

It depends on your jurisdiction. Where lots are tracked per account, different accounts can effectively behave differently, but you still need consistent, documented reasoning. Mix methods just because each gives the lowest number that year and you're inviting scrutiny.

What if I genuinely can't find the cost of an old purchase?

Dig through old emails, bank statements showing the fiat deposit, and on-chain records of the original transfer. If there's truly nothing, many authorities will treat the basis as zero, which is the worst outcome. Document every attempt you made to reconstruct it.

Do crypto tax software tools solve all of this?

They handle the matching and the arithmetic well. They can't invent data they never received. If you didn't import a wallet, or a casino export is missing, the software will flag a missing basis and then rely on you to notice.

The method you choose matters less than whether you can show your work. A HIFO return backed by clean lot records holds up. A clever one built on guesses doesn't. So which of your wallets would you struggle to explain today?

Keep learning