Taxes & accounting

Crypto accounting and tax reports, ready for QuickBooks

Every sale, conversion, fee and payout, valued in your currency at the moment it happened. Export the file your accounting software imports, hand the full ledger to your accountant — and on the 1st of every month, last month's report is frozen and waiting for you.

Short answer: Payzum records every crypto sale, conversion, fee and payout as an accounting line valued in your reporting currency — USD by default, or one of 30 others. From the Reports page you export a full ledger (CSV or JSON) or a statement your accounting software imports: CSV for QuickBooks Online and Alegra, OFX for Xero, Zoho Books and Odoo. On the 1st of each month the previous month is frozen for good and you get an email to download it.

QuickBooks · Xero · Zoho Books · Odoo · Alegra · 31 reporting currencies · Monthly report on the 1st

Key takeaways

  • Valued when it happened. The invoice price first, then what a conversion actually returned, then stablecoin parity — expressed in your currency with the European Central Bank rate for that day.
  • Import it, don't retype it. QuickBooks Online and Alegra get a Date, Description, Amount CSV; Xero, Zoho Books and Odoo get an OFX they upload as-is.
  • Both legs of every conversion. Converting a coin into USDC shows as money out and money in, so your accountant sees the disposal.
  • A month-end report that never changes. Frozen on the 1st with a CSV statement and a JSON summary, and an email telling you it is ready.
  • It reconciles. The statement's balance for any period equals the Net on your Reports page for the same period.
The problem

Accepting crypto takes a minute. Booking it can take a weekend.

Your wallet shows token amounts and transaction hashes. Your accountant needs something else entirely: what each payment was worth in your currency on the day it arrived, which movements were sales, which were fees, and which were you moving your own money. Rebuilding that from a block explorer at quarter-end means looking up historical prices line by line, guessing which transfer was which, and hoping the totals land somewhere near the number on your dashboard.

So crypto ends up as the awkward line in the books — the one that gets estimated, deferred to year-end, or quietly left out of the conversation with the accountant. That is usually when merchants decide accepting it was more trouble than it was worth.

Why tax season makes it worse

Most tax authorities expect income recorded at its value in your currency when you received it, not when you finally look at it. Converting a coin into a stablecoin can itself be a taxable event in many jurisdictions. And the fees you paid are expenses you want on the books. Miss any of the three and you either overpay or end up holding a number you cannot support if anyone asks where it came from.

What gets recorded

One ledger for everything that moved

Payzum already knows what every payment was for — the invoice, the order, the terminal that rang it up. The accounting export keeps that context and adds the one thing your wallet can't: the value in your currency.

↓ Money in

Sales

Every paid invoice — from your checkout, payment links, plugins or the POS. Partially paid and overpaid invoices are valued on what actually arrived, and in-person sales keep the terminal and the cashier.

⇅ Two entries

Conversions

When a payment is auto-converted into a stablecoin, the asset that left and the stablecoin that arrived are both recorded, with the executed rate, the swap fee and the network fee.

↑ Money out

Fees

Payzum's fee on each payment, booked as its own line — an expense your accountant can see instead of a gap between what the customer paid and what you received.

↑ Money out

Payouts

Settlements to your own wallet and mass payouts to your recipients, each with the destination address, so money leaving is never confused with money lost.

Thirty-six columns, so nobody has to ask "what was this?"

The full ledger (CSV or JSON) carries every line with both of its sides — the crypto that moved and the fiat value it represents — plus enough references to trace it back to the invoice, the order and the transaction on-chain.

What happened

line_idline_typeevent_atstatusdescription

Your references

invoice_idorder_idprice_amountprice_currency

The crypto side

chaintoken_symboltoken_standardtoken_contractamount

The fiat side

fiat_valuefiat_currencyvaluation_methodfx_ratefx_date

Conversions & fees

counter_token_symbolcounter_amountexecuted_rateswap_feenetwork_feepayment_fee

Point of sale & proof

pos_terminal_labelpos_cashier_nametx_hashescounterparty_address
Fair value

Every line valued in your currency, at the moment it happened

Pick a reporting currency in Settings — USD by default, or EUR, GBP, CAD, MXN, BRL, AUD, JPY and 23 more. Nothing is converted; it only changes how your reports are valued. Then each line takes the first value that applies:

  1. 1

    The price you charged invoice_rate

    Invoice 25.00 USD, get paid in full, and the sale is worth exactly 25.00 USD — no market price second-guessing what you actually sold for. Partial and overpaid invoices are prorated on what arrived.

  2. 2

    What the conversion returned swap_execution

    When a payment is swapped into a stablecoin, the stablecoins you actually received set the value.

  3. 3

    Dollar stablecoins at parity stablecoin_parity

    One USDC or USDT is valued at one dollar.

  4. €

    In your currency, at that day's reference rate

    The value is expressed in your reporting currency with the European Central Bank reference rate for the date of the event — or the nearest earlier date within seven days. The method, the rate and the rate date are written on every line, so each number can be traced.

When there is no honest number, we don't invent one

