Skip to content
Run this on autopilot — free
Workflow · Dashboards

Google Ads Wasted Spend Dashboard

Time to first output: 5-10 minutes to run once GoMarble MCP is connected

What it does?

The prompt classifies every Google Ads search term into 5 tiers (Profitable to Invalid) via GoMarble MCP, quantifies the exact wasted-spend dollar amount and percentage, and outputs a tiered Fix Today / This Week / This Month recovery plan as an HTML dashboard.

What you need

  • Google Ads Account ID
  • Analysis period (defaults to LAST_7_DAYS)

First, connect Claude to your Google Ads account

This is a two-part setup: connect your ad accounts on GoMarble AI, then add GoMarble as an MCP connector inside claude.ai.

1

Sign up on GoMarble

Sign up on GoMarble using your work email.

2

Connect your ad accounts

Add your ad accounts and integrations at apps.gomarble.ai/settings/integrations.

3

Add a Custom Connector in Claude

Go to claude.ai/settings/connectors → "Add Custom Connector".

4

Add the connector details

Enter the Name and URL below.

Name

GoMarble AI

URL

https://apps.gomarble.ai/mcp-api/sse

5

Finish setup

Click "Add" and then "Connect".

GoMarble AI also connects Meta, Google Ads, TikTok, LinkedIn, and Klaviyo directly — so you can run cross-channel analysis and execute changes like budget or creative updates from a chat interface, not just audit.

The prompt

Paste this into claude.ai (with GoMarble MCP connected), fill in your Google Ads Account ID, and run. It walks through 9 sections and outputs a single self-contained HTML dashboard.

Lead-magnet prompt · free

Google Ads Account ID: "Enter your Google Ads Account ID here" Analysis Period: LAST_7_DAYS

RECOMMENDED RUN CADENCE:

Above $500/day account spend → run twice a week

$100–500/day → run weekly (default)

Below $100/day → run bi-weekly Run on Monday mornings. Action all Fix Today items before end of day. Search term waste compounds daily — a $5/day irrelevant term costs $35 by next week's run.

You are a senior Google Ads analyst. Your job is to run the Wasted Spend Detector on the Google Ads account provided. This is not a generic audit — it is a surgical analysis of exactly how much budget is being consumed by search terms, keywords, and campaign structures that will never convert, and how much the account could recover if fixed today.

Work through every section below sequentially. Do not skip any section. Do not estimate, assume, or fabricate any number — pull everything from live account data.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ PRE-FLIGHT — ACCOUNT CONTEXT ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Fetch the account currency — all monetary values must be reported in the account's native currency. Never assume USD.

Fetch all enabled campaigns with their campaign type (Search, Shopping, PMax, Display, Video, Demand Gen), bid strategy, and 30-day spend. Sort by spend descending.

Calculate total account spend for the last 30 days. This is the denominator for all waste % calculations.

Infer account type: if conversions_value > 0 across campaigns, treat as ecommerce and use ROAS + CPA. If conversions_value = 0, treat as lead gen and use CPA only.

Calculate the account's 30-day average CPA: total spend / total conversions. This becomes the baseline "target CPA" for all waste calculations unless the user has specified one.

State clearly at the top:

Account name, currency, total 30-day spend

Account type (ecommerce / lead gen)

Baseline CPA used for this analysis

Number of active Search campaigns (these are the primary focus)

Whether PMax campaigns are running (flag separately — search term visibility is limited)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ PRE-FLIGHT STEP 2 — DETERMINE NARRATIVE LEAD ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Before running any section, identify the single highest-impact finding for this account using the data already pulled in Pre-Flight. Use this priority order:

PMax spend above 40% of total account spend AND PMax ROAS is more than 30% below the Brand Search or top Search campaign ROAS → the primary story is PMax cannibalization / blind spot. Open the report with Section 7 (PMax Blind Spot), then run all other sections in their normal order.

Confirmed Search waste (Q4 + Q5) above 15% of total account spend → the primary story is search term waste. Open with Section 1 (Hero Metric) as normal.

