Calculate Weighted Impression Share

Calculate Weighted Impression Share | Advanced PPC Calculator :root { –primary: #004a99; –secondary: #003366; –success: #28a745; –bg-color: #f8f9fa; –text-color: #333; –border-color: #dee2e6; –white: #ffffff; –shadow: 0 4px 6px rgba(0,0,0,0.1); } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: var(–text-color); background-color: var(–bg-color); margin: 0; padding: 0; } .container { max-width: 900px; margin: 0 auto; padding: 20px; } header { text-align: center; margin-bottom: 40px; padding: 40px 0; background: linear-gradient(135deg, var(–primary), var(–secondary)); color: var(–white); border-radius: 0 0 10px 10px; box-shadow: var(–shadow); } h1 { margin: 0; font-size: 2.5rem; font-weight: 700; } h2, h3 { color: var(–primary); margin-top: 1.5em; } .subtitle { font-size: 1.1rem; opacity: 0.9; margin-top: 10px; } /* Calculator Styles */ .calculator-card { background: var(–white); border-radius: 12px; box-shadow: var(–shadow); padding: 30px; margin-bottom: 40px; border-top: 5px solid var(–primary); } .input-group { margin-bottom: 20px; background: #f1f4f8; padding: 15px; border-radius: 8px; border: 1px solid var(–border-color); } .input-group-header { font-weight: bold; color: var(–primary); margin-bottom: 10px; display: block; border-bottom: 1px solid #d1d9e6; padding-bottom: 5px; } label { display: block; margin-bottom: 5px; font-weight: 600; font-size: 0.9rem; } input[type="number"], input[type="text"], select { width: 100%; padding: 12px; border: 1px solid #ccc; border-radius: 6px; font-size: 1rem; box-sizing: border-box; /* Important for padding */ transition: border-color 0.3s; } input[type="number"]:focus, input[type="text"]:focus { border-color: var(–primary); outline: none; box-shadow: 0 0 0 3px rgba(0, 74, 153, 0.1); } .helper-text { font-size: 0.8rem; color: #666; margin-top: 4px; } .error-msg { color: #dc3545; font-size: 0.8rem; margin-top: 4px; display: none; } .button-group { display: flex; gap: 15px; margin-top: 25px; flex-direction: column; } button { padding: 15px 30px; border: none; border-radius: 6px; font-size: 1rem; font-weight: 600; cursor: pointer; transition: transform 0.1s, opacity 0.2s; width: 100%; } button:active { transform: translateY(1px); } .btn-primary { background-color: var(–primary); color: var(–white); } .btn-outline { background-color: transparent; border: 2px solid var(–primary); color: var(–primary); } .btn-reset { background-color: #6c757d; color: var(–white); } /* Results Section */ #results-section { margin-top: 30px; padding-top: 20px; border-top: 2px dashed var(–border-color); } .result-box { text-align: center; background: #e8f0fe; padding: 25px; border-radius: 10px; margin-bottom: 20px; border: 1px solid #b8cbe8; } .result-label { font-size: 1.1rem; color: var(–secondary); margin-bottom: 10px; } .result-value { font-size: 3rem; font-weight: 800; color: var(–primary); line-height: 1; } .result-sub { font-size: 0.9rem; color: #666; margin-top: 10px; } .metrics-grid { display: flex; flex-direction: column; gap: 15px; margin-bottom: 30px; } .metric-card { background: var(–white); padding: 15px; border-radius: 8px; border: 1px solid var(–border-color); text-align: center; } .metric-val { font-size: 1.5rem; font-weight: bold; color: var(–secondary); } .metric-title { font-size: 0.85rem; color: #555; text-transform: uppercase; letter-spacing: 0.5px; } /* Chart & Table */ .chart-container { margin: 30px 0; position: relative; height: 300px; width: 100%; background: #fff; border: 1px solid #eee; border-radius: 8px; padding: 10px; box-sizing: border-box; } canvas { width: 100% !important; height: 100% !important; } table { width: 100%; border-collapse: collapse; margin-top: 20px; font-size: 0.9rem; } th, td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; } th { background-color: #f1f4f8; color: var(–primary); } tr:hover { background-color: #fafafa; } /* Article Content */ .content-section { background: var(–white); padding: 40px; border-radius: 12px; box-shadow: var(–shadow); margin-bottom: 40px; } .content-section p { margin-bottom: 1.5em; } .content-section ul { padding-left: 20px; margin-bottom: 1.5em; } .content-section li { margin-bottom: 0.5em; } .faq-item { margin-bottom: 20px; border-bottom: 1px solid #eee; padding-bottom: 20px; } .faq-question { font-weight: bold; font-size: 1.1rem; color: var(–secondary); margin-bottom: 10px; display: block; } .related-links { background: #f8f9fa; padding: 20px; border-radius: 8px; border-left: 4px solid var(–success); } .related-links a { color: var(–primary); text-decoration: none; font-weight: 600; } .related-links a:hover { text-decoration: underline; } @media (min-width: 600px) { .metrics-grid { flex-direction: row; } .metric-card { flex: 1; } }

Weighted Impression Share Calculator

Accurately calculate weighted impression share across multiple campaigns

Enter the Impression Share (IS) percentage and the Eligible Impressions for each campaign or ad group below. The calculator will determine your true weighted performance.

Campaign / Segment 1
Please enter a value between 0 and 100.
Total impressions you were eligible to receive.
Campaign / Segment 2
Campaign / Segment 3
Campaign / Segment 4 (Optional)
Weighted Average Impression Share
0.00%
Based on total volume of 0 eligible impressions
0
Actual Impressions Received
0
Total Eligible Impressions
0
Missed Impressions

Performance Breakdown

Segment Share (%) Eligible Vol. Received Vol. Weight

What is Weighted Impression Share?

When managing PPC campaigns, calculating a simple average of your Impression Share metrics can lead to misleading conclusions. Weighted Impression Share is a more advanced metric that accounts for the volume of traffic (eligible impressions) each campaign contributes to the whole.

For example, if you have a small campaign with 90% impression share but low volume, and a massive campaign with 10% impression share and high volume, a simple average might suggest you are performing around 50%. However, the weighted reality is likely much lower because the bulk of the potential traffic is in the underperforming campaign.

Digital marketers, SEO strategists, and paid search managers use this calculation to report accurate account-level health and identify where the largest pockets of missed opportunity lie.

Weighted Impression Share Formula

The formula calculates the sum of impressions received across all segments divided by the sum of all eligible impressions.

Weighted IS = ∑ (IS_i × Eligible_Impressions_i) / ∑ (Eligible_Impressions_i)

Where:

  • IS_i: Impression Share percentage of an individual campaign.
  • Eligible_Impressions_i: The total number of impressions the campaign was eligible to receive. This is often calculated as (Impressions Received / Impression Share).

Variable Definitions

Variable Meaning Unit Typical Range
Impression Share Percentage of auctions won % 0% – 100%
Eligible Impressions Total market size for targeting Integer 100 – 1,000,000+
Actual Impressions Ads actually shown Integer 0 – Eligible

Practical Examples

Example 1: The "Small Winner, Big Loser" Scenario

Imagine you have a Brand Campaign and a Non-Brand Campaign.

  • Brand: 95% IS on 1,000 eligible impressions. (Received ~950)
  • Non-Brand: 20% IS on 10,000 eligible impressions. (Received ~2,000)

Simple Average: (95 + 20) / 2 = 57.5%. This looks decent.
Weighted Calculation: Total Received (2,950) / Total Eligible (11,000) = 26.8%.

The weighted calculation reveals that your true market penetration is actually quite low, highlighting a massive opportunity in the Non-Brand segment.

Example 2: Regional Performance

A national retailer analyzes performance by region:

  • East Coast: 50% IS, 50,000 Vol.
  • West Coast: 60% IS, 30,000 Vol.
  • Central: 80% IS, 10,000 Vol.

Total Eligible: 90,000.
Total Received: (25,000 + 18,000 + 8,000) = 51,000.
Weighted IS: 51,000 / 90,000 = 56.66%.

How to Use This Calculator

  1. Gather Data: Log into Google Ads or Microsoft Ads. Navigate to your campaigns view.
  2. Identify Metrics: Ensure columns for "Search Impression Share" and "Impressions" are visible. Note: You may need to calculate "Eligible Impressions" by dividing Impressions by Share if your platform doesn't show it directly.
  3. Input Data: Enter the IS% and Volume for your top campaigns into the rows above.
  4. Analyze: The calculator updates in real-time. Look at the "Missed Impressions" metric to understand the scale of lost traffic.

Key Factors That Affect Impression Share Results

Several financial and strategic levers impact your ability to capture impression share:

  • Budget Caps: The most common reason for low IS is running out of daily budget. This is "Lost IS (Budget)".
  • Bid Strategy: Low bids prevent your ad from entering auctions or ranking on the first page. This is "Lost IS (Rank)".
  • Quality Score: A low Quality Score forces you to pay more for the same position. Improving relevance improves IS without increasing costs.
  • Targeting Precision: Too broad targeting (e.g., broad match keywords) inflates the "Eligible Impressions" denominator with irrelevant traffic, artificially lowering your IS.
  • Competition Intensity: New competitors entering the auction raise the floor price for visibility.
  • Ad Schedule: If your ads only run 9-5 but users search 24/7, your eligible impressions include off-hours, lowering your overall share.

Frequently Asked Questions (FAQ)

What is a good weighted impression share?

For branded terms, aim for >90%. For non-branded or competitive terms, 60-70% is often considered excellent, while anything below 40% suggests significant room for growth or budget scaling.

Why calculate weighted impression share instead of simple average?

Simple averages treat every campaign as equal. In finance and marketing, volume matters. Weighting by volume ensures your metric reflects the actual impact on your business goals.

Does this apply to Search and Display?

Yes, though Display Impression Share is often less precise due to the vast inventory of the Display Network. It is most critical for Search campaigns.

Can I calculate this using Spend instead of Impressions?

You can, but that calculates "Click Share" or "Spend Share". Impression Share is strictly about visibility (impressions), so eligible impression volume is the mathematically correct weight.

What is "Lost IS"?

Lost IS is simply 100% minus your Impression Share. It represents the portion of the market you missed due to Budget or Rank.

How do I find "Eligible Impressions" in Google Ads?

Google doesn't provide a column for this directly. You calculate it: Impressions / (Impression Share %). If you have 1,000 imps and 50% IS, your Eligible Impressions were 2,000.

Does Absolute Top Impression Share work the same way?

Yes, you can use this calculator for "Absolute Top IS" or "Top IS" just by entering those percentages instead of standard IS.

Is 100% Impression Share always the goal?

Not necessarily. The cost to capture the final 10% of share (marginal cost) is often very high. A weighted IS of 80-90% is often the "sweet spot" for profitability.

// Global variable to store chart instance if we were using a library, // but for vanilla Canvas we manage context directly. var chartCanvas = document.getElementById('isChart'); var ctx = chartCanvas.getContext('2d'); // Initialize with default values window.onload = function() { // Set some default sensible values for demo purposes if empty if(document.getElementById('vol1').value === "") { document.getElementById('is1').value = 80; document.getElementById('vol1').value = 10000; document.getElementById('is2').value = 40; document.getElementById('vol2').value = 25000; } calculateWeightedIS(); }; function calculateWeightedIS() { var totalEligible = 0; var totalReceived = 0; var inputsValid = false; var dataPoints = []; var labels = []; // Loop through 4 potential rows for (var i = 1; i <= 4; i++) { var isInput = document.getElementById('is' + i); var volInput = document.getElementById('vol' + i); var errDiv = document.getElementById('err-is' + i); if (!isInput || !volInput) continue; var isVal = parseFloat(isInput.value); var volVal = parseFloat(volInput.value); // Reset error if(errDiv) errDiv.style.display = 'none'; // Basic Validation if (isNaN(isVal) && isNaN(volVal)) continue; // Empty row if (isVal 100) { if(errDiv) errDiv.style.display = 'block'; continue; } if (volVal 0) { weightedAvg = (totalReceived / totalEligible) * 100; } // Update DOM Results document.getElementById('final-result').innerHTML = weightedAvg.toFixed(2) + "%"; document.getElementById('total-volume-display').innerHTML = totalEligible.toLocaleString(); document.getElementById('total-received').innerHTML = Math.round(totalReceived).toLocaleString(); document.getElementById('total-potential').innerHTML = Math.round(totalEligible).toLocaleString(); document.getElementById('lost-impressions').innerHTML = Math.round(totalEligible – totalReceived).toLocaleString(); // Update Table updateTable(dataPoints, totalEligible); // Update Chart drawChart(dataPoints, weightedAvg); } function updateTable(data, totalVol) { var tbody = document.getElementById('table-body'); tbody.innerHTML = ""; // Clear existing for (var i = 0; i 0) { weight = (row.volume / totalVol) * 100; } var tr = document.createElement('tr'); tr.innerHTML = "Segment " + row.id + "" + "" + row.share.toFixed(1) + "%" + "" + row.volume.toLocaleString() + "" + "" + Math.round(row.received).toLocaleString() + "" + "" + weight.toFixed(1) + "%"; tbody.appendChild(tr); } } function drawChart(data, weightedAvg) { // Clear canvas ctx.clearRect(0, 0, chartCanvas.width, chartCanvas.height); // Handle High DPI var dpr = window.devicePixelRatio || 1; var rect = chartCanvas.getBoundingClientRect(); chartCanvas.width = rect.width * dpr; chartCanvas.height = rect.height * dpr; ctx.scale(dpr, dpr); var width = rect.width; var height = rect.height; var padding = 40; var chartWidth = width – (padding * 2); var chartHeight = height – (padding * 2); if (data.length === 0) return; // Draw Axes ctx.beginPath(); ctx.moveTo(padding, padding); ctx.lineTo(padding, height – padding); // Y axis ctx.lineTo(width – padding, height – padding); // X axis ctx.strokeStyle = '#ccc'; ctx.stroke(); // Max Y (always 100 for percentage) var maxY = 100; // Draw Bars var barWidth = (chartWidth / data.length) * 0.5; var spacing = (chartWidth / data.length); for (var i = 0; i < data.length; i++) { var item = data[i]; var barHeight = (item.share / maxY) * chartHeight; var x = padding + (i * spacing) + (spacing/2) – (barWidth/2); var y = height – padding – barHeight; // Bar Color ctx.fillStyle = '#004a99'; ctx.fillRect(x, y, barWidth, barHeight); // Label ctx.fillStyle = '#333'; ctx.font = '12px Arial'; ctx.textAlign = 'center'; ctx.fillText(item.share + "%", x + barWidth/2, y – 5); ctx.fillText("Seg " + item.id, x + barWidth/2, height – padding + 15); } // Draw Weighted Average Line var avgLineY = height – padding – ((weightedAvg / maxY) * chartHeight); ctx.beginPath(); ctx.moveTo(padding, avgLineY); ctx.lineTo(width – padding, avgLineY); ctx.strokeStyle = '#28a745'; ctx.lineWidth = 2; ctx.setLineDash([5, 5]); ctx.stroke(); ctx.setLineDash([]); // Label for Average ctx.fillStyle = '#28a745'; ctx.textAlign = 'right'; ctx.fillText("Weighted Avg: " + weightedAvg.toFixed(1) + "%", width – padding, avgLineY – 5); } function resetCalculator() { // Clear all inputs for (var i = 1; i <= 4; i++) { var isInput = document.getElementById('is' + i); var volInput = document.getElementById('vol' + i); if (isInput) isInput.value = ''; if (volInput) volInput.value = ''; var err = document.getElementById('err-is' + i); if(err) err.style.display = 'none'; } // Set defaults back for Row 1 & 2 for UX document.getElementById('is1').value = 80; document.getElementById('vol1').value = 10000; calculateWeightedIS(); } function copyResults() { var resultText = "Weighted Impression Share Calculation:\n"; resultText += "Weighted Average: " + document.getElementById('final-result').innerText + "\n"; resultText += "Total Eligible Impressions: " + document.getElementById('total-potential').innerText + "\n"; resultText += "Total Missed Impressions: " + document.getElementById('lost-impressions').innerText + "\n\n"; resultText += "Breakdown:\n"; var rows = document.getElementById('table-body').getElementsByTagName('tr'); for (var i = 0; i < rows.length; i++) { var cells = rows[i].getElementsByTagName('td'); resultText += cells[0].innerText + ": " + cells[1].innerText + " IS (" + cells[2].innerText + " Vol)\n"; } var tempInput = document.createElement("textarea"); tempInput.value = resultText; document.body.appendChild(tempInput); tempInput.select(); document.execCommand("copy"); document.body.removeChild(tempInput); // Visual feedback var btn = document.querySelector('.btn-primary'); var originalText = btn.innerText; btn.innerText = "Copied!"; btn.style.backgroundColor = "#28a745"; setTimeout(function() { btn.innerText = originalText; btn.style.backgroundColor = "#004a99"; }, 2000); }

Leave a Comment