agentsclimarketplace

Impression share gap finder

Skill kochellenk-afk/google-ads-diagnostic-toolkit/skills/impression-share-gap-finder

10 production Claude Skills covering the full Google Ads diagnostic lifecycle: waste, spikes, Quality Score, budgets, reporting

Install
npx -y skills add kochellenk-afk/google-ads-diagnostic-toolkit --skill impression-share-gap-finder

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 19 days oldThe repository was created 19 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Identify where Google Ads campaigns are losing impression share, calculate the revenue opportunity of closing each gap, and prioritize which campaigns to fund first. Use this skill when a user wants to analyze impression share loss, asks why their ads aren't showing more, mentions IS lost to budget or rank, wants to know how much revenue they're leaving on the table, asks if they should increase budget, or uploads campaign data with impression share columns. Trigger on phrases like "impression share", "IS lost", "not showing enough", "missing impressions", "should I increase budget", "where am I losing volume", "auction insights", or any question about scaling Google Ads.

SKILL.md

7.1 KB, as published. Nobody here has run it

Impression Share Gap Finder

A skill for finding where impression share is being lost, attributing the cause (budget vs. rank), and prioritizing which gaps are worth closing.

What this skill does

Most Google Ads accounts leave 30–50% of available impressions on the table. This skill:

  1. Identifies which campaigns are losing IS to budget (you'd pay if you could)
  2. Identifies which campaigns are losing IS to rank (your ad isn't winning the auction)
  3. Estimates revenue opportunity if IS reached 90%
  4. Calculates incremental daily budget needed for budget-constrained campaigns
  5. Diagnoses rank-based losses (bid level, Quality Score, or ad relevance)
  6. Outputs a prioritized action plan distinguishing quick wins from "don't bother" campaigns

Required inputs

  1. Campaign performance data with impression share columns
  2. Time window - last 30 days default

Required columns

  • Campaign name
  • Spend, daily budget
  • Impressions, clicks, CTR
  • Conversions, CPA, conv. rate, conv. value (if tracking revenue)
  • Search impression share (IS)
  • Search IS lost to budget
  • Search IS lost to rank
  • Avg. CPC

These columns are HIDDEN by default in Google Ads exports. If they're missing, ask the user to re-export with impression share columns enabled (Columns → Modify columns → Competitive metrics → check all IS columns).

Workflow

Step 1: Validate data

Check that IS columns are present. If they're missing, stop and provide the re-export instructions:

Please re-export your campaign data with these columns enabled:

  • Search impression share
  • Search lost IS (budget)
  • Search lost IS (rank)

In Google Ads: Columns → Modify columns → Competitive metrics → enable all "Search lost IS" columns. Without these, I can't tell you where you're losing volume or why.

Step 2: Categorize each campaign

For each campaign, classify the gap type:

CategoryDefinitionAction implication
Budget-constrainedSearch IS lost to budget > 10%More budget could capture more volume
Rank-constrainedSearch IS lost to rank > 20%Bid/QS/ad issue - fix without spending more
MixedBoth > 10%Often: rank issue first, budget second
Already at scaleIS > 80%Don't bother - diminishing returns
UnderperformerHigh IS lost but high CPA / low conv. rateFix conversion before scaling

Read references/is-decision-rules.md for the full classification logic.

Step 3: Calculate revenue opportunity

For each campaign, project what 90% IS would deliver:

projected_impressions = current_impressions × (90% / current_IS%)
projected_clicks = projected_impressions × current_CTR
projected_conversions = projected_clicks × current_conv_rate
projected_revenue = projected_conversions × current_revenue_per_conv
incremental_revenue = projected_revenue - current_revenue

Important caveats to surface:

  • Conversion rate may degrade slightly at higher volume (assume 5% degradation as a conservative buffer)
  • CPC may rise if you bid up to capture rank-based loss
  • These projections are upper bounds - actual results typically capture 60–80% of projected upside

Step 4: Calculate incremental budget needed (budget-constrained campaigns)

For budget-constrained campaigns:

current_daily_spend = monthly_spend / 30
needed_daily_budget = current_daily_spend / (current_IS / (current_IS + IS_lost_to_budget))
incremental_daily_budget = needed_daily_budget - current_daily_spend

Sanity check: if incremental_daily_budget is negative or trivially small, the IS lost to budget figure is probably not actionable (e.g., the campaign was paused for part of the period).

Step 5: Diagnose rank-based losses (rank-constrained campaigns)

For each campaign with high IS lost to rank, evaluate:

  • Bid level: is current avg. CPC well below competitor benchmark? (If user has auction insights data, this is direct.)
  • Quality Score: if QS data is present, is campaign avg. QS below 6? Improvements here recover rank without raising bids.
  • Ad relevance: if specific RSA strength data is available, "Poor" or "Average" RSAs cap rank.

For each rank-constrained campaign, recommend ONE of:

  • Raise bids by X% (cheapest fix if budget allows)
  • Improve QS (longer fix, durable gain)
  • Strengthen ads (medium effort, often combines with QS work)

Step 6: The prioritized action plan

Three sections:

Quick wins - campaigns where a small budget increase captures large IS: | Campaign | Curr IS | IS lost to budget | Add $/day | Est. add'l conv. | Est. add'l revenue |

Optimization targets - campaigns where rank fixes recover IS without more spend: | Campaign | Curr IS | IS lost to rank | Recommended fix | Est. impact |

Don't bother (deprioritize) - campaigns where the gap isn't worth closing: | Campaign | Curr IS | Why skip (high CPA, low conv. rate, low absolute volume) |

End with a top-line: total incremental monthly spend needed and estimated incremental conversions/revenue.

What this skill must NOT do

  • Don't recommend scaling campaigns with CPA above the user's target. More volume at a bad CPA is worse, not better. Tell the user to fix CPA first (refer to cpa-spike-diagnosis or quality-score-analysis).
  • Don't promise the projected revenue numbers as guaranteed outcomes - they're upper-bound estimates and need 5–20% buffer for real-world degradation.
  • Don't recommend closing rank-based gaps purely by raising bids if Quality Score is low - you'll burn budget. Fix QS first.
  • Don't combine budget and rank gaps as if they're fungible. They have different fixes and different priorities.
  • Don't treat "Search lost IS" and "Display lost IS" as the same metric. Always specify which network.

Output format

Markdown only by default - this is a planning conversation, the user will share insights with their team verbally or paste the table. If they ask for a doc, use the docx skill.

Structure:

  1. Summary box: total IS lost, biggest opportunity, total incremental spend, total incremental revenue
  2. Quick wins table
  3. Optimization targets table
  4. Deprioritize table
  5. Top recommendation: the single campaign to act on this week

Reference files

  • references/is-decision-rules.md - full classification logic and thresholds
  • references/projection-math.md - formulas with worked examples and caveats

Scripts

  • scripts/is_opportunity_calc.py - computes projections and incremental budget per campaign

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.