No Fianto fee during the beta. Any fee comes with at least 30 days notice. See pricing
Guides9 min read

Accounting for USDC revenue: what to record for every payment.

For every USDC payment, keep the date and time it arrived, the amount, its value in US dollars at that moment, the Solana transaction signature, the customer and any fees. In the US, the IRS says a business paid in digital assets includes their fair market value in US dollars, as of the date received, in gross income. Fianto's CSV exports carry most of these fields; the dollar value and your refunds you record yourself.

On this page
Before you start: this is not tax adviceWhat should you record for each USDC payment?How does the IRS treat USDC received as payment?What Fianto's dashboard and CSV exports give youGross, fee, network fee and net: which number reached you?Refunds, network fees and rentA month-end routine for USDC revenueSourcesQuestions
TL;DR
  • Record each payment when it lands: time, USDC amount, US dollar value, transaction signature, customer, fees.
  • The IRS treats USDC as a digital asset: payment for goods or services is income at its fair market value in US dollars when received.
  • Fianto exports payments, orders, subscriptions and customers as CSV. It does not calculate tax and cannot see refunds you send.

Before you start: this is not tax advice

Fianto does not calculate, collect or file tax. What it does is keep a record of every payment it saw settle, and let you download those records. The rest of this post is about what to keep, where each piece comes from, and the few places where you have to add something yourself.

What should you record for each USDC payment?

A USDC payment through Fianto is one Solana transaction from the customer's wallet to yours. Nobody holds the money in between, so there is no payout statement from a processor to reconcile against. Your record is the payment itself. For each one, keep:

What to keepWhyWhere it comes from with Fianto
Date and time receivedThe IRS values income as of the date receivedsucceeded_at in the payments export, in UTC
Amount that reached your walletThe USDC you actually receivednet, in USDC with 6 decimals
Value in US dollars at receiptUS tax reporting is in US dollarsNot in the export. Record the value you use and where it came from
Transaction signatureProves the transfer on chain; anyone can look it upsignature
CustomerWho paid, for your sales ledgercustomer_wallet, and customer_email_unverified if the customer typed one
What was soldMatches the payment to a product or serviceproduct_name, merchant_order_id, source
FeesShows what the customer paid on top of your pricefee and network_fee, both paid by the customer
RefundsMoney you sent backNot in Fianto. Keep your own transaction signature

Keep the receiving wallet's address with your records too. One wallet serves one Fianto merchant, and the wallet's on-chain history is an independent copy of the same transfers. If you ever changed your receiving wallet, keep both addresses: subscriptions that started before the change keep paying the old wallet.

How does the IRS treat USDC received as payment?

As of 14 October 2026, these are the IRS's own statements on the points that matter for record-keeping. Quotes are from irs.gov.

  • Stablecoins are digital assets. The IRS defines a digital asset as "any digital representation of value recorded on a cryptographically secured, distributed ledger" and lists stablecoins among its examples.
  • Payment is income at fair market value. Notice 2014-21 says a taxpayer "who receives virtual currency as payment for goods or services must, in computing gross income, include the fair market value of the virtual currency, measured in U.S. dollars, as of the date that the virtual currency was received."
  • That value is also the basis. The same notice says the basis of virtual currency received for goods or services "is the fair market value of the virtual currency in U.S. dollars as of the date of receipt."
  • Records must back the return. The IRS digital asset FAQ says the rules "require taxpayers to maintain records that are sufficient to establish the positions taken" on returns, and the digital assets page asks for records of receipts, sales, exchanges and other dispositions, and of fair market value in US dollars for assets received as income.
  • Selling or exchanging is a separate event. The Form 1040 digital asset question asks whether you received digital assets as payment for property or services, and separately whether you sold, exchanged or otherwise disposed of them. The digital assets page says payments received by independent contractors are reported on Schedule C.

On the dollar value: Circle, which issues USDC, says USDC can be redeemed 1:1 for US dollars. The IRS still asks for fair market value, not face value, so record the value you use for each payment and its source, and apply the same method every time. Which value is right for your business is a question for your accountant.

Fianto writes nothing about other countries' rules here, because we have not checked them against primary sources. If you are outside the US, ask a local adviser.

What Fianto's dashboard and CSV exports give you

Each of the Payments, Orders, Subscriptions and Customers lists in the merchant dashboard has an export. You choose a date range of up to 366 days, an optional status filter, and the columns. A file holds up to 50,000 rows, and you can run 20 exports an hour. Ticking rows in a list exports just those rows. More on the reporting page and in the exports guide in the Fianto docs.

ExportOne row perUseful columns for your books
PaymentsPayment, one-off or subscription chargegross, fee, network_fee, net, source, signature, succeeded_at, status
OrdersOne-off orderlist_amount, discount, discount_code, paid_at, has_unmatched_transfer
SubscriptionsSubscriptioninterval, status, current_period_start, current_period_end, ended_at
CustomersPaying walletwallet, first_seen_at, succeeded_payments, total_gross, total_net

