Tempio

The numbers your dashboard rounds off

Tempio5 min read

Every advertising dashboard makes a series of small decisions between the data and your eyes. None of them is announced, each one is defensible on its own, and together they are the reason two people can look at the same account and reach different conclusions without either of them being careless.

A blank turned into a zero

An account with no conversions has no cost per conversion. The division has no answer, and the honest rendering of no answer is not a number.

What most systems put there is zero, usually because a column had to hold something. That single substitution is the most consequential rounding in the whole subject, because zero is not a neutral placeholder — it is a claim, and the claim is that conversions were free.

It then propagates. A zero averages into a blended figure and drags it down for no reason. It sorts to the top of a ranking by cost, where it looks like the best campaign in the account. It clears a target, because nothing is under every threshold. A single false value in a cell becomes a false conclusion two screens away, and nothing in the chain flags it.

The fix is not clever. It is refusing to write the zero, rendering the blank, and saying in the result that some ratios are undefined so that whatever reads it — a person or an agent — is told the same thing.

Reach added up

Reach is reported de-duplicated: one person who saw an ad on Monday and again on Tuesday is one person across the week and two daily rows.

So a fortnight of daily reach summed is the sum of daily reach. That is a real quantity, it is roughly frequency-weighted exposure, and it is not the reach of the fortnight — it is larger, often much larger, and it grows with how often you served the same people.

A dashboard that sums it without saying so has produced a number that answers a question nobody asked, labelled with the name of the question they did ask. And the error runs the wrong way for comfort: a saturating campaign, which is serving the same audience repeatedly, is exactly the case where the sum diverges most from the truth.

There is a second rounding hiding beside it. Where a platform does not report reach at all, the column is empty rather than zero, and did-not-report and reached-nobody are different facts. Flattening them into a number makes a gap in collection look like a result.

Currencies added together

Minor units are not comparable across currencies. A figure with more digits is not more money, and a sum across two currencies is not a sum.

A system has three honest options and most take a fourth. It can refuse. It can convert and say that it converted, with the date of the oldest rate involved so a stale leg cannot hide behind a fresh one. It can return the rows unsummed. What it should not do is add the integers, which produces a total whose size is determined by which currencies happen to use small units.

The subtler version is a correct conversion presented as though it were exact. An estimate compared against an exact figure is not a comparison, and a period-over-period change computed across a moving rate is measuring the rate as much as the advertising. Two windows compared against each other have to be pinned to the same currency or the comparison is partly foreign exchange wearing a marketing label.

And where a rate simply is not available, the answer is to refuse the total rather than to guess it, and to return a list that cannot be ranked comparably in its raw order with that fact attached — because a raw order across currencies is not a ranking and the top row is not the biggest spender.

Today, counted as a whole day

Today is always partly filled in. A range ending today is reporting a day that is not over.

Compare it against whole days and you have invented a decline. Put it in a weekly average and you have dragged the average down by a fraction of a day's worth. Do it every Monday morning and the report has a weekly rhythm that is an artefact of when it is read.

This one is almost entirely a presentation choice, which is what makes it so common: the data is right, the window is what lies.

A week that changed after you read it

Platforms revise the recent past. Figures for days that are already stored come back different — late conversions, corrections, de-duplication that resolves after the fact — and a system that syncs them is storing a moving target for a trailing window.

That is not a fault, and pretending the numbers are frozen would be worse. What matters is whether the system tells you it happened. A connection that had a large amount of stored history rewritten carries a mark saying so, and that mark is the difference between "last month moved" and "last month was restated" — two sentences that lead to completely different afternoons.

What honesty costs

Every fix above makes the report look worse. Blanks instead of zeros, a refused total, a note that an order is not a ranking, a mark saying a period was restated. None of it is what a dashboard designed to impress would do.

The argument for doing it anyway is that the alternative is not a better report, it is the same report with the uncertainty removed and the conclusions unchanged. The uncertainty was real. Deleting the label does not delete it; it moves it into somebody's decision, where it is invisible.

The same refusal to round runs through the writing side. A connection reads and alters nothing. A change is recorded before it is real, carrying the figure it would replace and the checks it cleared, and something has to clear it — you, or a rule you wrote. The last rounding nobody gets to make is the one about permission: no platform write reaches a customer account until that platform has granted write access, and sending a cleared change onward is in private beta.

Why ratios belong at read time is the architectural half of the first rounding, and Read a blended report honestly is how to work around all five when you are holding somebody else's report.

Read next

Questions

Put frontier AI to work on every ad account you run.

Tempio connects your ad accounts into one workspace and hands your own AI the numbers and the tools. Every change it writes is a draft until you approve it, or until a rule you wrote does.

Request early access
  • Read and draft by default. Approve is a separate permission you grant.