If a line cannot be valued — today that mostly means a payout in a non-stablecoin asset, or no published rate within seven days — the Reports page tells you how many there are, the full ledger still lists them, and they are left out of the statement files. No accounting tool can import an entry without an amount, and a made-up one is worse than a visible gap.

Import, don't retype

Files your accounting software already understands

Tell the Reports page which tool you use and it hands you the matching file: a statement of the movements on a crypto clearing account, which is the shape every one of these tools imports.

Your software What Payzum gives you How it goes in
QuickBooks Online CSV · Date, Description, Amount · dd/mm/yyyy Transactions → Bank transactions → Upload from file, against your crypto clearing account
Xero OFX statement Upload as-is — no column mapping
Zoho Books OFX statement Upload as-is — no column mapping
Odoo OFX statement Upload as-is — no column mapping
Alegra CSV · dd/mm/yyyy Map the columns on Alegra's upload screen
Anything else CSV · Date, Description, Amount · ISO dates A plain statement any spreadsheet or ledger can read
Your accountant Full ledger · CSV or JSON Every line with its crypto side, fiat side and references
What lands in QuickBooks

One readable line per movement

Sales come in as money in, fees and payouts as money out, and a conversion as a pair that nets to zero. Every description says what moved, on which chain, for which invoice or order — and ends with a stable reference back to the full ledger.

  • In OFX that reference is the transaction ID, so re-importing an overlapping month doesn't duplicate anything
  • Amounts in two decimals, no currency symbols or thousands separators to trip the importer
  • QuickBooks caps one upload at about 1,000 transactions — export month by month if you are busier than that
Date,Description,Amount # example · QuickBooks Online preset 02/09/2026,Payzum sale - 25 USDC on solana | invoice pzi_7f3k | order 1042 | status paid | [sale:pzi_7f3k],25.00 02/09/2026,Payzum fee - 0.25 USDC on solana | status swept | [fee:pzi_7f3k],-0.25 05/09/2026,Payzum sale - 0.31 SOL on solana | invoice pzi_9qm2 | terminal Front counter | status paid | [sale:pzi_9qm2],48.30 05/09/2026,Payzum conversion out - 0.31 SOL on solana -> USDC on solana | ... | [conversion:cv_41#out],-48.30 05/09/2026,Payzum conversion in - 48.30 USDC on solana from SOL on solana | ... | [conversion:cv_41#in],48.30 30/09/2026,Payzum payout - 70.00 USDC on solana | to 7xKX...9fQp | status completed | [payout:po_88],-70.00
Month-end, handled

Your month, closed for you on the 1st

Monthly statements

A report that never changes after it is published

At 05:00 UTC on the first day of every month, Payzum freezes the month that just ended: the full accounting statement as CSV and a settlement summary as JSON. Once published, a monthly report is write-once — a fixed anchor for closing the books and for anyone who asks, months later, what September looked like.

Then we email the account owner a link to download both files from the Reports page. Months with no activity are skipped, so the email only shows up when there is something to book.

  • Gross sales, conversions, fees, payouts and net — per chain and token
  • The same totals in your reporting currency
  • Gross sales per POS terminal, for businesses with more than one till
  • A count of any lines that could not be valued, so nothing hides
Your 2026-09 settlement report is readyOct 1 · 05:00 UTC · [email protected]

Closing your books with crypto for the first time?

Bring last quarter's questions — what your accountant asked for, what took longest — and we will show you what the export looks like for your payments and which file your software should take.

No commitment · Bring your accountant if you like

Inside the dashboard

From payment to books in four steps

Three of them happen once. After that, the work is downloading a file.

01 · ONCE

Set your reporting currency

Settings → Reporting currency. USD unless you choose otherwise; your funds stay in the assets you were paid in.

02 · EVERY DAY

Get paid as usual

Checkout, payment links, plugins, the POS. Each finished sale, conversion, fee and payout becomes a line on its own.

03 · WHEN YOU CLOSE

Open Reports

Pick a month or a custom range of up to a year, choose what to include, and choose your accounting software.

04 · DONE

Import and hand off

Upload the statement against your crypto clearing account and send the full ledger to your accountant.

For developers

Or pull it straight into your own systems

The same export is a REST endpoint, so your ERP or a nightly job can fetch it with the merchant's API key.

GET

/v1/export/accounting

A from and to date (UTC, up to 366 days) and a type filter: everything, sales, conversions, fees or payouts.

FORMATS

csv · json · bankcsv · ofx

The statement CSV comes in 3-column or 4-column (credit/debit) shape, with ISO, dd/mm/yyyy or mm/dd/yyyy dates.

MONTHLY

/v1/export/reports

List the frozen monthly reports and download any month's statement or summary.

# September as a QuickBooks-ready statement curl -o september.csv \ -H "x-api-key: $PAYZUM_API_KEY" \ "https://merchant.payzum.com/v1/export/accounting?from=2026-09-01&to=2026-09-30&format=bankcsv&dateFormat=dmy"

Full parameters and examples: the accounting export guide.

Who it's for

What crypto accounting looks like in practice

Different businesses, same question at the end of the month: what did we actually make, in our own currency?

Online stores

Quarter-end without a block explorer

