Cloud costs in euros at AWS, Azure and Google Cloud almost always start from USD prices that each provider converts into your billing currency under its own rule: Azure under a Microsoft Customer Agreement with a rate captured in the last days of the previous month, Google Cloud with rates set at the start of the month, AWS at invoicing, with the invoice as the evidence. A defensible euro report therefore needs its own exchange-rate policy: which source and which date apply, and how currency effects are kept apart from consumption in month-on-month comparisons. This guide shows what the exports contain, how to choose between invoice rate, ECB reference rate and budget rate, and ends with a policy template.
Three currencies, three jobs
Start with the role of each currency, not the conversion formula:
| Role | Question it answers | Typical evidence |
|---|---|---|
| Pricing currency | Which currency defines the rate or contract? | Price list, price sheet, pricing_currency, PricingCurrency |
| Billing currency | Which currency did the provider invoice? | Invoice, line_item_currency_code, BillingCurrency, currency |
| Reporting currency | Which currency does the organisation use for budgets and results? | Internal policy, group requirement |
The roles can coincide, but they do not have to. Every monetary amount therefore needs two things, an amount and a currency, and a converted amount also needs its source, method and rate date.
How AWS, Azure and Google Cloud set the rate
AWS
AWS bills in USD by default. You set the payment currency in the Billing console under Payment preferences; where several sellers of record invoice you, payment profiles set the currency per seller. Amazon Web Services EMEA SARL supports EUR, GBP and CHF among others. The Bills page shows totals in USD and, when invoices are issued in another currency, the total in that currency as well. The invoice is the evidence for the rate applied.
For USD-priced Marketplace invoices AWS documents the method in more detail: Bloomberg daily rates at the time of invoicing, the rate of the last day of the month for consolidated pay-as-you-go invoices, and the rate shown on every invoice. Private offers in EUR or GBP are invoiced directly in the offer currency. In AWS Europe's consolidated daily invoicing for customers who pay by invoice, credit memos use the same currency and exchange rate as the original invoice.
Azure
Under a Microsoft Customer Agreement (MCA), Azure is priced in USD worldwide. The billing currency follows the legal address: Germany and Austria EUR, Switzerland CHF, the United Kingdom GBP. Microsoft uses London closing spot rates captured in the two business days before the last business day of the previous month, and applies that rate to all purchases and consumption in the following month. January's rate appears on the January invoice, available at the start of February.
Under an Enterprise Agreement (EA) you are billed in the currency the agreement designates; Microsoft states that FX rates do not apply, and the cost-in-pricing-currency field is absent from EA exports. The exception is Spot, whose pricing currency is USD even under EA.
The Retail Prices API converts into other currencies on request, but by Microsoft's own description returns estimated prices at the current rate. It cannot reconcile an invoice.
Google Cloud
Google Cloud converts its prices from USD into the currency of a local-currency billing account, using rates published by leading financial institutions. Rates are set at the beginning of every month. A billing account operates in exactly one currency that cannot be changed after creation; another currency needs a new billing account.
| Provider | Price basis | Rate fixed | Where to find it |
|---|---|---|---|
| AWS | USD | With the invoice; Marketplace: Bloomberg daily rate at invoicing | Invoice, Bills page |
| Azure MCA | USD | Before the month starts, valid for the whole month | Invoice, ExchangeRatePricingToBilling in the export |
| Azure EA | Agreement currency | No exchange rate, except Spot | Price sheet |
| Google Cloud | USD | At the start of each month | currency_conversion_rate in the BigQuery export |
What the cost exports contain
| Export | Billing currency | Pricing currency | Rate and direction |
|---|---|---|---|
| AWS CUR 2.0 | line_item_currency_code | pricing_currency with pricing_public_on_demand_cost | No rate column in the line item dictionary; take the rate from the invoice |
| Azure cost details (MCA) | BillingCurrency, CostInBillingCurrency | PricingCurrency, CostInPricingCurrency, plus costInUsd | ExchangeRatePricingToBilling multiplies pricing into billing currency; ExchangeRateDate |
| Google BigQuery export | currency, cost | USD | currency_conversion_rate = local currency per USD; cost ÷ rate gives USD |
| FOCUS | BillingCurrency must match the invoice currency | PricingCurrency (since FOCUS 1.2) with PricingCurrencyEffectiveCost | Implied: EffectiveCost ÷ PricingCurrencyEffectiveCost |
For AWS, check line_item_currency_code first. If it says USD while the invoice arrives in EUR, the euro amount exists only on the invoice, and your report needs either that rate or your own reporting rate. For Azure, Microsoft spells out the reconciliation: EffectivePrice × Quantity gives cost in pricing currency, and multiplying by ExchangeRatePricingToBilling gives cost in billing currency. Price fields such as EffectivePrice, UnitPrice and PayGPrice are in pricing currency under MCA.
Two queries show whether your data follows that logic. The first checks Azure MCA, where the documented method means one rate per month and currency pair:
SELECT
BillingPeriodStartDate,
PricingCurrency,
BillingCurrency,
MIN(ExchangeRatePricingToBilling) AS rate_min,
MAX(ExchangeRatePricingToBilling) AS rate_max,
SUM(CostInPricingCurrency) AS cost_pricing,
SUM(CostInBillingCurrency) AS cost_billing
FROM azure_cost_details
GROUP BY BillingPeriodStartDate, PricingCurrency, BillingCurrency
ORDER BY BillingPeriodStartDate;
If rate_min and rate_max differ, look at the rows involved, such as purchases or refunds referring to an earlier invoice, before you carry a monthly rate into the cost bridge. The second query totals FOCUS data per billing currency, never across currencies:
SELECT
BillingPeriodStart,
BillingCurrency,
SUM(BilledCost) AS billed_cost,
SUM(EffectiveCost) AS effective_cost
FROM focus_cost_and_usage
GROUP BY BillingPeriodStart, BillingCurrency
ORDER BY BillingPeriodStart, BillingCurrency;
More than one row per month means mixed currencies, and you need the policy below. Which AWS export suits this is covered in AWS CUR 2.0 or FOCUS; set up the Google export as described in set up Google Cloud billing export for cost reporting. FOCUS is defined in the glossary.
Choosing a reporting rate policy
No single rate answers every question. The policy states which view serves which purpose:
| Rate basis | What the number shows | Strength | Weakness | Fits |
|---|---|---|---|---|
| Provider invoice rate | What was actually billed | Ties to the invoice and payment | Different source and timing per provider; only for your own billing currency | Invoice checks, payables |
| ECB monthly average | Average rate over the usage period | One source for all providers and currencies; smooths daily moves | Known only after month-end; differs from the invoice rate | Management reporting, team comparisons |
| ECB month-end rate | Rate on the last publication day | Close to a balance-date view | A single day's value | Alignment with close logic |
| ECB daily rate | Rate per usage day | Most precise with daily data | Moves daily; days without publication need a rule | Daily cost analysis |
| Budget rate | Cost at the planned rate | Separates usage from FX variance against budget | Differs from actuals; needs its own FX line | Budget against actual |
The ECB publishes its euro reference rates at around 16:00 CET on every working day except TARGET closing days, with EUR as the base, so units of foreign currency per euro. USD, GBP and CHF are included. The ECB describes the rates as published for information purposes only and strongly discourages using them for transactions. They still work for a consistent internal reporting method; they are not your provider's or your bank's rate.
Tax and statutory accounts stay outside the reporting policy. For German VAT, section 16(6) of the UStG requires conversion at the monthly average rates published by the Federal Ministry of Finance, and the tax office can allow the daily rate. That matters for reverse-charge invoices in USD, covered in AWS and Azure invoices: checking EU reverse charge. For German statutory accounts, section 256a of the HGB requires assets and liabilities denominated in foreign currency to be translated at the mean spot rate on the balance sheet date. Which rule applies to your bookkeeping is a question for finance and your tax adviser.
FX effects in month-on-month comparisons: the constant-currency view
A month-on-month comparison in euros mixes two causes: changed usage or prices, and changed rates. A constant-currency view separates them by restating the current month at the previous month's rate or at the budget rate:
Constant_currency_current = Pricing_currency_amount_current × Rate_previous_month
FX_effect = EUR_amount_current - Constant_currency_current
Usage_and_price = Constant_currency_current - EUR_amount_previous_month
Each provider gives you the inputs differently:
- Azure MCA:
CostInPricingCurrencyis the USD amount andExchangeRatePricingToBillingthe monthly rate. The FX effect is the current month'sCostInPricingCurrencytimes the rate change from last month. It is already inside your euro invoice even though you converted nothing yourself. - Google Cloud:
cost÷currency_conversion_rategives the USD amount; the rate change between two invoice months gives the FX effect the same way. - AWS: if cost lines are in USD, value them at your reporting rate. With a EUR invoice, invoice total ÷ USD total gives that month's implied invoice rate.
- Invoices in agreement currency, such as Azure EA, carry no provider FX effect; one appears only when you translate into a different reporting currency.
For budget comparisons, do the same with the budget rate instead of last month's rate. A budget overrun caused by a weaker euro then shows as an FX line and is not pinned on a team whose usage did not change. How this bridge fits the joint monthly meeting is covered in the monthly cloud cost review; you set the budget rate during planning, see cloud budget planning for 2027.
GBP for UK entities
A UK subsidiary receives Azure MCA invoices in GBP, can pay AWS Europe in GBP, and runs a Google Cloud billing account in GBP. Keep the local GBP view alongside the EUR group view: both are correct because they answer different questions. The reconciliation must trace the group number back through the rate policy to the GBP amount originally invoiced.
UK VAT has its own conversion rules. HMRC requires amounts in sterling and, in VAT Notice 700 section 7.6, sets out the UK market selling rate at the time of supply, or alternatively the period rates HMRC publishes for customs purposes, or another rate it has approved. Agree the choice with your UK adviser. What else UK entities need is on the UK companies page.
Never add mixed currencies silently
A group operating in EUR, GBP and CHF needs either an approved conversion or a total per currency. EUR + GBP + CHF is not a metric. A missing rate must not make a subsidiary or a provider disappear from the report either. A defensible report shows:
- the EUR total of the lines actually converted;
- source amounts and source currencies;
- method, source and rate period;
- unconverted amounts grouped by currency;
- the FX effect separately from usage and price;
- a warning when budget and actual use different rate bases.
Template: cloud cost currency policy
Cloud cost currency policy, version {n}, effective {date}, approved by {name, role}
1. Reporting currency: EUR. UK entities also report locally in GBP.
2. Evidence level: each cost line keeps its amount and billing currency unchanged.
3. Amounts already invoiced in EUR are not converted again.
4. Rate source for reporting conversions: ECB reference rates, EUR base,
stored as units of foreign currency per EUR.
5. Monthly report method: {monthly average | month-end | daily rate}.
Days without publication: latest published rate.
6. Budget: budget rate per currency {rate}, set on {date}.
Variance from rates is shown as its own line.
7. Month-on-month: constant-currency view at last month's rate alongside actuals.
8. Missing rates: amount stays visible in its source currency and
is excluded from the EUR total.
9. Rounding: at output only, to {n} decimal places.
10. Tax and statutory accounts: VAT and balance sheet translation follow
finance and tax adviser instructions, not this policy.
11. Changes: only from the start of a month, with date and effect noted in the report.
Common mistakes
- An Azure MCA amount already invoiced in EUR is converted a second time at an ECB rate.
- The invoice is reconciled against converted prices from the Azure Retail Prices API, which Microsoft itself calls estimates.
- Costs from Google billing accounts in different currencies are summed in a table without a currency column.
- The USD estimate for an open month on the AWS Bills page is read as a euro amount.
- Budget at the budget rate is compared with actuals at the invoice rate, with no FX line.
- The rate direction is inverted: the ECB quotes foreign currency per euro,
currency_conversion_rateis local currency per USD, andExchangeRatePricingToBillingconverts pricing into billing currency. - One month's rate is applied to credit memos that refer to an earlier invoice.
The check before sign-off
Before signing off a monthly report, engineering and finance answer together: do billing currency and amounts agree with the invoices? Was any euro amount converted twice? Do budget, forecast and actual use the same rate basis? Are missing rates visible? Is each material variance explained as usage, price or FX? How late invoices and credits reach the close is covered in cloud costs at month-end; the invoice side in euros is covered in paying and reporting AWS and Azure costs in euros.
Euro presentation in Costfluent
In Costfluent each cost line keeps its billing currency; conversion happens at query time into the workspace's presentation currency, euro by default. The source is the ECB reference rates, and you choose monthly average or transaction date as the method, with days without publication carrying the latest published rate forward. Every figure states its rate, source and method. When a rate is missing, the amount shows as unconverted instead of entering the total at one-to-one. With conversion switched off, a report spanning several currencies shows a total per currency and no combined total. You cannot store your own budget rate there; the ECB is the only rate source. More on the finance solution page.
Sources and method
Checked on 10 October 2026: AWS CUR 2.0 line item columns, CUR 2.0 pricing columns, payment preferences and payment currency, understanding your bill, consolidated billing in AWS EMEA and Marketplace currencies and rates; Microsoft MCA pricing and billing currency, exchange rate, EA pricing and currency and cost details fields; Google Cloud currencies for billing accounts and standard usage cost export; FinOps Foundation FOCUS 1.4 Billing Currency and Pricing Currency; ECB euro reference rates; section 16 UStG; section 256a HGB; HMRC VAT Notice 700. The tables, formulas and policy template are Costfluent recommendations for management reporting, not tax, legal or accounting advice.



