How to Calculate Viewability Rate

Ad Viewability Rate Calculator

Measure the percentage of your digital ads that were actually seen by users.

Total ads served that could be tracked for viewability.
Impressions meeting the minimum viewing criteria.
Your Viewability Rate is:
0%
Non-viewable Impressions: 0

What is Viewability Rate?

Viewability rate is a critical digital advertising metric that determines whether an ad impression was actually seen by a human user. Unlike traditional impressions, which only track if an ad was "served" to a browser, viewability tracks if the ad appeared on screen for a sufficient amount of time.

The Viewability Formula

Viewability Rate = (Viewable Impressions / Total Measurable Impressions) * 100

Standard Benchmarks (IAB & MRC)

According to the Interactive Advertising Bureau (IAB) and Media Rating Council (MRC) standards:

  • Display Ads: At least 50% of the ad's pixels must be in view for at least 1 continuous second.
  • Video Ads: At least 50% of the ad's pixels must be in view for at least 2 continuous seconds.
  • Large Format Ads: 30% of pixels in view for 1 second.

Practical Example

Imagine your campaign served 500,000 total impressions. However, due to technical limitations or user behavior, only 450,000 could be measured. Out of those measurable impressions, tracking tools confirmed that 225,000 met the criteria of being in view for at least 1 second. Your calculation would be:

(225,000 / 450,000) * 100 = 50% Viewability Rate.

Why Low Viewability Happens

Low viewability can be caused by several factors, including:

  • Below the Fold Placement: Ads placed at the bottom of the page that users never scroll down to see.
  • Slow Loading: The user navigates away before the ad asset fully renders.
  • Ad Blocking: Software preventing the ad from appearing.
  • Fraud: Non-human bot traffic "triggering" impressions that aren't visible.
function calculateViewability() { var total = parseFloat(document.getElementById('measurableImpressions').value); var viewable = parseFloat(document.getElementById('viewableImpressions').value); var resultArea = document.getElementById('resultArea'); var viewabilityPercent = document.getElementById('viewabilityPercent'); var viewabilityStatus = document.getElementById('viewabilityStatus'); var nonViewableCount = document.getElementById('nonViewableCount'); if (isNaN(total) || isNaN(viewable) || total total) { alert('Viewable impressions cannot exceed total measurable impressions.'); return; } var rate = (viewable / total) * 100; var nonViewable = total – viewable; viewabilityPercent.innerHTML = rate.toFixed(2) + '%'; nonViewableCount.innerHTML = nonViewable.toLocaleString(); var statusText = ""; var statusColor = ""; if (rate >= 70) { statusText = "Excellent Performance"; statusColor = "#28a745"; } else if (rate >= 50) { statusText = "Average Performance (Meets Benchmarks)"; statusColor = "#ffc107"; } else { statusText = "Poor Performance (Needs Optimization)"; statusColor = "#dc3545"; } viewabilityStatus.innerHTML = statusText; viewabilityStatus.style.color = statusColor; resultArea.style.display = 'block'; resultArea.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Comment