Orders paid through your checkout or plugin arrive in the ledger with their order IDs, so the crypto revenue in your books matches the orders in your store, line for line.

Restaurants & retail

Every till and every cashier in one file

Sales from the Payzum POS carry the terminal and the cashier who took them, and the monthly summary totals gross sales per terminal — the view a multi-location owner wants at close.

Freelancers & agencies

Invoiced in dollars, paid in USDC

A 2,000.00 USD invoice paid in full is booked at 2,000.00 — the price you agreed with the client — and converted to your own currency at that day's reference rate.

Auto-convert users

Conversions your accountant can see

If you convert what you receive into stablecoins, each swap shows both legs with its executed rate and fees — exactly the detail a capital-gains question depends on.

Payout programmes

Money out, with the address it went to

Affiliates, sellers or creators paid through mass payouts appear as outflows with each recipient address, next to the sales that funded them.

Accountants & bookkeepers

A file, not a wallet login

Your client downloads one statement and one ledger. You get every movement with its source, its fiat value and the method behind it — no screenshots of a wallet app.

Payzum provides records, not tax or legal advice. How crypto income, conversions and fees are taxed depends on where you operate — confirm the treatment with your accountant.

Side by side

Payzum reports vs rebuilding it from your wallet

Closing a month of crypto sales Payzum accounting reports Spreadsheet from wallet history Generic wallet-import tax tool
Which transfers were sales Known — every line is tied to its invoice or order Worked out by hand Usually labelled by you
Value in your currency Invoice price, swap proceeds or parity, plus the ECB rate for the day Historical prices looked up line by line Market price at the timestamp
Fees Separate expense lines Easy to miss Depends on the source data
Conversions Both legs, executed rate and swap fees Two unrelated transfers Matched if both sides were imported
Into QuickBooks or Xero Statement CSV or OFX, ready to upload Build the file yourself Varies by tool
Month-end Frozen report on the 1st, with an email Whenever someone gets to it On demand
Fair questions

The questions accountants ask first

"Does Payzum convert my crypto into my currency?"

No. The reporting currency only decides how lines are valued. Your funds stay in the assets you were paid in, in your own wallets — Payzum payments are non-custodial end to end.

"Is it a live sync with QuickBooks?"

Not today: it is a file you upload. That also means nothing writes to your books without you seeing it first, and the same file is your audit trail.

"Will the numbers move if I export again next year?"

Monthly reports are frozen when they are published and never regenerated. An export you run today is built from the same ledger, so it reconciles against the Net on your Reports page.

"Is this tax advice?"

No. Payzum gives you the records — values, fees, conversions, references. How they are treated is your accountant's call, and depends on your jurisdiction.

Crypto accounting and tax reports: frequently asked questions

What does the Payzum accounting export include?

Every finished event on your merchant account: sales (paid, partially paid or overpaid invoices, including point-of-sale sales), conversions of what you received into stablecoins, Payzum fees, and payouts and mass payouts. Each line carries the crypto amount, token and chain, the transaction hashes, the invoice and order IDs, and its value in your reporting currency.

How does Payzum value crypto payments in my currency?

The first method that applies wins: the fiat price on the invoice you issued (prorated if the invoice was partially paid or overpaid), then the stablecoins 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, or the nearest earlier date within seven days. The method, rate and rate date are written on every line.

Can I import Payzum transactions into QuickBooks?

Yes. Choose QuickBooks Online on the Reports page and Payzum produces a bank-statement CSV with the columns Date, Description and Amount and dd/mm/yyyy dates. Upload it in QuickBooks under Transactions → Bank transactions → Upload from file, against a crypto clearing account. QuickBooks caps one upload at about 1,000 transactions, so export month by month if a period is larger. It is a file you upload, not an automatic sync.

Does it work with Xero, Zoho Books, Odoo or Alegra?

Yes. Xero, Zoho Books and Odoo get an OFX statement that they import as-is, without mapping columns. Alegra gets a CSV with dd/mm/yyyy dates that you map on its upload screen. Any other tool gets a plain Date, Description, Amount CSV with ISO dates, and your accountant can always take the full 36-column ledger as CSV or JSON.

When do I get the monthly report?

At 05:00 UTC on the 1st of every month Payzum freezes the previous calendar month: the full accounting statement as CSV and a settlement summary as JSON. A published monthly report never changes. The account owner receives an email with a link to download both files from the Reports page. Months without any activity are skipped.

Are conversions to stablecoins included?

Yes, as two entries: the asset that left and the stablecoin that arrived, for the same value. In many jurisdictions swapping one crypto asset for another is a taxable disposal, so your accountant needs to see both legs. The full ledger also records the executed rate and the swap and network fees of each conversion.

Is the export enough to file my taxes?

It gives you and your accountant the records most tax filings start from: what each payment was worth in your currency when it arrived, which movements were fees, and every conversion. 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.

Hand your accountant a file, not a wallet

Twenty minutes on how you take crypto today, what your accountant keeps asking for, and which export fits. If you don't accept crypto yet, we will show you what your books would look like when you do.

Non-custodial · Valued in your currency · Monthly report on the 1st