Multi-Currency Accounting for a Small Business: UAH, USD, EUR, USDT — Without the Headache
"Clients pay in dollars. I pay salaries in hryvnia. Rent in hryvnia. One supplier in euros. Some clients pay USDT because it's easier for them. And every month my bookkeeper and I argue about what 'profit' means."
There's a specific moment small business owners in Ukraine hit — usually somewhere between year two and year four — when their bookkeeping stops being able to answer the simple question "did we actually make money this month?". The reason is almost always the same. Revenue is arriving in multiple currencies, expenses are going out in multiple currencies, exchange rates are moving under everyone's feet, and nobody set up the accounting to handle it cleanly.
This article is the practical version — not the accounting-standards version — for a small business owner who wants to know what her business is actually earning when clients pay in USD, salaries go in UAH, and USDT sits on a wallet.
Why Multi-Currency Trips Up Small Business
One — everything happens on different dates. A ₴120K invoice issued October 1 at 41.2 UAH/USD equivalent. Paid November 12 at 41.8. Converted to hryvnia on the bank statement at 41.5. Three exchange rates apply to one transaction. If your bookkeeping tracks only one, something is silently wrong.
Two — the "official" rate isn't the rate you actually got. NBU rate is one number. Your bank's conversion rate is another. Your USDT off-ramp rate is a third. Booking at the NBU rate means the P&L doesn't match the bank.
Three — mixing operating currency and reporting currency confuses the P&L. If your reporting is in UAH but half your revenue is in USD, exchange movements alone can make a month look better or worse than the operations warrant.
Four — USDT and other stablecoins add a fourth layer. Legally often ambiguous; practically increasingly common. Treating USDT as "cash" or as "not cash" both work, but the choice has to be explicit.
How to Recognise You Have a Multi-Currency Problem
- Your revenue in the P&L doesn't reconcile to the sum of your bank statements across accounts.
- You cannot answer "what was our real revenue in September" in one currency without opening three files.
- Exchange rate movements are showing up as apparent margin changes you can't explain to yourself.
- Your bookkeeper has more than one version of "the number" for the same month.
Any of these — the framework below is the fix.
How to Solve It — The Four Practices
Practice one — Pick a reporting currency and stay with it. For most Ukrainian small businesses, UAH. Every operation gets recorded in its original currency AND converted to UAH at the rate that applied on the transaction date. Never restate old months at new rates. The point of a period is that its numbers are fixed once closed.
Practice two — Track the rate you actually got, not the "official" one. For bank operations, the rate on the statement is the truth. For direct FX conversions, the exchange fee is included. For USDT off-ramps, the effective rate after fees. Recording NBU rate produces P&L numbers that don't match the bank — and then you can't reconcile.
Practice three — Separate operating gain/loss from FX gain/loss. Operating margin should not swing because the currency moved. If USD strengthened between invoicing and payment, that's an FX gain — a separate line, not part of "revenue". Same logic for USDT held on a wallet: revaluation goes to an FX line, not into gross margin.
Practice four — Revalue open positions monthly. At month-end, any USD, EUR, or USDT balance on a wallet or bank account is revalued at the closing rate. The difference from prior month is a P&L movement in the FX line. This surfaces silent gains or losses that would otherwise pile up until the next transaction.
A platform like Finmap automates practices one, two, and four — records original currency, uses actual bank rates, and monthly-revalues open positions — so the owner only needs to make the practice-three call about how strictly to separate FX from operating.
Where USDT Sits
For most small businesses in Ukraine, USDT is a practical bridge: clients pay in it, off-ramps convert to UAH, and the balance in between behaves like cash but isn't strictly cash on the books.
Two workable approaches, pick one and be consistent:
- Treat USDT as a foreign-currency cash equivalent. Same accounting rules as USD. Monthly revaluation, FX gains/losses on its own line.
- Treat USDT as an "investment/other asset". Convert to UAH only when off-ramped. Slightly cleaner for tax if your entity is a FOP; slightly less accurate for cash visibility.
Both are defensible. The mistake is being inconsistent.
Three Common Mistakes
- Restating past months at today's rate. A closed month is closed. Restating breaks trust in the numbers.
- Recording revenue at the NBU rate but the bank at the actual rate. Ensures the P&L never reconciles to the bank.
- Ignoring the FX line as "not real". FX gain and loss are real. Ignoring them makes operating look better in strong-USD periods and worse in weak-USD periods.
📌 See how multi-currency operations look with automatic revaluation, actual bank rates, and clean FX separation from operating margin. Book a 20-minute Finmap demo → finmap.online/ua
Read also
Frequently Asked Questions
The one you pay salaries and rent in. For Ukraine, UAH.
Actual bank rate for bank operations. Actual off-ramp rate for USDT. NBU only if there's no other reference.
Currently ambiguous in Ukraine; consult your accountant on the entity-specific treatment. For management accounting, choose one method and be consistent.
Yes — foreign currency held on any account or wallet.
Spreadsheet works up to 2 currencies and low volume. Above that, a platform with automatic revaluation pays back rapidly in reconciliation time.