For a revenue ledger, the payments export is the one to start from: every renewal of a subscription is its own payment row, with source set to subscription, next to one-off payments marked one_off. Filter it to the Succeeded status for money that arrived. A subscription creates no order, so the orders export holds one-off sales only.

Three things to know about the file

  • Amounts are in USDC with 6 decimals, never in dollars.
  • Dates and times in the file are UTC, whatever time zone the dashboard shows. The date range you pick is counted in the dashboard's time zone.
  • Customer emails are what the customer typed, and are not verified. A customer is identified by the paying wallet.

The Overview shows revenue in US dollars, counted at 1 USDC = 1 USD. That is a fixed conversion for a quick view, not a market price, so do not treat it as the fair market value record.

Every payment, order and subscription in one dashboard, with CSV exports of up to 366 days.

See reporting

Gross, fee, network fee and net: which number reached you?

On every payment row, gross is what the customer paid, and it equals net plus fee plus network_fee. Only the net went to your wallet. The fee and the network fee went to Fianto's treasury in the same transaction, and the customer paid them on top of your price.

ColumnWhat it isWho paid itWhere it went
netYour price, after any discountThe customerYour wallet
feeFianto's service fee. 0 during the betaThe customerFianto's treasury
network_feeA flat fee on subscription charges, 0.01 USDC today on plans created since 6 October 2026; 0 on one-off paymentsThe customerFianto's treasury
grossThe sum of the threeThe customerSplit as above

After the beta, the customer will pay a Fianto fee of about 0.1-0.5% on top of the price, and it will show in the fee column. The merchant still pays nothing. How much a USDC sale costs next to a card sale is worked through in USDC vs card fees.

If a coupon was used, net is already the discounted amount. The orders export adds list_amount (the price before the discount), discount and discount_code, so you can show both.

Refunds, network fees and rent

There is no refund button and no refund API. A refund is USDC you send back from your own wallet, and Fianto cannot see it: the original payment stays Succeeded in the dashboard and in the export. Record each refund yourself, with the date, the amount, the customer's wallet, your transaction signature and the payment it reverses. There are no chargebacks either; the differences are in chargebacks vs crypto refunds.

You will find no Solana costs to book from Fianto, because the merchant pays none. The customer pays the Solana network fee of each transaction it signs, under $0.01. On a subscription charge the customer also pays a flat 0.01 USDC network fee today, which shows in the exports as the network_fee column, not as a cost of yours. Subscription rent is paid by the customer in SOL: about 0.00197 SOL today for the subscription account, which the customer gets back by reclaiming it after the subscription ends, and about 0.00163 SOL today for a one-time wallet setup, not returned. One-off payments need no rent. The details are in account rent and reclaim.

Besides past-due subscriptions, Needs attention in the dashboard lists two cases worth a look at month end: orders that received a transfer that did not match (for example, paid twice) and failed payments where the money arrived anyway. If you returned that money, it stays listed, because Fianto cannot see the refund, so note it in your records.

A month-end routine for USDC revenue

  1. Export Payments for the month with the Succeeded status. Keep the default columns, which include the signature and the fees.
  2. Add a column for the US dollar value of each payment at its succeeded time, and note the source and method you used.
  3. List the refunds you sent from your wallet that month, each with its signature and the payment it reverses.
  4. Check Needs attention for unmatched transfers and failed payments where money landed, and note what you did about each.
  5. Compare the total of the net column with the USDC that arrived in your receiving wallet over the same dates.
  6. If you sold or exchanged any USDC that month, keep that record too: the IRS treats it as a separate event.
  7. Store the CSV files unedited, next to your working copy, and send both to your accountant.

A range can cover up to 366 days, so one export per dataset can cover a whole tax year. Monthly exports are easier to check against your wallet.

Sources
Questions

Questions about accounting for USDC revenue.

Is USDC received for goods or services taxable income in the US?

The IRS says a taxpayer who receives virtual currency as payment for goods or services includes its fair market value in US dollars, as of the date received, in gross income. It lists stablecoins as digital assets. Ask an accountant how this applies to you.

Does Fianto calculate or file tax for me?

No. Fianto does not calculate, collect or file tax. It records every payment it saw settle and lets you export them as CSV.

Which column in Fianto's export is the money I received?

The net column. Gross is what the customer paid, and it equals net plus the fee plus the network fee; the fee and the network fee went to Fianto's treasury, not to you.

Are refunds in the Fianto export?

No. A refund is USDC you send back from your own wallet, and Fianto cannot see it. Keep your own record of each refund, with its transaction signature.

Does the export show US dollar values?

No. Export amounts are in USDC with 6 decimals. The dashboard shows dollars at 1 USDC = 1 USD, which is not a market price, so record the dollar value you use yourself.

Read next.

Keep the record when the money lands.

Export it monthly, add the dollar value, and hand it to your accountant.

New posts are announced on X and Discord.