Architecture reference · data display model · ~5 minute read

Workspace currency — set once, applies to every team member

Admaxxer’s display currency is a workspace-level setting. The owner (or an admin) sets it once; every team member sees the same currency across /dashboard, /marketing-acquisition, and /dashboard/analytics. This matches how TripleWhale and Datafast handle currency for shared accounts — your accounting team’s CAD-of-record stays CAD-of-record for everyone in the workspace. Source amounts are converted on the fly using rates that auto-fetch daily but always defer to the rate your accountant sets.

How it works

Your workspace has a single display currency that every team member shares. Two paths set it:

Owners and admins can change the workspace currency. Members see the same selector control rendered as disabled with a tooltip reading “Only owners and admins can change the workspace currency” — the discoverability stays, the mutation is gated.

Source vs display currency

Your data sources rarely all emit the same currency. A common shape:

Admaxxer renders every money tile in your workspace currency, converting from the row’s native currency on the fly. Your workspace keeps its own exchange-rate table — a per-workspace lookup from one currency to another. Two paths populate it:

  1. Auto-fetch (default). Once a day, Admaxxer reads the latest rates from open.er-api.com/v6/latest/USD and saves them as the workspace’s default rates. Free, ECB-backed, no key required, covers ~160 currencies. Re-running it only refreshes the auto-fetched rates.
  2. User-set (always wins). Your accountant can open Settings › Exchange rates and pin a fixed rate (e.g. “1 USD = 1.36 CAD for the quarter”). A rate you set yourself is never overwritten by the auto-fetch, and the dashboard always prefers your rate over the auto-fetched one.

User-set rates matter for accounting teams who need numbers that match their books. Auto-fetch keeps the dashboard live for everyone else.

Native-amount tooltip on every money tile

When a tile is showing a converted value, hovering reveals the source-of-truth context:

Native: $94,877.11 USD
Rate: 1 USD = 1.361 CAD
As of 2026-05-06

This is more than UI polish — it’s the audit trail. A finance reviewer can spot-check a tile against Meta Ads Manager, confirm the source amount matches, then verify the conversion math without leaving the dashboard. If the rate looks wrong, an owner or admin updates it under Settings › Exchange rates and watches the tile re-render. Every money value across the dashboard is rendered the same way, so the tooltip is consistent everywhere.

Multi-shop merchants in different currencies

If you operate multiple Shopify shops in different currencies (e.g. a US store and a Canadian store), each shop is its own workspace with its own currency. The workspace switcher in the sidebar jumps between them; switching does a hard reload so no stale data leaks (mirrors the same scope-reset pattern the workspace switcher already uses for cache safety). Examples:

Setup Workspace A currency Workspace B currency Result
One US store + one Canadian store USD CAD Switching reloads the dashboard. KPIs render in the active workspace’s currency.
One PKR store + one EU store PKR EUR Same — one workspace per shop, one currency per workspace.

This keeps each shop’s P&L on its own ledger’s currency, which is what merchants’ accounting teams want. We do not auto-roll up multi-shop totals into a chosen reporting currency — that’s a roll-up-views feature, not a display-currency feature.

Compared with TripleWhale and Datafast

Capability Admaxxer TripleWhale Datafast
Display currency scope Workspace-level (all team members aligned) Workspace-level Workspace-level
Auto-fetched rates Yes — daily from open.er-api.com (~160 currencies) Yes — ECB-backed Hidden from the user (no rate displayed)
Manual rate override Yes — user-set rates always win over auto-fetch Limited No
Native-amount tooltip on tiles Yes — native + rate + as-of date on hover Partial No
Source currency on every row Yes — our analytics warehouse stores native amount + native currency unchanged Yes Yes

The manual-rate override is the meaningful differentiator for accounting-led teams. If your books reconcile at “1 USD = 1.36 CAD this quarter”, that’s the rate Admaxxer uses — not whatever ECB happened to print this morning.

How to change your workspace’s display currency

  1. Open the dashboard header. Look for the currency selector in the top-right of /dashboard — it shows the current ISO-4217 code (e.g. “USD”, “CAD”) with a flag.
  2. Click the currency selector. A dropdown opens with the most common currencies (USD, EUR, GBP, CAD, AUD) plus a search field for the rest.
  3. Pick a new code and save. The change applies to the whole workspace. Every tile re-renders within a few seconds; every other team member picks up the change on their next page load.

Members (non-owner, non-admin) see the same selector but it’s disabled with a tooltip reading “Only owners and admins can change the workspace currency”. Members can still hover any money tile to see the native-amount tooltip.

API: workspace currency

The endpoints under /api/workspace are session-authed and workspace-membership verified. Both the dashboard UI and the AI agent (Maxxer) consume them.

GET /api/workspace
→
{
  "id": "ws_…",
  "name": "VITATREE CA",
  "currency": "CAD",
  "role": "owner",
  …
}

PATCH /api/workspace/currency
body: { "code": "CAD" }
→ { "ok": true, "currency": "CAD" }
gated: role === 'owner' || role === 'admin'

Member-role callers see HTTP 403. The endpoint updates the display currency for the whole workspace, and the change is reflected on the very next request so the dashboard shows the new currency immediately.

FAQ

Why do my team members see the same currency I picked?

Because workspace currency is a workspace-level setting, not a per-user preference. The reasoning: if two team members compared screens side by side, different currencies would be a bug, not a feature. Account-level settings (currency, timezone, brand color) belong to the account. Per-user preferences are reserved for things that genuinely vary by individual (theme dark/light, notification opt-ins, saved personal dashboard views).

Can I see amounts in the original source currency?

Yes. Hover any money tile on the dashboard and a tooltip shows the native amount, the applied exchange rate, and the rate’s as-of date. For finance reviewers spot-checking against Meta Ads Manager, Shopify Admin, or Stripe, this is the audit trail.

What about multi-shop merchants in different currencies?

Each shop is its own workspace with its own currency. The workspace switcher in the sidebar jumps between them, doing a hard reload so no stale data leaks. A US store stays USD; a Canadian store stays CAD; both live in the same Admaxxer account.

Where do exchange rates come from?

Default rates auto-fetch daily from open.er-api.com/v6/latest/USD — free, ECB-backed, ~160 currencies, no API key. Any rate you set yourself always wins over the auto-fetched one. Your accountant can pin a fixed quarterly rate via Settings › Exchange rates.

Do conversions affect what I’m billed for?

No. Display currency is a UI preference. Stripe still bills in the currency tied to your subscription, and our analytics warehouse still stores the source amount and source currency unchanged. Conversion happens at render time only.

Can the AI agent (Maxxer) read converted values?

The agent reads the underlying source-currency data via analytics pipelines. When it composes a response (e.g. “your Meta spend was C$129,128 last week”), it formats in your workspace currency for readability — using the same rates and the same conversion path as the dashboard.

Settings → Exchange rates (override rates) · our analytics warehouse auth model · Bring your own Anthropic key · Analytics deep dive · Marketing Acquisition dashboard · Documentation home