Resources
Reporting across currencies and time zones.
Both are the same failure. A number that means something different depending on where it was read, and no error either way.
- 7 minute read
- 6 sections
Part 1
Why a currency column is not a currency decision
Platforms report in the currency of the account. Run one client in two markets and you have two accounts, two currencies, and one column called spend that contains both.
Add that column up and you get a number with no unit. It is not wrong in any way a computer can detect, so nothing errors, nothing is flagged, and the figure goes into a report and then into a decision. This is the quietest data fault there is, and it arrives the day a client opens their second market.
Part 2
The four questions a conversion has to answer
Converting is easy. Converting the same way twice is the part that needs deciding, and there are four decisions rather than one.
Which rate
A daily closing rate, a monthly average, or a rate finance fixes for the year. These are not interchangeable and finance usually has an answer already. Reporting should use theirs, because the alternative is a marketing total that never reconciles with the accounts.
On which date
The date the money was spent, or the date the report is run. Only the first is stable. Converting historical spend at today's rate means last year changes every day.
Applied where
At ingest, storing the converted figure, or at read, storing the original and converting in the query. Whichever you pick, store four things: the original amount, its currency, the converted amount and the rate used.
Rounded when
Convert then sum, or sum then convert. The two give different answers, and the gap surfaces as a report that is off by a small amount nobody can account for, which costs more trust than a large error would.
Part 3
The rate that changes the past
Converting at read time with whatever rate is current today means every historical figure moves every day. Run a report for a closed month on Monday and again the following Monday and you get two totals, both produced correctly.
A client cannot be told that a finished month has a moving total, so the requirement is not accuracy but reproducibility. Store the rate that was used alongside the figure it was applied to. Then any number in any report can be rebuilt exactly, including the ones you sent last year.
Part 4
Time zones are the same problem wearing a different hat
A day is a boundary, and nothing agrees on where it sits. Each platform reports days in the timezone of the account. Your warehouse has its own. Your client's week starts on a day and in a place, and neither is necessarily yours.
The failure is identical: no error, just a Monday containing several hours of Sunday, and a week on week comparison that wobbles for a reason nobody can find. It shows up first on clients whose markets are far apart, and on any metric where somebody looks at a single day rather than a month.
The fix is the same shape too. Keep the timestamp with its zone rather than a bare date, decide one reporting timezone, convert once on the way in, and say on the report which zone the days are in.
Part 5
What to write down
Five lines per client, kept with your metric definitions rather than in somebody's head. The reporting currency. The source of the rate. The rule for which date's rate applies. The reporting timezone. Where the week starts.
Without those, two careful people produce two different reports from the same tables and both are defensible. That argument is not resolvable by looking at the data, because the disagreement is not in the data. It is in five decisions that were never recorded.
In practice
Where SightShark fits
One currency per metric is a quarter of what AI-ready means here, alongside one name, one type and one grain. The conversion is applied in the transform step, in your own warehouse, so the rule for every client is readable in your own account rather than being a setting inside somebody's reporting tool.
The original amount and its currency stay in the tables next to the converted figure. Because syncs add to the tables rather than replacing them, the rate that applied at the time is still there when somebody asks about a month that closed a year ago.
See how the platform worksQuestions
Questions people ask
How should you handle multiple currencies in client reports?
Decide four things and record them: which rate you use, which date's rate applies, whether conversion happens on the way in or at read time, and whether you convert before or after summing. Then store the original amount, its currency, the converted amount and the rate used, so any figure can be rebuilt exactly as it was sent.
Should currency conversion happen at ingest or in the report?
Either works provided the rate used is stored with the figure. What does not work is converting at read time using whatever rate is current, because every historical number then changes every day and a closed month has a different total each time the report is run. The requirement is that a number can be reproduced, not that it is the latest.
Why do two reports of the same month show different totals?
Most often currency or timezone rather than a data fault. A total that mixes two account currencies has no unit and will not be flagged as an error, and days boundaried in different time zones put several hours of activity in a different day. Both produce totals that are individually defensible, which is why the disagreement cannot be settled by looking at the data.
Also worth reading
- 5 min read
Meta's engage-through attribution, explained for client reports.
Fewer conversions in Ads Manager does not always mean fewer sales. Sometimes it means a narrower definition.
Read it - 7 min read
A UTM naming convention that holds across clients.
UTMs are the join between what a client spent and what happened. Get them wrong and no amount of tooling recovers it.
Read it - 7 min read
A GA4 and tracking audit checklist for new clients.
What to check, in the order that stops the most bad data, and how to tell whether Consent Mode is actually working.
Read it
Pricing
Priced by the clients you report on.
Starter
$499 /month
Up to 20 clients
Growth
$999 /month
Up to 50 clients
Enterprise
Custom
No cap on clients
Get started
Want this running on your own data?
Book a call with someone who can answer the technical questions.