Coverage Gap Score above 50% with active Q4/Q5 spend → the primary story is negative keyword gaps. Open with Section 3 (Negative Keyword Coverage), then Section 1, then the rest in order.

Default (none of the above) → open with Section 1 as normal.

State the chosen narrative lead at the top of the report in one sentence: "This report leads with [section name] because [one-line reason from data]."

The section numbers are reference labels only — they do not dictate the presentation order. The analysis content of each section is unchanged regardless of order.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 1 — THE WASTED SPEND NUMBER (HERO METRIC) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ This is the single most important number in the entire report. Everything else supports it.

Fetch all search terms from the search_term_view for the last 30 days across all ENABLED Search campaigns. Pull: search term text, impressions, clicks, cost, conversions, conversion value, campaign name, ad group name. Sort by cost descending. Limit 200.

Classify every search term into one of five tiers:

Q1 — PROFITABLE Condition: conversions ≥ 2, OR CPA ≤ account baseline CPA, OR ROAS ≥ account average ROAS These terms are working. Protect them.

Q2 — PROMISING Condition: conversions = 0 AND cost < 0.5× baseline CPA AND no Q5 signals These terms haven't converted yet but haven't had enough spend to conclude. Give them more runway.

Q3 — UNPROVEN Condition: conversions = 0 AND cost between 0.5× and 1× baseline CPA These terms are on the fence. They've had meaningful spend with nothing to show. Flag for watch.

Q4 — LOSING Condition: cost ≥ 1× baseline CPA with 0 conversions, OR CPA ≥ 1.5× baseline CPA, OR ROAS ≤ 0.7× account average ROAS These terms are provably burning money. They have had enough spend to make a verdict — and the verdict is: not converting.

Q5 — INVALID Condition: query contains any of the following signals: free, cheap, diy, how to, how do i, what is, meaning of, definition, job, jobs, salary, career, course, tutorial, pdf, download, reddit, review, reviews, vs, versus, alternative, used, second hand, repair, fix, near me (when paired with a generic non-local term) These terms are eliminated regardless of cost. A single click on "free [product]" is a wasted click. Negate immediately.

WASTED SPEND CALCULATION:

Q4 Waste = sum of all spend on Q4 terms

Q5 Waste = sum of all spend on Q5 terms

Q3 At-Risk = sum of all spend on Q3 terms (not confirmed waste, but at risk)

Total Confirmed Waste = Q4 spend + Q5 spend

Total Spend at Risk = Q3 spend

Recoverable Spend = Total Confirmed Waste (this is the hero number)

Waste % = (Total Confirmed Waste / Total Account Spend) × 100

Present the hero card: ┌─────────────────────────────────────────────┐ │ ESTIMATED TOTAL WASTE (Last 30 Days) │ │ [CURRENCY SYMBOL][confirmed + PMax est.] │ │ [X]% of your total ad budget │ │ ├── Confirmed (Search): $X — from live data │ │ └── Estimated (PMax blind spot): $X — │ │ requires UI verification │ │ Projected annual waste: [combined × 12] │ └─────────────────────────────────────────────┘

If no PMax campaigns are running, the PMax line reads: "└── PMax: $0 — no PMax running, confirmed figure is complete."

Also show:

Spend at Risk (Q3): [amount] — [%] of budget

If fixed today, recoverable monthly: [Q4+Q5 spend]

Top 5 most expensive waste terms by spend with their cost and zero conversions confirmed

Show a donut chart breaking total spend into: Profitable (Q1), Promising (Q2), Unproven (Q3), Losing (Q4), Invalid (Q5).

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 2 — MATCH TYPE BLEED ANALYSIS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Match type leakage is the #1 cause of wasted spend in Google Ads. Broad match and Phrase match expand beyond intent — and the algorithm doesn't always get it right.

Fetch keyword-level data for all active Search campaigns: keyword text, match type (BROAD, PHRASE, EXACT), impressions, clicks, cost, conversions, average CPC. Last 30 days. Sort by cost descending. Limit 200.

Calculate per match type:

Total spend

Total conversions

CPA per match type

Spend share %

CTR per match type

Then cross-reference: for each Broad or Phrase keyword that is a top spender (top 20 by waste contribution, not by total spend), look at which Q4/Q5 search terms it triggered. Map the keyword → search term bleed.

Flag:

Any Broad match keyword spending more than 10% of its campaign's budget with CPA > 2× baseline (the keyword itself is expanding too aggressively)

Any Phrase match keyword triggering Q5 terms (intent mismatch — consider Exact or add negatives)

The % of total wasted spend attributable to Broad match vs Phrase match vs Exact (Exact match should produce near-zero Q4/Q5 — if it doesn't, the keyword itself is the problem)

Any campaign where Broad match accounts for more than 60% of spend (over-reliance on algorithm)

Present a match type breakdown table:

Match Type | Spend | Spend % | Conversions | CPA | vs Baseline CPA | Waste Contribution BROAD | $X | X% | X | $X | +X% above | $X PHRASE | $X | X% | X | $X | -X% below | $X EXACT | $X | X% | X | $X | -X% below | $X

Show a bar chart: spend vs CPA by match type, with baseline CPA marked as a horizontal line.

Show the top 5 Broad/Phrase keywords with the most Q4/Q5 bleed, listing the actual bad search terms they triggered and the cost of each.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 3 — NEGATIVE KEYWORD COVERAGE AUDIT ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A wasted spend problem is always a negative keyword problem. If Q4/Q5 terms are showing up, negatives were never added or the list has gaps.

Fetch all negative keywords at campaign and ad group level for all active Search campaigns.

STEP 1 — THEMATIC CLUSTERING (run before individual term analysis) Before checking individual terms, group all Q4/Q5 terms from Section 1 into intent themes. A theme is a shared root signal that makes a group of terms irrelevant — one negative keyword at phrase or broad match level blocks all of them.

Standard themes to detect (add others if the account's industry suggests them):

INFORMATIONAL: terms containing how to, what is, why, meaning, definition, guide, tutorial, explained

JOB-SEEKING: terms containing jobs, career, salary, hiring, internship, apply, resume

FREE/CHEAP INTENT: terms containing free, cheap, diy, discount, coupon, promo code

RESEARCH/COMPARISON: terms containing review, reviews, vs, versus, alternative, best, reddit, forum

ENTERTAINMENT/MEDIA: terms containing movie, film, game, song, lyrics, trailer, watch, stream, download, pdf

COMPETITOR BRAND: terms containing a competitor's brand name (identify from query text)

WRONG GEOGRAPHY: terms containing a location this account does not serve

SECOND-HAND INTENT: terms containing used, second hand, refurbished, repair, fix

For each detected theme:

List the theme name

Count of Q4/Q5 terms that fall under it

Total spend across those terms

Recommended single negative keyword to block the entire theme (e.g., theme INFORMATIONAL → add "how to" as broad match negative)

Confirm this negative does not exist already

Output the Thematic Negative List first — this is the highest-leverage action. One negative per theme blocks N terms simultaneously.

STEP 2 — INDIVIDUAL TERM GAPS (high-spend outliers only) After themes are handled, identify Q4/Q5 terms that:

Do not belong to any detected theme (idiosyncratic waste)

Have spend above 0.5× baseline CPA (high enough spend to warrant an individual exact match negative)

Have no matching negative already in the account

For each individual gap term:

Exact term text

Spend on this term

Recommended negative: exact match, at campaign or ad group level

Reason: one line (e.g., "close variant of brand term with zero purchase intent")

Do NOT list individual exact match negatives for low-spend terms already covered by a thematic negative — this creates redundant clutter.

STEP 3 — COVERAGE SCORING Calculate:

Themes detected: X

Themes already covered by existing negatives: X

Themes with coverage gaps: X

Individual high-spend gaps: X

Coverage Gap Score = (themes with gaps + individual gaps) / (total themes + individual outliers) × 100

Above 50% = Critical Gap

25–50% = Moderate Gap

Below 25% = Adequate

Total negative keywords currently in account: X Flag if below 50: "Minimal negative coverage — high bleed risk." Flag if a campaign has zero negatives: "No negative keywords on [Campaign Name] — all match type expansion is unfiltered."

Present:

Thematic negative list (highest priority — add these first)

Individual gap list (high-spend outliers only)

Coverage Gap Score with severity rating

Visual gap meter: horizontal progress bar, red → green, account score marked

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 4 — CAMPAIGN-LEVEL WASTE BREAKDOWN ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Waste is not spread equally across campaigns. Some campaigns are structurally clean. Others are hemorrhaging budget on irrelevant queries. This section identifies which campaigns are the worst offenders.

Using the search term data already pulled, group Q4/Q5 spend by campaign.

For each campaign calculate:

Total spend (last 30 days)

Q1 spend + Q1 spend %

Q4+Q5 waste spend + waste %

Q3 at-risk spend

Net recoverable from this campaign alone

Campaign CPA vs baseline CPA

Bid strategy in use

Rank campaigns by waste amount descending. The top campaign on this list is the #1 priority fix.

Flag per campaign: 🔴 CRITICAL — Waste % above 30% of campaign spend 🟡 WARNING — Waste % between 15–30% 🟢 HEALTHY — Waste % below 15%

Also flag:

Any campaign using Broad match as its primary match type with waste % above 20% (match type is the structural root cause)

Any campaign where Q1 spend is below 40% of total campaign spend (most of the budget is going to unproven or losing terms)

Any PMax campaign — note that search term data is limited for PMax; waste in PMax is likely underreported. Flag this explicitly and recommend checking the Search Term Insights report in Google Ads UI for additional visibility.

Present in a table sorted by waste amount:

Campaign | Total Spend | Q1 Spend | Q4+Q5 Waste | Waste % | Status | Bid Strategy [Name] | $X | $X (X%) | $X (X%) | X% | 🔴 | tCPA

Show a horizontal bar chart of waste % per campaign — sorted worst to best.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 5 — THE WASTED SPEND BY AD GROUP ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Campaign-level data tells you which campaign has a problem. Ad group level tells you exactly where inside that campaign to cut.

Group Q4/Q5 search term spend by ad group (already available from search_term_view data). For the top 10 ad groups by waste spend:

Ad group name + parent campaign

Total spend

Waste spend + waste %

Top 3 wasted terms inside this ad group (with cost per term)

Number of keywords in the ad group

Primary match type used

Flag:

Ad groups where a single Q4/Q5 term accounts for more than 50% of the ad group's waste (one bad keyword is the culprit — surgical fix available)

Ad groups with more than 5 unique Q4/Q5 terms (systemic bleed — match type restructure needed, not just negatives)

Ad groups where all top spend terms are Q4/Q5 — the entire ad group may be misaligned with the campaign's intent

Present as a drilldown table under each flagged campaign from Section 4.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 6 — CPC DISPARITY ANALYSIS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Wasted spend is not just a direct cost — it creates a measurable CPC disparity between the traffic that converts and the traffic that doesn't. This section quantifies that gap using observed data only. No causal claims are made — the data shows the disparity; the media buyer draws their own conclusion.

Fetch week-over-week CPC at account level:

Average CPC for last 7 days (LAST_7_DAYS)

Average CPC for the 7 days before that

Calculate % change and flag direction only: rising / falling / stable (within ±5%)

For the top 5 Broad match keywords by waste contribution (from Section 2):

Pull impressions, clicks, CTR, average CPC, conversions

Flag any keyword where CTR is below 3% AND CPC is above account average CPC — label as "Low Relevance Signal"

Do not infer a cause — report the observation only: "[keyword] has CTR of X% (below 3% threshold) with CPC of $X (X% above account average)"

CPC DISPARITY CALCULATION:

Compute average CPC across all Q1 search terms (profitable traffic)

Compute average CPC across all Q4/Q5 search terms (wasted traffic)

Report the gap: "Q1 terms cost an average of $X/click. Q4/Q5 terms cost an average of $X/click. The account is paying [X]× more/less per click on wasted traffic than on converting traffic."

Note: if Q4/Q5 CPC is lower than Q1 CPC, state this clearly — it means wasted clicks are cheap individually but wasteful in volume. If Q4/Q5 CPC is higher, state this — the account is paying a premium for traffic that doesn't convert.

Do not characterize either direction as "CPC inflation" — present the number and let the data speak.

Flag only what the data confirms:

Keywords with CTR below 3% + CPC above account average → "Low Relevance Signal — monitor"

Account-level CPC rising week-over-week while waste spend is also rising → "CPC and waste spend both increased this week — worth investigating whether match type expansion is driving both"

Account-level CPC rising while waste spend is falling → "CPC rising despite reduced waste — cause is elsewhere, not search term quality"

Present:

WoW CPC trend: single line (up / down / stable + %)

CPC disparity table: Q1 avg CPC vs Q4/Q5 avg CPC vs account average

Low Relevance Signal keywords: name, CTR, CPC, vs account average — flagged for monitoring only

No CPC trend line chart — the data resolution (weekly, account-level) is not granular enough to annotate meaningfully

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 7 — PMAX BLIND SPOT WARNING ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Performance Max campaigns do not expose full search term data via the API. This means the waste analysis in Sections 1–6 is likely underreporting total account waste if PMax is running. This section quantifies the blind spot.

If no PMax campaigns are running: state "No PMax campaigns detected — wasted spend analysis is complete and unobstructed" and skip to Section 8.

If PMax campaigns are running:

List all PMax campaigns with their 30-day spend and conversion data

Calculate what % of total account spend goes through PMax

Pull search term categories from campaign_search_term_insight (limited data — category labels only, not individual terms). Report any category labels visible.

Flag if PMax spend accounts for more than 20% of total account spend — state: "At least [X]% of your account spend flows through PMax where individual search term visibility is blocked. Estimated additional waste could range from [waste % from Search campaigns]% to [1.5× that rate]% of PMax spend — but cannot be confirmed without the Google Ads UI Search Term Insights report."

Check for brand term leakage: fetch search_term_view for PMax and look for any brand name terms appearing. If the account's brand name is triggering inside PMax, flag immediately — this is both cannibalization and waste, depending on brand search campaign structure.

Flag whether a brand exclusion list has been applied to PMax (this requires checking campaign settings via the change log or noting absence of brand negative keyword lists on PMax campaigns)

Present PMax blind spot summary as a callout card with the estimated unverifiable waste range.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 8 — THE WASTE RECOVERY PLAN ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ This is the section media buyers screenshot and send to their clients. Every fix is specific, ordered, and actionable.

Organize fixes into three tiers:

──── FIX TODAY (0–48 hours) ──── These are surgical negatives. No restructuring needed. Add these and waste stops tomorrow.

For every thematic negative gap identified in Section 3: → "Add '[negative keyword]' as [match type] negative to [Campaign Name / Shared List]. This blocks [X] wasted terms. Estimated monthly recovery: [combined spend on those terms]."

For every individual high-spend Q4/Q5 gap term from Section 3: → "Add '[exact term]' as an exact match negative to [Campaign Name]. Estimated monthly recovery: [spend on that term]."

List maximum 15 actions total — themes first, then individual terms, sorted by spend blocked descending. Label each recovery figure clearly: CONFIRMED (from actual spend data) vs ESTIMATED (PMax or projected).

──── FIX THIS WEEK (3–7 days) ──── These require match type changes or structural adjustments.

For every Broad match keyword flagged in Section 2 with waste contribution above 20% of its campaign's waste: → "Change '[keyword]' in [Ad Group] from Broad to Phrase match. This keyword triggered [X] wasted terms last 30 days, costing [spend]."

For every ad group flagged in Section 5 with more than 5 Q4/Q5 terms: → "Ad Group '[name]' shows systemic bleed ([X] wasted terms, [spend] wasted). Review all keywords in this ad group and tighten match types across the board."

──── FIX THIS MONTH (1–4 weeks) ──── These are structural changes that require planning.

For any campaign where Q1 spend is below 40% of total: → "Campaign '[name]' is spending [X]% of its budget on non-converting terms. Consider restructuring around Exact match for top Q1 performers, with Broad match isolated in a separate test campaign at a capped budget."

For any PMax campaign flagged in Section 7: → "PMax campaign '[name]' represents [X]% of total spend with limited query visibility. Run the Search Term Insights report in the Google Ads UI weekly and add identified irrelevant categories as negative keyword lists."

IMPACT SUMMARY CARD: ┌─────────────────────────────────────────────────────────┐ │ IF ALL FIX TODAY CHANGES ARE MADE │ │ Confirmed monthly recovery: [sum of confirmed items] │ │ Estimated monthly recovery: [confirmed + PMax est.] │ │ Confirmed annual recovery: [confirmed × 12] │ │ Budget freed up per month: [amount] │ │ This can fund [X] additional days of profitable spend │ │ at your current CPA │ └─────────────────────────────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SECTION 9 — BONUS SIGNAL: SEARCH PARTNERS & DISPLAY WASTE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Most media buyers focus on search term waste. But two other leakage points are rarely audited.

If Search Partners spend = $0 and Display expansion is not enabled across all Search campaigns: state "No Search Partners or Display expansion waste detected — skip." Do not generate empty tables.

SEARCH PARTNERS: Fetch campaign-level performance segmented by ad_network_type (SEARCH vs SEARCH_PARTNERS vs CONTENT).

For Search Partners:

Spend, clicks, conversions, CPA

Compare CPA on Search Partners vs Search network

If Search Partners CPA is more than 50% above Search network CPA → flag as waste. "Search Partners is spending [X] at [CPA] vs [CPA] on the core Search network. Disabling Search Partners on campaign '[name]' could recover [estimated waste] monthly."

Note: Search Partners cannot be excluded at the keyword level — only at the campaign level via Settings.

DISPLAY EXPANSION: Check if any Search campaigns have Display Network expansion enabled.

If found, flag immediately: "Campaign '[name]' has Display Network expansion enabled. This causes Search budget to serve on the Display Network where intent is lower and CPA is typically 3–5× higher. Disable immediately via Campaign Settings."

Present only if spend or enablement is detected. Show specific campaign names and spend figures.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ FINAL REPORTING STRUCTURE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ After completing all sections, generate a self-contained, shareable HTML dashboard report with the following structure and design specifications.

EMPTY SECTION RULE — apply before building any section of the HTML: For any section where the data produces no actionable findings, do not generate tables, charts, visualizations, or visual scaffolding for that section. Output a single inline callout instead: "✓ [Section name]: No issues detected — [one line stating what was checked and found clean]." Then move on. The report length must reflect what the data contains, not the section count. Examples of empty sections: Search Partners with $0 spend, ad group breakdown with only 1 ad group, match type chart where 2 of 3 match types have zero spend. A section is empty if it contains no flags, no actionable recommendations, and no findings that change what the media buyer does next.

──── HERO SECTION ──── Full-width gradient banner (dark navy to deep blue) with:

Report title: "Google Ads Wasted Spend Detector"

Account name, currency, date range, account type — do NOT include the account ID in the output

Three hero metric cards side by side:

CONFIRMED WASTE — [amount] — [%] of budget — colored red if above 15%, amber if 5–15%, green if below 5%

SPEND AT RISK — [Q3 amount]

ANNUAL WASTE PROJECTION — [confirmed amount × 12]

Animated number counter on page load for all three cards

Note under Annual Projection: "Confirmed only — excludes PMax estimated waste"

──── SPEND QUALITY DONUT ──── Large interactive donut chart (Chart.js):

Q1 Profitable — green

Q2 Promising — blue

Q3 Unproven — amber

Q4 Losing — orange

Q5 Invalid — red

Center label showing total confirmed waste %

Hover to see spend amount and % per tier

Caption: "Where your budget actually went last 30 days"

──── MATCH TYPE BREAKDOWN ──── Grouped bar chart: Broad / Phrase / Exact

Two bars per group: Total Spend (blue) + Waste Spend (red)

Horizontal baseline line at account average CPA

Below chart: top 5 Broad/Phrase keywords by waste contribution in a card layout

Each card: keyword → worst search term it triggered → cost of that term

──── NEGATIVE KEYWORD COVERAGE ──── Two-part layout: Part 1 — Thematic Gaps (highest leverage):

Table: Theme | Terms Blocked | Combined Spend | Recommended Negative | Status (gap / covered)

Each gap theme highlighted in red; covered themes in green

Part 2 — Coverage Gap Meter:

Horizontal progress bar: red → green

Account score marked with a pin

Coverage grade: A / B / C / D

──── CPC DISPARITY CARD ──── Replace the CPC trend line chart with a simple three-column comparison card:

Q1 Traffic avg CPC | Account avg CPC | Q4/Q5 Traffic avg CPC

Color: green | grey | red (or green if Q4/Q5 CPC is lower — wasted volume, not premium)

Below: list of Low Relevance Signal keywords (CTR < 3% + CPC above average) — flagged for monitoring

Caption: "CPC comparison — observed data only. No causal inference."

──── CAMPAIGN WASTE HEATMAP ──── Horizontal bar chart sorted by waste %:

Each bar = one campaign

Bar split: green (Q1 efficient spend) + red (waste)

Color of campaign label: 🔴 Critical / 🟡 Warning / 🟢 Healthy

Clicking a campaign expands its ad group breakdown

──── PMAX BLIND SPOT CARD ──── Yellow warning card (show only if PMax is running):

PMax spend as % of account

Estimated additional unverifiable waste range

"What to do" callout with 2 action items

──── RECOVERY PLAN ──── Three columns: Fix Today / Fix This Week / Fix This Month

Each fix displayed as a card with:

Entity name (campaign / ad group / keyword)

Issue description (1 line)

Estimated monthly recovery amount (bold, green) — label CONFIRMED or ESTIMATED

Action badge: ADD NEGATIVE / CHANGE MATCH TYPE / RESTRUCTURE

Running total at bottom of "Fix Today" column separated: Confirmed Recovery | + Estimated Recovery

──── FINAL IMPACT CARD ──── Full-width dark card at bottom:

"If you fix the issues flagged today, here's what changes:"

Before: total spend | waste % | effective CPA on real traffic

After: recovered spend | waste % drops to | projected CPA improvement

Animated progress bar showing waste % shrinking from current to projected

Footnote: "Projections based on confirmed waste only. PMax estimates shown separately."

──── DESIGN SPECS ────

TYPOGRAPHY:

Font stack: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif — clean, professional, no decorative fonts

Metric values: font-weight 900, large (2em+)

Labels: uppercase, letter-spacing 1.2px, font-weight 700, font-size 0.85em

Body text: 0.95em, line-height 1.6

COLOR PALETTE (do not use blues — the primary accent is deep teal/cyan):

Page background: linear-gradient(135deg, #0a1628 0%, #0c2340 50%, #0e2d52 100%)

Header banner: linear-gradient(135deg, #0c4a6e 0%, #0891b2 50%, #06b6d4 100%)

Cards: white background, box-shadow 0 4px 20px rgba(0,0,0,0.08)

Primary accent: #0891b2 (deep cyan) — used for borders, headings, chart fills

Table headers: linear-gradient(135deg, #0a1628 0%, #0c2340 100%) with white text

Metric box left border accent: #0891b2 (default), #dc2626 (critical), #d97706 (warning), #059669 (good)

Metric box background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%) (default), #fee2e2→#fecaca (critical), #fed7aa→#fdba74 (warning), #dcfce7→#bbf7d0 (good)

Severity badges: filled solid — red #dc2626, amber #d97706, green #059669 — always white text

Footer: dark background matching page gradient, text #94a3b8

ANIMATIONS (all required — these make the dashboard feel alive):

Page load: header slides down (translateY -30px → 0, opacity 0→1, 0.8s ease-out)

Cards: fadeInUp on load (translateY 30px → 0, opacity 0→1, 0.6s ease-out)

Cards stagger: each card gets animation-delay increments of 0.1s so they cascade in

Metric boxes: shimmer effect on ::before pseudo-element (linear-gradient sweep left→right, 2s infinite)

Metric values: animated countUp on number load (JS counter from 0 to final value over 1.5s)

Table rows: fadeIn 0.5s on load; hover state — background highlight + subtle scaleX(1.01) + box-shadow

Badges/severity pills: popIn on render (scale 0.9→1, opacity 0→1, 0.4s cubic-bezier)

Recommendation cards: slideUp + hover translateX(8px) with shadow

Recovery/impact cards: hover translateY(-4px) lift with box-shadow increase

Progress bars: CSS width transition from 0% to final value, 1.5s ease-out, triggered on scroll into view

Charts: Chart.js built-in animation (default easing)

CARD STRUCTURE:

All cards: border-radius 16px, white background, box-shadow, padding 30px

Card headings: color #0891b2, border-bottom 3px solid #e0f2fe, padding-bottom 12px

Metric boxes: border-left 5px solid, border-radius 12px, shimmer overlay

Hover on cards: translateY(-4px), box-shadow increase — cubic-bezier(0.4, 0, 0.2, 1)

Flag/alert items: border-left 5px solid, border-radius 12px, radial-gradient highlight on ::before

CHARTS:

All charts use Chart.js from CDN (https://cdn.jsdelivr.net/npm/chart.js)

Chart containers: white background, border-radius 12px, box-shadow, padding 20px

LAYOUT:

Max-width 1600px, centered, padding 20px

Mobile responsive — single column on screens below 768px

Print-friendly CSS for clean PDF export

FOOTER:

"Generated by GoMarble AI · gomarble.ai · [date]"

Dark background, centered, text #94a3b8

OUTPUT: Single self-contained HTML file with all CSS and JS inline — no external dependencies except Chart.js CDN

What you get back

  • Format: A single self-contained HTML dashboard titled 'Google Ads Wasted Spend Detector', including:
    • Hero waste number
    • Donut chart
    • Match-type breakdown
    • Negative keyword coverage
    • Campaign/ad-group waste tables
    • CPC disparity card
    • PMax blind-spot card
    • A tiered Fix Today / This Week / This Month recovery plan
Upgrade

Want this automated?

Run the prompt above every Monday morning automatically. GoMarble Agents don't just deliver the report (Slack / email / in-app) — they can execute the recommended changes directly in your ad account, too. Offload the whole recurring task and stop doing it manually.

Try GoMarble Agents free →

FAQ

What counts as "wasted spend" in this report?
Search terms classified as Q4 (Losing — spend at or above baseline CPA with 0 conversions, or CPA ≥1.5x baseline, or ROAS ≤0.7x average) or Q5 (Invalid — terms matching signals like "free", "how to", "jobs", "reddit", "vs", etc.).
How often should I run this?
Based on account spend: twice a week above $500/day, weekly (default) for $100-500/day, and bi-weekly below $100/day, run on Monday mornings per the recommended cadence.
Does it cover Performance Max campaigns?
Partially — PMax search term visibility is limited via the API, so Section 7 flags PMax as a "blind spot" with an estimated (not confirmed) waste range, kept separate from the confirmed Search waste figure.
What's the single most important number in the report?
The Hero Metric in Section 1 — Total Confirmed Waste (Q4 + Q5 spend) shown as both a dollar amount and a % of total account spend.
Does it recommend removing keywords one by one?
It prioritizes thematic negative keywords first (one negative blocking a whole intent cluster like "informational" or "job-seeking" terms) before listing individual high-spend outlier terms.
What output format does it produce?
A single self-contained HTML file with inline CSS/JS, using Chart.js from CDN as the only external dependency, styled as a dark-navy/teal dashboard.
Does the account currency matter?
Yes — the prompt requires fetching the account's native currency first and never assumes USD.

Skip the prompt — let GoMarble do this for you.

Sign up, connect your ad accounts, and google ads wasted spend dashboard runs on every account, every week, automatically.