Google Ads impression share gap finder

A free Claude skill. Separates impression share lost to budget from lost to rank, and tells you which campaigns to fund now, fix first, or leave alone.

Needs: the Caybl.ai connector with Google Ads connected. Try: “Which campaigns should get more budget? Check impression share lost to budget vs rank.”

What you get

  • Fund now / fix then fund / don't fund lists
  • Per-campaign IS table
  • Upside as a conversion and CPA range

Install

claude.ai and Claude Desktop

  1. Download the .zip.
  2. In Claude, go to Settings, Capabilities, Skills, and upload it.
  3. Connect Caybl.ai from the connector directory if you haven’t already.

Claude Code

mkdir -p ~/.claude/skills/google-ads-impression-share && curl -fsSL https://caybl.ai/skills/google-ads-impression-share/SKILL.md -o ~/.claude/skills/google-ads-impression-share/SKILL.md
claude mcp add --transport http caybl https://api.caybl.ai/mcp

The skill

This is the full SKILL.md - the same file you download. View raw.

---
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.

Adapted from mardab96/google-ads-skills (MIT). See NOTICES.md.

More Google Ads skills

  • Google Ads wasted spend finder - Finds search terms, devices, locations and hours that cost money without paying back, ranked by estimated reducible spend.
  • Google Ads negative keyword builder - Groups bad search terms into patterns and builds a paste-ready negative list with the right match type and level - then adds it after a preview.
  • Google Ads budget pacing check - Projects month-end spend per campaign, flags over- and under-pacing, and finds the daily budget needed to hit target.

Connect your data, then run the skill

Sign in with Google, connect your accounts and add Caybl.ai to Claude. Google Analytics is free.

Get started free →