About counting discrepancies
Counting discrepancies can occur whenever two or more parties are involved in the process. A common case is when a publisher integrates a third party script (agency script) in an insertion.
Discrepancies can occur with any metric used in online advertising: impressions, clicks, conversions etc. This article focuses on the investigation of impression counting discrepancies.
As a general rule, counting discrepancies of 10% or less are considered acceptable in the industry.
Here are some common causes of counting discprepancies:
- the involved systems count at different points (different methodologies): e. g. one system counts an impression when the ad is requested, while the other system counts when the ad is delivered (client side impression)
- short system outages leading to impressions not being logged
- creatives are too heavy
- page drop-offs: users leave the page before the creative was served (and counted) by the third party system
- ad blocking software
Compare granular reports
As a first step in the investigation of counting discrepancies, you should generate granular reports in both systems. This allows you to identify many sources of error.
Proceed as follows:
- in Smart AdServer, generate a report for the involved insertion(s); the report should be "by hour"; alternatively, "buy day" in case "by hour" is not available (more details on how to generate a report here).
- request the same report (equivalent) from the third party
- copy the data into an Excel sheet and compare the numbers
- optionally, create an Excel diagram to better spot issues
Analyse live delivery
If the campaign/insertion in question is still active, go to the website where it is delivered. Analyse it using a web debugging tool such as Chrome DevTools.
Check if both systems implemented the cache busting macro. This macro is replaced by a random number upon each ad call. This changing random number makes each ad call unique, so that browsers will retrieve the ad from the ad server, rather than from its cache.
In Smart AdServer, the macro is:
For more about cache busting, read here.
Check if the third party scripts have been integrated in the correct insertion (e. g. you may have used the same third party script in two insertions)
Make sure the data you are comparing have the same level of granularity. For instance, the third party report may be for creatives, while the Smart AdServer report is for insertions.
Make sure the reports from both systems cover the same date range.
The counting discrepencies may be related to the platform (desktop, mobile, in-app). For instance, discrepancies may only appear in in-app insertions (iOS/Android SDK) while mobile web insertions show no discrepancies.
Check if both systems use the same timezone. Different timezones lead to different start and end date/time of the insertions (line items).
Check if the third party system is pausing delivery during certain time slots (e. g. 2 pm till 4 pm). During such slots, the third party does not deliver nor count impressions.
If the third party has specified a frequency capping, users who have reached the frequency cap will end up in empty delivery: Smart AdServer will count an impression, but the third party does not return a response (thus, no impression is counted).
Check if the third party has used targeting. Verify if these match with the targeting criteria you specified in your insertion(s).
A special case is when the same geo-targeting criteria have been used in both systems: the systems involved may use different geo-targeting technologies (vendors). These vendors may assign a user's IP adress to different geo-locations (geo-targeting is based on IP addresses).
Check with the third party if the script you received has been implemented in other publishers' systems. This would explain higher numbers on the third party side.
Check the weight of the creatives (kilobytes, megabytes). This may lead to latencies and less impressions counted on the third party side.
If the checks listed above cannot explain the discrepancy, you may contact Smart AdServer's support team.
For a speedy processing, please provide the following information:
- the granular reports from both systems (see "Comparing granular reports" above); make sure the data of both systems are in the correct row in order to compare them easily; highlight the rows where you see discrepancies
- the insertion ID(s)
- the URL of the web page, test page, and/or preview page the insertion(s) is/are being delivered to
- the original ad tags (as provided by the third party)
- If a Smart AdServer ad tag is being placed into another ad server, a screenshot of the edited ad tag in the new Ad Server
- in case of RTB+, the delivery rules and deals which may be affecting/targeting the insertions
- in case of RTB+, reports from both systems with aggregation "by insertion" and the following metrics: Auctions, Bids, RTB+ impressions and their equivalents in the third party system