Most people who owe money on crypto do not owe it because they made a lot. They owe it because they cannot prove what anything cost.
I have watched this go wrong the same way three or four times now. Someone sells a chunk of ETH, opens a spreadsheet in January, works out that using the most expensive lot they bought gives them the smallest gain, and files that. It looks reasonable. It is also the version most likely to fall apart, because in the US you can only pick a specific lot if you identified it before the trade went through. Choosing it afterwards, when you can see which answer you prefer, is not specific identification. It is hindsight with a spreadsheet.
So I built a free skill that does the boring version properly. It is below, in full, ready to copy.
What the skill actually does
You give it your transaction history, however messy. It gives you back a disposal log with the working shown: what was sold, what basis got applied, which rule matched it, and what the gain or loss was. Then it gives you a list of flags, which is the part I care about most.
The flags are things like: this price was estimated and here is why, there is an outflow here with no matching inflow so a wallet is missing, and you probably did not realise these four things were taxable. That last one catches people constantly. Swapping a coin for USDC is a disposal. Buying a laptop with BTC is a disposal. Paying someone in crypto is a disposal for you and income for them.
Two rules that changed and one that never gets read
Since the 2025 tax year, US basis is tracked per wallet and per account rather than pooled across everything you own. That comes from Rev. Proc. 2024-28. If you have been carrying one big universal spreadsheet forward since 2021, it needs breaking out into individual wallets before it means anything. Brokers also report on Form 1099-DA now, so your number and the IRS number get put next to each other automatically. A mismatch is what generates the letter.
In the UK it works nothing like that. You match a disposal against same day purchases first, then anything you bought in the 30 days after, and only then against the Section 104 pool, which is a running average of everything else. That 30 day rule is the one nobody reads. Sell to bank a loss, buy back a fortnight later because the price dipped further, and the loss does not land where you expected. The annual exempt amount is £3,000 for 2025/26, and gains above it are charged at 18% or 24% depending on your income band.
If you are a sole trader who invoices in crypto, you have two separate events, not one. Income when you receive it, valued that day. Capital gain or loss when you later dispose of it, measured against that same day's value. People miss the first one and then cannot explain the second.
The skill
Copy everything in the box. Save it as a file called SKILL.md, or just paste it into Claude, ChatGPT or Gemini at the start of a conversation and give it your transactions.
---
name: crypto-cost-basis
description: Turn a messy crypto transaction history into a defensible cost basis and disposal log. Use when someone asks what their crypto cost basis is, what they owe on a sale, whether a swap or a purchase was taxable, how to handle FIFO vs HIFO vs Section 104 pooling, or how to reconstruct records for a wallet they have been trading from for years. Triggers on "cost basis", "crypto tax", "capital gains on crypto", "did I make a profit on this coin", "wallet by wallet", "bed and breakfasting", "1099-DA", "Section 104 pool".
---
# Crypto Cost Basis
Work out what a crypto position actually cost, what each disposal gained or lost, and which
events were taxable. Produce a line-by-line log the holder could hand to an accountant.
**This is a record-keeping and arithmetic tool, not tax advice.** Rules differ by country and
change. Everything below is designed to be checked by a qualified adviser, which is why the
output shows its working rather than just a number.
## Step 1 - Establish the frame before touching numbers
Ask, and do not guess:
1. **Jurisdiction.** US and UK use incompatible matching rules. Also confirm tax residency,
not nationality.
2. **Tax year.** US is the calendar year. UK runs 6 April to 5 April.
3. **Holder type.** Individual investor, sole trader paid in crypto, or company. A sole trader
who invoices in crypto has income at receipt *and* a capital event at disposal. Two separate
calculations, and people routinely miss the first.
4. **Scope.** Which wallets and exchanges. Every one of them, including the cold wallet they
forgot about and the exchange that shut down.
If the user cannot answer these, stop and collect them. A cost basis built on the wrong frame is
worse than no cost basis, because it looks finished.
## Step 2 - Normalise every transaction
Build one table. One row per movement, chronological, across all sources:
| datetime (UTC) | wallet/account | type | asset out | qty out | asset in | qty in | fee asset | fee qty | fiat value at the time | source |
Rules for filling it:
- **Value everything in the holder's home fiat at the moment of the transaction**, even a
coin-to-coin swap where no fiat moved.
- **Fees are part of the story.** An acquisition fee raises basis. A disposal fee reduces
proceeds. A fee paid in a third coin is itself a disposal of that coin.
- **Transfers between the holder's own wallets are not disposals.** They carry basis with them.
Tag them `internal` so they are excluded from gains but preserved for the wallet-level trail.
- Mark anything you had to estimate. Flag it in the output. Never silently interpolate a price.
## Step 3 - Identify the taxable events
These are disposals in both jurisdictions and are the ones people miss:
- Crypto sold for fiat, the obvious one.
- **Crypto swapped for other crypto, stablecoins included.** A USDC swap is a disposal.
- **Crypto spent on goods or services.** Buying a laptop with BTC is a disposal of BTC.
- **Gifting**, except to a spouse or civil partner in the UK.
- Paying a network fee *in* crypto, strictly speaking.
Not disposals: buying with fiat, moving between own wallets, holding through a price move.
Separately, flag as **income at receipt** (taxed on fair market value that day, then that value
becomes the basis): mining, staking rewards, airdrops, and crypto received as payment for work.
## Step 4 - Apply the matching rules
**United States.** FIFO is the default. Anything else, including HIFO, LIFO and picking a
specific lot, is not a separate method but a lot-selection strategy inside *Specific
Identification*, and Spec ID is only available if the holder can show the lot was identified
**before the trade executed**, not chosen afterwards at filing time. Retroactive HIFO is the
single most common thing that collapses under examination.
Since the 2025 tax year, basis is tracked **per wallet and per account**, not pooled across
everything the holder owns (Rev. Proc. 2024-28). A universal-pool spreadsheet carried forward
from earlier years needs allocating out to individual wallets before it can be relied on. Brokers
now report on Form 1099-DA, so the holder's numbers and the IRS numbers get compared. A
mismatch is what triggers the letter.
To use Spec ID, the records in Step 2 must include acquisition datetime, cost including fees,
disposal datetime, quantity, and the wallet identifier, applied consistently across the year.
**United Kingdom.** Match disposals in this fixed order:
1. **Same-day rule.** Acquisitions of the same asset on the same day.
2. **Bed and breakfast rule.** Acquisitions in the **30 days after** the disposal. This catches
people who sell to crystallise a loss and buy straight back. The loss does not land where they
think it does.
3. **Section 104 pool.** Everything else, held as one pooled average cost. Divide total
allowable cost by total units to get cost per unit.
The annual exempt amount is 3,000 pounds for the 2025/26 year. Gains above it are charged at 18%
within the basic rate band and 24% above it. The 2025/26 return is due 31 January 2027.
## Step 5 - Produce the output
Always show working. Three sections:
**A. Disposal log.** One row per taxable disposal: date, asset, quantity, proceeds, basis
applied, which rule matched it, gain or loss, and the wallet.
**B. Position summary.** Per asset per wallet: units held, pooled or lot-level basis remaining,
unrealised position.
**C. Flags.** This is the part that earns the skill. List, explicitly:
- estimated prices and why
- gaps in the history (an outflow with no matching inflow means a missing source)
- disposals the holder probably did not know were disposals
- any Spec ID claim not supported by contemporaneous evidence
- the total that would be reported, alongside what a broker is likely reporting
End with: *these figures are a reconstruction from the records supplied. Have them reviewed by
a tax professional before filing, and expect the review to change something.*
## Failure modes to refuse
- Do not pick the method that produces the lowest number and present it as the answer. Show the
outcome under each permitted method, then say which are actually available given the evidence.
- Do not fill a price gap with a plausible-looking number. An unfilled gap is a finding.
- Do not treat an exchange CSV as complete. It ends at that exchange's boundary.
- If asked to backdate a lot identification, decline and explain why it fails.
Before you use it on anything real
This produces a reconstruction from whatever records you hand it. It is not tax advice, and I am not an accountant. What it is good for is arriving at your accountant's office with a legible disposal log and an honest list of gaps, instead of a folder of CSVs and a vague memory of 2021. That conversation costs a lot less and usually goes better.
Expect the review to change something. If it does not, one of you was not paying attention.
Leave a comment: