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:
- Shopify install (automatic). When a merchant connects their Shopify store, we read the store’s currency from the Shopify Admin API and save it. A USD-billing store lands as USD; a CAD-billing store lands as CAD. No manual selection required.
- Manual (everyone else). Pixel-only or non-Shopify workspaces start in USD by default and the owner can change it any time via the dashboard header selector. The change propagates to every member on next load.
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:
- Shopify store emits revenue in the store’s currency (e.g. CAD for a Canadian store).
- Meta ad accounts may report spend in USD even when the store is CAD — the ad account currency is set when the account was created and is independent of the merchant’s local currency.
- Klaviyo, GA4, Stripe each carry their own currency on every revenue row.
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:
- Auto-fetch (default). Once a day, Admaxxer reads the latest rates from
open.er-api.com/v6/latest/USDand 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. - 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
- 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.
- Click the currency selector. A dropdown opens with the most common currencies (USD, EUR, GBP, CAD, AUD) plus a search field for the rest.
- 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.
Related documentation
Settings → Exchange rates (override rates) · our analytics warehouse auth model · Bring your own Anthropic key · Analytics deep dive · Marketing Acquisition dashboard · Documentation home