The data used
A shop buys goods in dollars or euros and sells them in hryvnias. It sets the price at today's rate, but spends the sales proceeds on the next batch a month or two later, at a different one. If the rate has risen in the meantime, part of the margin goes on the difference. The question is how much to build into the price up front so that this difference does not eat the profit.
To answer it, we took the NBU's official dollar and euro rate for every day from 2 November 2024 to 2 November 2026, 731 values per currency, from the NBU open API. For each day we calculated the change in the rate after 30, 60 and 90 calendar days. That is the cycle risk: the price is set on the first day and the next batch is paid for on the last.
What happened to the rate over two years:
- Dollar: from 41.2194 to 45.3526 hryvnias, up 10.03%. The low was 41.0807 (8 April 2025), the high 45.6008 (28 October 2026).
- Euro: from 44.8467 to 50.6843 hryvnias, up 13.02%. The low was 42.8627 (4 February 2025), the high 52.2492 (24 August 2026).
Two limits of this data. First, the NBU's official rate is not the rate at which you buy currency at your bank; the gap between them is a separate cost and has to be added on top of the buffer. Second, two years of history are not a forecast. The calculation shows what headroom would have been enough in the past, not that it will be enough from now on.
How far the rate moved in 30, 60 and 90 days
Calculated from the daily official NBU rate (bank.gov.ua), data downloaded on 02.11.2026. Change between the rate on the first and the last day of the period.
The full picture, including the typical case:
| Cycle | Dollar: maximum | Dollar: 95% of cases | Dollar: median | Euro: maximum | Euro: 95% of cases | Euro: median |
|---|---|---|---|---|---|---|
| 30 days | +2.94% | +1.90% | +0.34% | +6.14% | +3.79% | +0.32% |
| 60 days | +3.67% | +2.53% | +0.67% | +9.68% | +5.64% | +1.10% |
| 90 days | +4.67% | +3.68% | +0.92% | +10.70% | +8.24% | +1.70% |
"95% of cases" means that on 95 out of 100 start days, the rate change over the period was no larger than this number. The median is the change on a typical day.
What follows from this:
- The euro is two to three times riskier than the dollar. The worst 60 days for the dollar were plus 3.67% (4 January to 5 March 2026), for the euro plus 9.68% (21 February to 22 April 2025). The hryvnia's euro rate moves together with the euro–dollar rate, so goods bought in euros need a bigger buffer.
- The rate rose more often than it fell. The dollar rose in 70% of 60-day periods, the euro also in 70%. The median is plus 0.67% and 1.10% over 60 days. Even in a calm period, a price set at the old rate slowly loses margin.
- A longer cycle means more risk, but not proportionally. For the dollar, going from 30 to 90 days raises the maximum 1.6 times, not threefold.
Price formula with a buffer
Let C be the unit cost in foreign currency, R the rate, U the hryvnia costs per unit (domestic delivery, packaging, fees), m the target margin as a share of price, b the buffer for a rate change.
- Price without buffer: P = (C × R + U) ÷ (1 − m)
- Price with buffer: P′ = (C × R × (1 + b) + U) ÷ (1 − m)
The buffer multiplies only the currency part. Hryvnia costs do not depend on the rate, so they need no headroom. Hence the consequence: the price with a buffer rises not by b but by b × the currency cost's share of total costs. If the currency part is 90% of the cost, a 3.67% buffer raises the price by 3.3%.
Without a buffer, if the rate rose by b, the margin becomes: 1 − (C × R × (1 + b) + U) ÷ P.
Example: a 20-dollar product
An illustrative product: a purchase price of 20 dollars per unit, the NBU rate on 2 November 2026 of 45.3526 hryvnias, so UAH 907. Another UAH 100 of hryvnia costs per unit. Target margin 30%. The cycle from setting the price to paying for the next batch is 60 days.
| Option | Buffer | Price | Margin if the rate rose by the buffer and the price stayed |
|---|---|---|---|
| No buffer | 0 | UAH 1,439 | — |
| Dollar, 95% of cases | 2.53% | UAH 1,471 (+2.3%) | 28.4% instead of 30% |
| Dollar, two-year maximum | 3.67% | UAH 1,486 (+3.3%) | 27.7% instead of 30% |
| Same product at 20 euros, 95% of cases | 5.64% | UAH 1,673 (+5.1%) | 26.4% instead of 30% |
| Same product at 20 euros, maximum | 9.68% | UAH 1,731 (+8.8%) | 23.8% instead of 30% |
For the euro product, the price without buffer is calculated at 50.6843 hryvnias: UAH 1,591. If the price was not changed after the worst 60 days of the two years, the margin falls from 30% to 23.8%. A quarter of the unit profit goes on the exchange rate.
Can you simply take the maximum and stop worrying? You can, but a buffer is a higher price for the buyer today. For a product with a competitive price, an 8.8% mark-up may cost more sales than it saves in margin. So the buffer works together with a repricing rule: a small headroom in the price and a clear line at which the price is recalculated.
Repricing rule
The buffer protects the margin only until the rate moves beyond it. So add a trigger rate to the price: R × (1 + b). For the dollar example with a 3.67% buffer it is 47.02 hryvnias. As soon as the official NBU rate exceeds the trigger, the price is recalculated at the new rate with a new trigger.
- Buying in euros?The largest 60-day rise is 9.68% against 3.67% for the dollar. Yes → use the euro "95% of cases" buffer and reprice more often
- Can you change prices on the site within a day?Then the risk is limited to the time it takes you to notice the trigger and reprice, not the whole cycle. Yes → a 30-day buffer and a daily rate check
- Are prices fixed for longer: a dealer price list, a catalogue, a contract?You cannot reprice mid-term. Yes → the "maximum" buffer for the whole term of the price list
- Is your margin smaller than the "maximum" buffer?One bad month takes the whole profit on the batch. Yes → shorten the cycle: smaller batches or paying the supplier closer to the sale
Repricing works the other way too. If the rate fell below the pricing rate by the same amount, competitors buying in the same currency get room to cut prices. Then it is worth lowering the price and calculating a new trigger from the new rate.
Another way to reduce the risk is a shorter cycle. For the euro at 95% of cases, the 30-day buffer is half the 90-day one (3.79% against 8.24%). If the supplier gives deferred payment, you buy currency closer to the sale, and the risk shrinks. What such a deferral costs and how to compare it with a loan is covered in the article on cash gaps. For those who sell in foreign currency themselves, the risk is mirrored, and the key issue there is the settlement deadline for exports.
Calculator
Our position
Build the "95% of cases" buffer for your cycle and currency into the price: for 60 days that is 2.53% of the currency cost for the dollar and 5.64% for the euro. Next to every price, record the rate it was calculated at and the trigger rate. Once the NBU rate passes the trigger, reprice without waiting for the end of the month. Use the "maximum" buffer only when the price cannot be changed until the end of its term: a dealer price list, a contract, a printed catalogue. How the buffer affects the profit on one order can be checked in the unit economics calculator.
The position does not hold if the exchange rate behaves differently from the past two years: for example, after a change in the exchange rate regime or a market shock. Two calmer years of history then say nothing about the next two months, and the buffer from the table will be too small. A sign of such a situation is the rate crossing your whole buffer within a few days. Then switch to daily repricing and pay for large batches only against existing orders.
Checked on 2 November 2026 on official US dollar and euro rate data from the NBU open API (bank.gov.ua, daily values from 02.11.2024 to 02.11.2026); all rate changes, prices and margins in the article were recalculated in code. The 20-dollar or 20-euro product is an illustrative example.
