---
name: google-ads-impression-share
description: Finds where Google Ads campaigns lose impression share to budget versus rank, decides which campaigns deserve more budget and which need fixing first, and models the upside as a range - using live data from the Caybl.ai connector. Use for "should I increase budget", "are we budget-limited", "lost impression share", "where can we scale", or "why aren't we showing more".
license: MIT
compatibility: Requires the Caybl.ai MCP connector (https://api.caybl.ai/mcp) with Google Ads connected.
metadata:
  author: Caybl.ai
  version: "1.0"
  adapted-from: mardab96/google-ads-skills (impression-share-gap-finder-google-ads), MIT; google/skills (google-ads-api-account-diagnostics), Apache-2.0
---

# Google Ads impression share gaps

## Requires

The Caybl.ai MCP connector with Google Ads connected (https://caybl.ai/google-ads-mcp). If it isn't connected, say so - don't estimate.

## Workflow

1. `get_campaign_performance` for the last 30 days: spend, conversions, CPA/ROAS by campaign. Only campaigns at or near the target CPA/ROAS are **funding candidates**.
2. `get_impression_share` for the same window: search impression share, lost to budget, lost to rank.
3. **Budget utilisation:** `run_gaql_report` with `campaign_budget.amount_micros` and daily `metrics.cost_micros` (`segments.date` over the window) - how many days did each campaign spend its full budget?
4. **Recent changes:** `run_gaql_report` on `change_event` (last 30 days, `LIMIT 1000`) for budget, bidding or target changes mid-window.
5. Classify each campaign (rules below) and model the budget case.

## Decision rules

- **Never add "lost to budget" and "lost to rank" together** - they're different problems with different fixes.
- **Budget case:** lost-to-budget at least ~10 percentage points and larger than lost-to-rank, CPA on or under target, budget exhausted on most days, and a relevant query mix. -> candidate for more budget.
- **Rank case:** lost-to-rank dominates and the budget isn't exhausted -> fix Quality Score, ads, landing page or bids before adding money.
- **Insufficient data:** recent bidding/budget changes, fewer than ~15 conversions in the window, or a brand-new campaign.
- Values reported as "< 10%" or "> 90%" are **bounds**, not numbers. Treat them that way.
- Shared budgets: changing one changes all campaigns on it - flag it.
- Raise budgets in steps of 20% or less so Smart Bidding doesn't reset its learning.

## Modelling the upside

For budget-case campaigns, scale current CTR, conversion rate and CPA to the extra impressions and state the result as a **range** (e.g. "+8-14 conversions/month at a CPA of $70-95"), with a diminishing-returns caveat: the marginal impressions are usually worse than the average ones. Rank-case upside is directional only.

## Output

1. **Fund now** - campaigns that pass the budget case, with current vs proposed daily budget and the incremental conversion / CPA range.
2. **Fix, then fund** - rank-limited campaigns and the specific fix.
3. **Don't fund** - over-target CPA or insufficient data, and why.
4. A per-campaign table: | Campaign | IS | Lost (budget) | Lost (rank) | Days budget-capped | CPA vs target | Verdict |

Offer to change budgets with `update_campaign_budget` **using `validateOnly: true` first**, show the preview, and apply only after an explicit yes.

## Guardrails
- Never promise conversions - show ranges and assumptions.
- If the account has too little data to judge, say so rather than guessing.
