How to record crypto payments in QuickBooks and Xero
Key takeaways
- QuickBooks and Xero cannot read a wallet. They read statement files, so give them one for a crypto clearing account.
- Each line needs a value in your currency on the day it happened. Payzum computes it and exports it for you.
- A conversion shows up as two lines that cancel out, so the clearing balance only moves when money really enters or leaves.
- Whether any of it is income, a disposal or a fee is your accountant's call. Payzum gives records, not tax advice.
Why QuickBooks and Xero cannot read a wallet
You start accepting USDC from clients and the money lands in your own wallet. That part works. Then the month ends, your bookkeeper opens QuickBooks or Xero, and there is nothing to reconcile against. No bank feed, no statement, no balance in dollars.
Both products are built around bank accounts. They expect a list of dated lines with a description and an amount in one currency. A wallet history gives you token amounts, hashes and timestamps. None of it carries a dollar value, and a swap or a network fee is just another row.
So the work falls on you. Someone has to look up what each payment was worth, type it in, and keep fees apart from sales. Done by hand, a handful of invoices can take an afternoon a month, and the records get harder to audit as months pile up.
What your accountant needs from each crypto payment
Start from the tax side, because it sets the minimum. The IRS says that if you receive a digital asset in exchange for goods or services in a business context, it is ordinary income. Its page, reviewed on 2 September 2026, also asks you to keep the fair market value in US dollars of every digital asset you receive as payment in the ordinary course of business. Other countries ask for the same thing in their own currency.
That gives a short list. For every movement your accountant wants four things:
- the date it happened;
- what it was worth in your reporting currency on that date;
- what kind of movement it was: a sale, a fee, a conversion or a payout;
- a pointer back to the evidence, meaning the invoice, the order and the transaction hash.
The crypto clearing account: a bank account that only exists in your books
The standard trick is a clearing account. You create one account in QuickBooks or Xero, name it something like "Crypto clearing (USDC)", and treat it exactly like a bank account. Sales go in, fees and payouts come out, and its balance should track what you hold in the wallet.
It can be a pure bookkeeping account. In QuickBooks Online you add it as a bank-type account that you feed by file upload. In Xero you add a bank account and fill it by importing statements. Neither tool tries to connect to anything, which suits this job.
One account per currency or stablecoin keeps things simple. If you hold both USDC and USDT, give each its own clearing account so each one reconciles to its own balance. Ask your accountant whether they would rather see a single account, since some firms prefer that.
What Payzum writes into the file
Payzum is a non-custodial processor, so payments settle straight into your wallet and the accounting export is built from the events on your merchant account. Every finished sale, conversion, fee and payout becomes one accounting line. The Payzum accounting reports page lists the details; here is what matters for bookkeeping.
- Each line is valued in one of 31 reporting currencies. USD is the default.
- The value comes from the first method that applies: the fiat price on your invoice, then what a conversion actually returned, then one-to-one parity for dollar stablecoins.
- The value is then expressed in your reporting currency with the European Central Bank reference rate for the date of the event.
- The full ledger has 36 columns, with transaction hashes and the invoice and order IDs, as CSV or JSON.
- You can also get a statement file: CSV for QuickBooks Online and Alegra, OFX for Xero, Zoho Books and Odoo.
- On the 1st of each month the previous month is frozen into a report that never changes, and the account owner gets an email.
Pricing sits in the same file. Payzum charges 0.5% of each processed sale, taken from the amount received, plus on-chain network gas. The 0.5% appears as its own fee line next to the sale, so your processing costs land in an expense account without any arithmetic on your side.
About the ECB rate: the bank publishes its euro reference rates around 16:00 CET on working days and says they are for information only. That makes them a fixed, public benchmark for bookkeeping. If your accountant prefers another rate source for a given jurisdiction, say so early, because it changes the numbers.
Importing the file into QuickBooks Online, step by step
QuickBooks Online reads a CSV with three required columns. Intuit's guide to importing bank transactions, updated in August 2026, names them: Date, Description and Amount. The Payzum statement CSV uses exactly those, with dd/mm/yyyy dates.
- Create the clearing account in QuickBooks as a bank account, for example "Crypto clearing (USDC)".
- In Payzum, open the Reports page, choose QuickBooks Online and pick the period.
- In QuickBooks, go to Transactions, then Bank transactions, then Upload from file, and pick the clearing account.
- Map the three columns and confirm the date format when asked.
- Categorize the lines: sales to income or matched to the open invoice, fee lines to processing fees, payouts to the right expense.
Payzum's own notes say QuickBooks caps one upload at about 1,000 transactions, so a busy period is best exported month by month. It is a file you upload, not a live sync.
Importing into Xero with an OFX statement
Xero's site lists OFX, QIF, QBO, QFX and CSV among the formats you can import. OFX is the easy one for this job because it carries its own structure, so there is no column mapping and no day-first versus month-first mistake to make.
- Add a bank account in Xero called "Crypto clearing (USDC)".
- In Payzum, choose Xero on the Reports page and download the OFX file.
- Open the clearing account in Xero, choose Import a statement and upload the file.
- Reconcile the lines: match sales to invoices, code fees, code payouts.
The same OFX file works for Zoho Books and Odoo. If you use Alegra, you get a CSV that you map on its upload screen.
One month of books: three invoices, an ETH payment and a contractor payout
Here is a worked October for a freelance developer who bills in USD. Three clients pay. One of them sends ETH, which Payzum converts to USDC. At the end of the month the developer pays a contractor 500 USDC. These are the lines in the statement for the clearing account.
| Date | Line | Amount (USD) | Where you code it |
|---|---|---|---|
| 3 Oct | Sale, invoice for client A | 1,200.00 | Income, matched to the invoice |
| 3 Oct | Payzum fee (0.5%) | -6.00 | Payment processing fees |
| 9 Oct | Sale, invoice for client B (paid in ETH) | 450.00 | Income, matched to the invoice |
| 9 Oct | Payzum fee (0.5%) | -2.25 | Payment processing fees |
| 9 Oct | Conversion, ETH leaves | -450.00 | Transfer, first leg |
| 9 Oct | Conversion, USDC arrives | 450.00 | Transfer, second leg |
| 21 Oct | Sale, invoice for client C | 2,000.00 | Income, matched to the invoice |
| 21 Oct | Payzum fee (0.5%) | -10.00 | Payment processing fees |
| 28 Oct | Payout to contractor | -500.00 | Contractor expense |
Add it up. Sales total 3,650.00 and fees total 18.25, so the developer keeps 3,631.75 from clients. The two conversion legs cancel. After the 500.00 payout the clearing account ends the month at 3,131.75.
That number is the check. Compare it with the USDC in the wallet on 31 October. If they match, the books are right. If they do not, one line is missing or wrongly valued, and you know the month to look in.
Two things this example leaves out on purpose. The ETH that arrived on 9 October may have moved in price before the swap, and whether that matters for tax depends on where you live. Payzum shows the conversion as two legs so your accountant can see the disposal. What to do with it is their decision.
Three kinds of business, three ways to keep the clearing account
The mechanics are the same for everyone, but how often you import changes.
- A freelancer with a few invoices a month imports once, at month end, matches each sale to its invoice and is done in minutes. The guide to accepting USDC as a freelancer covers the billing side.
- An online store with dozens of orders a day should import weekly, so an odd line is caught while the order is still easy to find. The order ID in the ledger is what links a line to a customer.
- An agency that pays contractors in stablecoins sees both directions in one file. Payouts appear as outflows, and the label you put on each recipient in the CSV travels with the line.
If you bill monthly plans, the same logic applies to recurring charges, as described in crypto subscriptions without chargebacks. Each renewal is a sale line.
Wallet history versus a statement file: what each gives your bookkeeper
| Question | Copying from a wallet or explorer | Payzum statement file |
|---|---|---|
| Value in your currency | You look it up and type it | Computed per line, with the ECB rate for the date |
| Fees | Hidden in the amount or a separate row | Own line per sale |
| Conversions | One swap row you must split | Two legs that cancel |
| Link to the invoice | A hash and a guess | Invoice ID, order ID and hash in the ledger |
| Month already closed | History is whatever you pull today | Frozen report on the 1st |
Objections from bookkeepers
"I do not want a new tool in my workflow."
The file goes into the software you already use, through the import screen you already know. The only new habit is exporting the statement at month end.
"The balance will not match my wallet."
It should match, give or take timing and any holdings you moved by hand. If you move funds in and out of the wallet outside Payzum, add those transfers to the clearing account yourself, or the balances will drift.
"Which rate do I use?"
Ask your accountant. Payzum uses the ECB reference rate for the event date. If the firm wants a different source, the full ledger is there to restate the values.
Questions about recording crypto payments in QuickBooks and Xero
Can I import crypto payments into QuickBooks?
Yes. Choose QuickBooks Online on the Payzum Reports page and download the statement CSV with Date, Description and Amount. Upload it under Transactions, Bank transactions, Upload from file, against a crypto clearing account. It is a file upload, not an automatic sync.
Does Xero accept crypto transactions?
Xero imports statement files, not wallets. Payzum produces an OFX statement that Xero imports into a clearing account without column mapping. You then reconcile the lines like any bank account.
How are conversions recorded?
As two lines of the same value: the asset that left and the stablecoin that arrived. They cancel in the clearing account, and your accountant can see both legs of the swap.
What value does each payment get?
The fiat price on your invoice comes first, then what a conversion returned, then one-to-one parity for dollar stablecoins. The result is expressed in your reporting currency with the ECB reference rate for the event date.
Is the export enough to file taxes?
It gives you and your accountant the records most filings start from. How crypto income, conversions and fees are taxed depends on your jurisdiction, so the treatment is your accountant's call. Payzum provides records, not tax advice.
Book 20 minutes and we will build your month-end file
Every business keeps its books differently: one invoice a week, a store with daily orders, or an agency paying contractors. Book 20 minutes with our team and we will show how a statement file for your clearing account comes out of your real payments, non-custodial, for your case.
If the calendar does not load, book directly here · [email protected]
This guide is general information, not accounting or tax advice. Confirm with your accountant and your tax authority how to record crypto payments.