Crypto tax reporting is the part of trading nobody budgets time for until it is suddenly urgent. Crypto tax season is a nightmare, and it is a self-inflicted one, not because the rules are exotic, but because the record-keeping falls apart somewhere around your third exchange. You have a year of trades scattered across Binance US, a Bybit account, and a cold wallet you moved coins through twice. The CSV exports do not agree with each other. One of them logs a transfer between your own wallets as a taxable sale. Another forgot to include the fees. By the time you have hand-edited four files into something Koinly will accept without choking, you have spent a weekend doing data entry for the privilege of paying taxes.
The problem is not the math. The problem is the input. Crypto tax reporting is a clean-records problem dressed up as a tax problem, and almost every tool in the category solves the wrong half.
This is where it helps to back up and remember what a trading bot is actually for. TradeArmor is a self-hosted crypto trading platform: built-in BTC/USDC signals with a multi-year live track record, 15 real-time technical indicators, a plain-English AI strategy builder, plus DCA, grid, futures, copy trading, backtesting, paper trading, and tax reporting, all running on your own hardware where your API keys never leave your machine. Tax reporting is one feature on that list, but it is the one you remember in April, because it turns the weekend of CSV surgery into a single export.
What crypto tax reporting actually requires
Strip away the dread and the structure is simple. In the US and most jurisdictions that treat crypto as property, you report capital gains and losses on every disposal. A disposal is any moment crypto leaves your hands: a sale for cash, a swap from one coin to another, or spending it on something. Each disposal needs four facts. What you received (proceeds). What you originally paid, fees included (cost basis). How long you held it (the holding period that decides short-term versus long-term rates). And the gain or loss those produce.
Income events sit in a separate bucket. Staking rewards, referral bonuses, and the like are ordinary income at the fair market value when you received them, and they also set the cost basis for whenever you later dispose of those coins.
That is the whole conceptual model. A trader with ten trades could do it on paper. The reason an active trader cannot is volume. A DCA strategy running unlimited levels across a few pairs generates hundreds of small acquisitions a year, each with its own basis and date. Multiply that across exchanges and you are reconstructing thousands of lots from records that were never built to be reconstructed.
Want to see how the dashboard, the strategy engine, and the export tools fit together before tax season arrives? See all features.
Cost basis: FIFO vs LIFO vs HIFO, and what the IRS actually allows
This is the part people get wrong, usually by trusting a blog post that was accurate three years ago.
Your cost basis method decides which lot you are treated as selling when you sell. The same trade can produce a different gain depending on which units you assign to it. There are three names you will see everywhere.
FIFO, first in first out, sells your oldest lot first. It is the IRS default, the easiest to defend, and the method you fall back to if you do nothing.
HIFO, highest in first out, sells your most expensive lot first, which tends to shrink your near-term gain. LIFO, last in first out, sells your newest lot first.
Here is the nuance that matters for crypto tax reporting in 2026: LIFO and HIFO are not separate IRS-recognized methods. They are outcomes you reach through specific identification, and the IRS only honors specific identification if you identify the exact units before the sale, generally through standing instructions configured in your software ahead of time. Decide after the fact and you do not get the method; you get FIFO with extra steps.
Two more rules changed recently and tripped up a lot of people. As of January 1, 2025, the IRS requires cost basis tracking on a wallet-by-wallet and account-by-account basis. The old universal method, where you pooled every coin across every wallet into one running basis, is gone. To smooth the transition, Revenue Procedure 2024-28 offered a one-time safe harbor to reallocate unused basis across wallets as of the start of 2025, with a deadline tied to your first 2025 disposal or your return due date.
The practical takeaway is not "use HIFO" or "use FIFO." It is that the method only works if your records support it, lot by lot, wallet by wallet, with dates that hold up. TradeArmor exports your trade history under FIFO, LIFO, or HIFO so you can model the difference and bring the numbers to a professional, rather than picking a method off a forum and hoping. Which method is right for you is a question for a qualified tax preparer, not a trading bot.
The 1099-DA changes the game, and not entirely in your favor
Starting with the 2025 tax year, US traders meet a new form. Form 1099-DA is what custodial brokers, meaning the centralized exchanges, now use to report your digital asset sales to the IRS. Brokers must report gross proceeds for transactions on or after January 1, 2025, so the first 1099-DA forms land in early 2026.
Notice the word "proceeds." For the 2025 transition year, broker reporting of your cost basis is voluntary, and many will not include it. Basis reporting becomes mandatory only for transactions on or after January 1, 2026. So in the gap year, the IRS receives a form showing what you sold for, with no record of what you paid. A form that reports your proceeds but not your basis is a form designed to make you look richer than you are. The only thing that corrects the picture is your own complete record of acquisitions.
This is the quiet argument for keeping your own books regardless of what your exchange sends. The exchange that lost two weeks of your withdrawal history during an outage is the same one assuring you its 1099-DA will be accurate. Trust, but reconcile.
Why exchange CSVs are the actual villain
Every aggregator, Koinly and CoinTracker included, is only as good as the data you feed it. And exchange CSVs are bad data, not through malice but through indifference. They were built for support tickets, not accountants.
Each exchange ships its own column layout and its own labels, so reconciling four of them means normalizing four different formats by hand. Internal transfers between your own wallets routinely get logged as disposals, which invents taxable events that never happened. Fees land in different columns, or no column. And delisted or migrated tokens can simply disappear from the export, leaving a hole exactly where a cost basis used to be.
When people say "Koinly chokes on the CSVs," this is what they mean. The tool is doing its job; the input was broken before it arrived. Garbage in, audit risk out.
How a self-hosted bot fixes the input, not just the output
A trading bot sees every fill at the moment it happens, with the price, the size, the fee, and the timestamp, because it placed the order itself. There is no reconstruction step, because nothing was ever lost. That is the structural advantage of generating the record at the source instead of scraping it back together in April.
Because TradeArmor runs on your own hardware, the log lives in a local database on your machine, not in a vendor's cloud. Every trade across every connected exchange, whether you run on Binance US, Bybit, or any of the six supported venues, lands in one consistent record. When tax season comes, you export it: one click to a Koinly-formatted CSV, a CoinTracker CSV, or raw JSON for a custom workflow, with your choice of FIFO, LIFO, or HIFO cost basis applied. You filter by exchange, by coin, by date, and hand your accountant a single clean file instead of a shoebox of screenshots.
It also keeps the keys where they belong. A SaaS tax integration wants read access to your exchange account on its servers; a self-hosted bot already has the data locally and never needs to phone it anywhere. The same self-custody logic that keeps your trade-only API key off a third party's server keeps your full financial history off it too.
None of this is the bot doing your taxes. It is the bot handing your tax software, or your CPA, a record clean enough that the calculation is the easy part again. The judgment stays with the human qualified to make it.
The mistakes that turn a clean year into an audit letter
Most crypto tax reporting errors are not exotic. They are the same handful of record-keeping slips, repeated by thousands of traders who assumed the exchange had it handled.
The first is treating a swap as a non-event. Trading one coin for another is a disposal of the first coin, taxable on the spot, even though no cash touched your bank. People who only sold to USDC once all year are often shocked to learn their forty altcoin rotations were forty taxable events.
The second is double-counting transfers. Move coins from an exchange to your own wallet and a naive import reads it as a sale followed by a purchase, inventing a gain out of an action that was not a disposal at all. The fix is tagging transfers correctly, which a bot that knows it moved its own funds does without prompting.
The third is forgetting the income side. Staking rewards, referral payouts, and airdrops are ordinary income when received, and they also set the basis for the eventual sale. Skip the income entry and you understate income now and overstate the gain later, which is the rare mistake that manages to cost you twice.
The fourth is method drift: claiming HIFO on your return when your records cannot prove you identified the specific lots before each sale. The IRS does not grant a method you only chose in hindsight. A trade log with timestamps and standing instructions is what makes a method defensible rather than aspirational.
None of these require clever accounting to avoid. They require a complete record, captured as the trades happen, which is the entire point of logging at the source.
A sane tax-time workflow
The whole path, in order, looks like this:
- Log everything as you trade. The bot does this automatically; the work is front-loaded to zero. The cleanest tax record is the one you never had to assemble.
- Keep wallet-by-wallet records. Since 2025, basis is tracked per wallet and account. A bot that already separates by exchange and instance maps to this cleanly.
- Export at year end. Pick FIFO, LIFO, or HIFO, choose Koinly, CoinTracker, or JSON, and filter to the tax year.
- Reconcile against your 1099-DA. When the broker form arrives, check its proceeds against your record and supply the basis it omits.
- Hand it to a professional. A clean export plus a qualified preparer beats a clever method and a guess, every time.
Frequently asked questions
The FAQ section is rendered from structured data above and appears here on the live page, covering what crypto tax reporting requires, how Form 1099-DA works, choosing between FIFO, LIFO, and HIFO, whether Koinly and CoinTracker are enough, why exchange CSVs are painful, and whether TradeArmor files your taxes.
The point
Crypto tax reporting is miserable because the records are miserable, and the records are miserable because they get reconstructed after the fact from exchange exports that were never meant for the job. Fix the input and the rest collapses into a single export. TradeArmor is a self-hosted trading platform that records every fill locally as it trades, across six exchanges, and hands you one clean Koinly, CoinTracker, or JSON export with FIFO, LIFO, or HIFO basis when April comes, all on hardware you own where your keys and your history never leave the machine. If you would rather spend tax season reviewing a clean file than rebuilding one, see the pricing and get started.