> ## Documentation Index
> Fetch the complete documentation index at: https://docs.upstackdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How Multi-Currency Reporting Converts Revenue and Ad Spend

> Understand how Upstack converts orders and ad spend into a single reporting currency using historical daily exchange rates, and how to choose that currency in the API and CLI.

If you sell in more than one currency — or run ad accounts billed in a currency your store doesn't use — the raw numbers can't simply be added together. Upstack converts every money value into one **reporting currency** before totalling it, so a revenue figure always means one thing.

## Choosing the reporting currency

Every query endpoint accepts an optional `currency` parameter, and every CLI query command accepts `--currency`:

```bash theme={null}
upstack query \
  --measures orders.gross_revenue,channel.spend \
  --granularity day \
  --date-start 2026-04-01 \
  --date-end 2026-04-30 \
  --currency GBP
```

<Warning>
  **If you omit `currency`, results are converted to USD** — not to your store's currency. A shop selling in GBP that queries without the parameter receives GBP revenue converted into USD. Pass the parameter explicitly, or set a CLI default with `upstack config set currency GBP`, so totals come back in the currency you expect.
</Warning>

In the dashboard this is handled for you: the display-currency picker sends your account's currency on every request.

## Rates are historical, not current

Each amount is converted at the rate for **the day that amount occurred** — the order's date for revenue and cost, the spend date for ad spend. It is not converted at today's rate.

This matters because it makes reports reproducible. Running the same April report in June returns the same numbers it returned in April; a March order is always valued at March's rate, no matter when you ask. Converting everything at today's rate would make historical revenue drift every day.

Rates come from a daily feed and cover every calendar day. If a particular day is missing, Upstack falls back to the most recent earlier day rather than guessing. If no rate can be found at all, the amount passes through unconverted rather than being dropped or estimated — a missing rate never removes a row from your results.

## What is not converted

**Ad-account budgets.** On [`query-channel-details`](/cli/query-channel-details), the `basicDetails` fields — `dailyBudget`, `budgetRemaining`, and `amountSpent` — are point-in-time settings read from the ad platform. They have no date to attach a historical rate to, so they stay in the ad account's own currency. Each row reports that currency in its own `currency` field. The time-series metrics in `results[].measures` **are** converted.

**Product and operating costs at entry.** Costs you enter in settings — COGS, handling fees, shipping, gateway fees, fixed costs — are recorded in the currency you pay them in, and the settings screens label them that way. They're converted into your reporting currency when they appear in reports, not when you type them in.

**Ratios and counts.** Percentages, session counts, and order counts have no currency. Ratios built from money (ROAS, MER, CPA, CPM) are computed from converted values, so they're independent of which reporting currency you pick.

## See also

* [`upstack query`](/cli/query) — the `--currency` flag
* [CLI config defaults](/cli/config-defaults) — set `currency` once per profile
* [Timezones](/concepts/timezones) — the companion setting that decides which calendar day a row belongs to
* [API reference](/api-reference/overview) — the `currency` request field
