/blog
Ads

Four tracking mistakes that flatter your ad spend

Before you cut a campaign or double its budget, check the number is real. Four setup errors that inflate measured performance without announcing it.

Soccotra

Return on ad spend (ROAS) decides which campaigns live and which get cut. Spend went in, revenue came out, divide one by the other. Most budget decisions in an ad account come down to that one number.

It is also easy to get wrong, and wrong in one direction. Tracking errors almost always inflate measured performance rather than deflate it, because the common failure modes duplicate conversions or credit them to the wrong source. The result is a campaign that looks profitable while the bank account disagrees.

Here are four that are easy to introduce and easy to miss.

1. The purchase event fires twice

This one usually happens by accident. A purchase event is installed through a tag manager, and then again through the platform's native integration or a plugin. Both fire on the order confirmation page. Every sale is counted twice.

Measured ROAS doubles. Nothing about the business changes.

How to check: open your browser's developer tools on a real confirmation page and watch the network tab for outbound calls to the ad platform. One order should produce exactly one purchase event.

The network tab alone is not sufficient, though. If you also send conversions server-side (Meta's Conversions API, Google's enhanced conversions), that event travels backend to backend and never appears in the browser at all. A browser pixel and a server event only collapse into one conversion if they share a matching event name and event_id. Without that key they are two conversions, and the client-side check passes while the account double-counts. The authoritative answer is the platform's own deduplication view, not the network tab.

The second-order damage is worse than the reporting error: the platform's optimisation algorithm is learning from doubled signal, so it also bids as if each click were twice as valuable.

2. Conversions counted on views, not clicks

Most ad platforms will, by default, credit a conversion to an ad that was merely seen, no click required, inside a lookback window that can stretch to a day or more.

For a brand with meaningful organic demand, this quietly annexes sales that would have happened anyway. The campaign is not creating those customers; it is standing next to them at the moment of purchase and taking the photograph.

How to check: compare click-attributed and view-attributed conversions side by side. If a large share of your reported performance is view-through, run a geo holdout or a scheduled pause and watch what total revenue actually does. Incrementality is the only honest answer here.

3. UTM parameters that disagree with the platform

Ad platform reports and analytics reports rarely match exactly, and some divergence is expected, because the two systems use different attribution windows and different identity signals. A gap of three times is not divergence. It is a broken taxonomy: inconsistent utm_source casing, missing parameters on some creative variants, or a redirect that strips the query string.

Once the tags disagree, teams start choosing whichever report supports the decision they wanted to make. That is not measurement. It is confirmation.

How to check: pull every distinct source/medium pair from the last thirty days. If Facebook, facebook, and fb all appear, you have three sources that are actually one.

4. Refunds and cancellations never make it back

The purchase event fires at checkout. The refund, three weeks later, is a row in a database that no pixel ever hears about.

For categories with high return rates, apparel above all, this can be the difference between a campaign that clears its margin and one that does not. The gap widens over time, so the longer the account runs unexamined, the more confident and more wrong the reporting becomes.

How to check: reconcile platform-reported revenue against your accounting system for one closed month. Not analytics. Accounting. The number that matters is the one that survived the return window.

The pattern underneath

Each of these makes a campaign look better than it is, which means the correction is always unpleasant: a channel you believed in gets smaller. That is exactly why they survive so long. Nobody is motivated to audit a number that is currently good news.

It is worth doing anyway. A campaign that genuinely works at a 2× return is a better asset than one that appears to work at 4× and does not, because you can scale the first one and you cannot scale a measurement error.


This is the first thing we check in a free audit. We look at tracking before creative, targeting, or budget, because everything downstream is a decision made on those numbers.