Four networks, four definitions of “an install”
The same campaign can look profitable in one console and unprofitable in another. The difference is usually semantics, not performance.
When you compare Google, Meta, Apple and TikTok side by side, the first surprise is not the numbers — it is the words. “Conversion” means a download in one network, a first open in another, and a subscription in a third. Google reports conversions where you expect installs; Meta distinguishes installs from different kinds of in-app events; Apple counts redownloads by default.
AdBeeCore normalises this in one place: a metric registry that every adapter must satisfy.
What normalisation actually involves
- One name per concept: spend, impressions, clicks, installs, revenue, and the derived CPA/CPI/ROAS/CTR.
- Explicit mapping per network, kept next to the adapter so a new API field cannot silently change a metric.
- Currency converted at read time with the stored rate, never summed across currencies.
- Days bucketed in UTC and rendered in the user's timezone only at the UI layer.
- Missing data stays missing: no zero-fill, no interpolation, no “assume yesterday looked like today”.
Why zero-fill is a bug
A campaign that stopped spending and a campaign whose statistics failed to load look identical if you fill empty days with zeros. One is a business signal; the other is an incident. Keeping them distinct is the difference between an agent that reacts correctly and one that “optimises” a temporary API outage.
The same principle covers freshness: every dashboard carries the timestamp of the last successful collection, and a failed account is marked as an error instead of being quietly left behind.
A metric you cannot trace to one API call is a rumour.
Related
Put these ideas to work
Connect one ad account and switch on observe mode — the posts above describe exactly what you will see.
Start free