Crypto Taxes for Merchants: How to Report Crypto Revenue
The tax question stops more businesses from accepting crypto than any technical concern. It should not. Crypto tax for business is administratively different from fiat revenue but conceptually identical: you sold something, you were paid, and the payment is income valued in your reporting currency.
What changes is the record-keeping. There is no bank statement to reconcile against, the asset you received may change value before you convert it, and a single sale can produce two separate taxable events instead of one. This guide covers how to handle all of that properly.
Crypto Revenue Is Still Revenue
The foundational point, and the one that removes most of the confusion.
If you sell a $500 product and the customer pays in USDC, you have $500 of revenue. Not a crypto transaction to be treated exotically – ordinary business income, recorded in your books the same way a card payment would be, and taxed on the same basis.
Most tax authorities treat cryptocurrency as property rather than currency. That classification is what creates the one genuine complication: because it is property rather than money, you are technically receiving an asset in exchange for goods. If that asset later changes value before you dispose of it, the difference is a separate gain or loss.
So a single sale can generate two events:
- Income – the fiat value of what you received, at the moment you received it
- Capital gain or loss – any change in that asset’s value between receipt and disposal
For merchants accepting stablecoins, the second event is usually negligible, because 500 USDC is worth about $500 whenever you convert it. For merchants accepting bitcoin and holding it, it can be substantial.
The clearest way to think about it: the sale is taxed as income when it happens, and anything the asset does afterwards is an investment outcome – even if you never intended to invest.
Valuing a Payment at Receipt
This determines your income figure, so it needs to be consistent and defensible.
Value in your reporting currency at the moment the payment confirms. Not when the invoice was issued, not at month-end, and not when you eventually convert.
Three practices make this hold up under scrutiny:
Use the block timestamp, not your server time. The on-chain timestamp is authoritative and independently verifiable, and the two can differ by hours if a callback was delayed.
Record the rate source. “We used the rate from source X at the confirming block’s timestamp” is a complete answer. “We used the market rate” is not. Pick one source and use it consistently – switching sources to produce favourable numbers is exactly what an auditor looks for.
Apply the same method to every transaction. Consistency matters more than which defensible method you choose.
For stablecoins this is close to trivial: 500 USDT is $500, with minor variation if the peg moves fractionally. Record the exact figure anyway.
| Payment received | Income recorded | Complexity |
|---|---|---|
| 500 USDC | $500 | Minimal |
| 500 USDT | ~$500 | Minimal |
| 0.0065 BTC | Fiat value at confirmation | Requires rate lookup and disposal tracking |
| 0.2 ETH | Fiat value at confirmation | Requires rate lookup and disposal tracking |
This table is a practical argument for accepting stablecoins as the default. The stablecoins explainer covers why they behave this way.
Cost Basis and Later Disposal
The second event, and where merchants who accept volatile assets create work for themselves.
When you receive crypto as payment, the fiat value at receipt becomes your cost basis in that asset. If you later sell, convert or spend it, the difference between the disposal value and the cost basis is a capital gain or loss.
A worked example:
- You sell a product for $1,000 and receive 0.013 BTC when BTC is at approximately $76,700.
- You record $1,000 of income. Your cost basis in that 0.013 BTC is $1,000.
- Two months later you convert it when BTC has risen 10%. You receive $1,100.
- You record a $100 capital gain, separate from the original income.
If BTC had fallen instead, you would record a capital loss. Either way, the $1,000 of income is unaffected – that was fixed when the payment arrived.
Disposal includes more than selling. Converting to fiat, swapping to another asset, and spending it on business expenses are all disposals in most jurisdictions.
Accepting stablecoins largely eliminates this. A stablecoin received at $1,000 and converted at $1,000 produces no meaningful gain or loss. You are left with a single income event, which is exactly how fiat revenue behaves.
Records Auditors Expect
This is where crypto is genuinely stronger than conventional payments, provided you capture the right fields.
For each payment, record:
- Order or invoice reference
- Date and block timestamp of confirmation
- Asset and network
- Amount received in crypto
- Fiat value at receipt
- Exchange rate used and its source
- Transaction hash
- Receiving address
- Gateway fee, if any
For each disposal, record:
- Date and amount disposed
- Fiat proceeds
- Cost basis of the disposed amount
- Resulting gain or loss
- Transaction hash
The transaction hash is the most valuable field you will ever store. It is permanent, publicly verifiable and cannot be edited or withdrawn – stronger evidence than a bank statement, which is produced by an institution and could in principle be amended. Teams that capture hashes properly often find crypto easier to audit than card revenue.
Two technical points that matter in practice:
Use exact decimal types in your database, never floating point. Binary floating point cannot represent decimal amounts precisely, and rounding drift in financial records is indefensible.
Reconcile daily, not monthly. Three queries catch almost everything: orders marked paid with no confirmed transaction, confirmed transactions matching no order, and amounts outside tolerance. The transaction tracking guide covers how to verify each.
Stablecoins vs Volatile Assets
The single decision that most affects your accounting workload.
| Stablecoins | Volatile assets | |
|---|---|---|
| Income calculation | Face value | Rate lookup per transaction |
| Capital gains tracking | Negligible | Required per disposal |
| Cost basis records | Simple | Per-lot tracking needed |
| Reporting complexity | Comparable to fiat | Significantly higher |
| Volatility exposure | None | Full |
A merchant accepting only stablecoins has a tax position that looks almost exactly like a fiat business: revenue recorded at receipt, no gains to track, no per-lot basis calculations.
A merchant accepting bitcoin and holding it has acquired an investment portfolio as a side effect of trading. That may be deliberate – some businesses hold bitcoin intentionally – but it should be a choice rather than an accident of the checkout configuration.
If you want bitcoin exposure, the cleaner structure is to accept stablecoins and buy bitcoin deliberately as a treasury decision. That keeps the revenue recognition simple and puts the investment decision where it belongs.
Common Reporting Mistakes
Six recur often enough to be worth naming.
- Recording income at conversion rather than receipt. The taxable event is when payment confirms, not when you cash out. Deferring recognition is a straightforward misstatement.
- Ignoring the capital gains leg entirely. Businesses that accept bitcoin and convert months later often report only the income and miss the disposal event.
- Not tracking cost basis per payment. If you receive crypto across many transactions and dispose of part of it, you need a per-lot basis to calculate the gain correctly.
- Using server time rather than block time. Small, but it produces figures that do not match the on-chain record – the first thing an auditor will compare.
- Treating gateway fees as a reduction of revenue. They are an expense. Record gross revenue and the fee separately.
- Losing the transaction hashes. Without them, you have assertions rather than evidence. With them, every figure is independently verifiable forever.
A seventh worth mentioning: forgetting that spending crypto is a disposal. Paying a supplier directly in crypto you received as revenue is both an expense and a disposal of the asset, and the gain or loss still applies.
How Custody Affects Your Records?
A structural point that simplifies reconciliation considerably.
With a custodial processor, funds arrive in the provider’s wallet, sit as an internal balance, and reach you on withdrawal. Your records must reconcile three things: customer payments, the provider’s balance, and your withdrawals – with the provider’s statement as an intermediate source of truth.
With a non-custodial setup, the customer’s payment and your receipt are the same on-chain event. There is no balance and no withdrawal, so there is nothing intermediate to reconcile. Gross revenue is what arrived; the only deduction is a known service fee.
Bcon Global works this way across Bitcoin, Ethereum, Solana, Tron and BNB Chain plus major stablecoins – payments settle directly to the merchant’s own wallet at a flat 1% fee, with no intermediary balance and no withdrawal step. For accounting, this means one event per sale rather than three, and a transaction hash for each that any auditor can verify independently.
The [cash-out guide](https://bcon.global/how-to-cash-out-crypto/) covers the disposal side when you do convert, and the [crypto invoicing guide](https://bcon.global/crypto-invoicing/) covers capturing the right fields at the point of billing.
Working With Your Accountant
Three things make the conversation productive.
Bring the data in a usable form. A spreadsheet with the fields listed above, sorted by date, answers most questions before they are asked.
Ask specifically about your jurisdiction’s treatment of crypto received as business income, whether stablecoins are treated differently from volatile assets, and how disposals should be reported.
Confirm the timing rules. Some jurisdictions have specific guidance on which timestamp and which rate source to use. Getting this right from the start is far cheaper than restating later.
If your accountant has not handled crypto revenue before, the framing that helps most is: this is ordinary revenue, received in property rather than cash, with a possible capital gain on later disposal. That maps onto rules they already know.
Frequently Asked Questions
Do I pay tax on crypto payments received?
Yes. Crypto received for goods or services is ordinary business income, valued in your reporting currency at the time of receipt, exactly like any other revenue.
At what value do I record crypto income?
At the fiat value when the payment confirms, using the block timestamp and a consistent rate source. Not at invoice date and not at conversion.
What records do I need?
Order reference, block timestamp, asset, network, crypto amount, fiat value, rate source, transaction hash and receiving address. Keep disposal records separately.
Are stablecoins taxed the same as bitcoin?
The income treatment is the same. The practical difference is that stablecoins produce negligible capital gains on disposal, while volatile assets require full basis and gain tracking.
When is the taxable event?
When the payment confirms, for income. A second event occurs on disposal – selling, converting or spending the asset.
Do I owe tax if I never convert to fiat?
In most jurisdictions yes. The income event occurs on receipt, independent of whether you convert. Confirm locally.
Crypto tax for a merchant is less complicated than its reputation, and the complexity that does exist is mostly self-inflicted by accepting volatile assets without intending to.
Accept stablecoins and the picture collapses to something familiar: revenue recorded at receipt, no gains to track, an expense line for gateway fees. Capture the block timestamp, the rate source and the transaction hash against every payment, reconcile daily, and use exact decimals in your records.
Do that and you end up with something card processing cannot offer – a revenue record that a third party can verify independently, permanently, without having to trust either you or your processor.