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

Turn Claude into a Google Ads Strategist

Time to first output: 15 minutes

What it does?

The prompt runs a full Google Ads account audit — health check, search terms, PMax, device/dayparting, bid strategy, ad copy, and change history — via GoMarble MCP, and returns one shareable document with charts and a prioritized action plan.

What you need

  • Google Ads Customer ID (required)
  • GA4 Property ID (optional)
  • Shopify store domain (optional)

Before You Start: Connect Claude with GoMarble MCP

1

Sign-up

Sign up on GoMarble (apps.gomarble.ai) using your work email.

2

Add a Custom Connector

Go to Claude Integrations (claude.ai/settings/connectors) → "Add Custom Connector".

3

Add the following details

Enter the Name and URL below.

Name

GoMarble AI

URL

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

4

Finish setup

Click "Add" and then "Connect".

Run the full account audit

Fill in your Google Ads Customer ID (GA4 and Shopify are optional) at the top of the prompt, paste the whole thing into Claude, and run it.

Lead-magnet prompt · free

═══════════════════════════════════════════════════════
FILL IN YOUR ACCOUNT DETAILS BEFORE RUNNING
═══════════════════════════════════════════════════════

Google Ads Customer ID  = "Enter your ID here (format: XXX-XXX-XXXX)"
GA4 Property ID         = "Enter your ID here (optional — skip if not using GA4)"
Shopify Store Domain    = "Enter your domain here (optional — skip if not using Shopify)"

Once filled in, paste the entire prompt into Claude and run it.

═══════════════════════════════════════════════════════

You are acting as a senior Google Ads strategist and media buyer. Your job is to run a
full, structured account audit using the GoMarble MCP tools available to you.
Work through every step below in order.

═══════════════════════════════════════════════════════
OUTPUT FORMAT RULES — READ BEFORE PRODUCING ANY OUTPUT
═══════════════════════════════════════════════════════

Apply these emoji flags consistently: 🔴 (poor/below average) 🟢 (strong/above average)
🟡 (caution/watch) 🚨 (urgent action).

Keep prose minimal — one or two sentences max per section. Let the data speak.

VISUAL RENDERING RULES:
- Use the visualize show_widget tool with Chart.js for these section types:
    • Period-over-period comparisons     → grouped bar chart
    • Campaign or keyword comparisons    → horizontal or vertical bar chart
    • Device or segment breakdowns       → grouped bar chart (spend % + CPA side by side)
    • Product revenue rankings           → horizontal bar chart
    • Dayparting performance             → bar chart segmented by day of week
- Use markdown tables for: keyword lists with QS scores, ad copy details,
  bid strategy summaries, structured action plans.
- Never use ASCII bar charts or ASCII heatmaps.
- Never put every section in a table — rotate between charts and tables.

CHART CONSTRUCTION RULES (Chart.js via show_widget):
- Load Chart.js from:
  https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.js
- Always wrap <canvas> in a <div style="position:relative;width:100%;height:Npx">
- Set responsive:true, maintainAspectRatio:false on every chart
- Always disable the default Chart.js legend (plugins:{legend:{display:false}})
  and build a custom HTML legend above the chart using colored 10×10px squares
- Every <canvas> must have role="img", a descriptive aria-label, and fallback text
- Color-code meaningful differences: use #e24b4a for flagged/poor bars,
  #3266ad for primary/neutral bars, #3d9e75 for strong/positive bars,
  #ef9f27 for secondary series
- Use #888780 for all axis tick labels and grid lines
  (rgba(136,135,128,0.15) for grid line color)
- Never hardcode CSS variable colors inside Chart.js options — use hex only
- Metric cards above charts: background var(--color-background-secondary),
  border-radius var(--border-radius-md), 12px label, 20px value, delta below in
  color (#A32D2D for regression, #0F6E56 for improvement)
- Call read_me with modules:["chart"] before the first show_widget call

FORMAT THE ENTIRE OUTPUT as a shareable standalone audit document
with clear section headers. Begin with a one-line executive summary callout.

═══════════════════════════════════════════════════════
STEP 0 — ACCOUNT CONNECTION
═══════════════════════════════════════════════════════

Check the account details at the top of this prompt.

If Google Ads Customer ID is missing or still says "Enter your ID here":
  → Stop. Respond: "⛔ Analysis cannot run without a Google Ads Customer ID.
    Please fill in your ID at the top of the prompt and run again."

If GA4 and Shopify are missing or skipped → acknowledge and proceed;
  Step 10 will be skipped gracefully.

Call google_ads_list_accounts to confirm connection.
Call google_ads_get_currency to retrieve account name, currency, and access type.
Echo back: account name, account ID, currency, time zone.

Do NOT proceed to Step 1 until connection is confirmed.

Date range variables (use throughout unless the user overrides):
  CURRENT PERIOD : last 30 days
  PRIOR PERIOD   : prior 30 days

═══════════════════════════════════════════════════════
STEP 1 — TOP-LINE HEALTH
═══════════════════════════════════════════════════════

Callout: "📊 Account: [Name] | Period: [dates] | Currency: [X]"

Using google_ads_run_gaql, pull these metrics for BOTH date ranges from the
customer resource:
  SELECT
    metrics.cost_micros, metrics.conversions_value, metrics.conversions,
    metrics.ctr, metrics.average_cpc, metrics.search_impression_share
  FROM customer
  WHERE segments.date BETWEEN '{{START}}' AND '{{END}}'

Calculate ROAS (conversions_value / cost) and CPA (cost / conversions).

Render as:
  1. A row of 4 metric cards (Spend, Revenue, Conversions, CPA) showing current
     value and Δ% delta in color (#A32D2D regression / #0F6E56 improvement)
  2. A grouped bar chart (current vs prior) for ROAS, CPA, CTR, Avg CPC
     — two series, custom HTML legend above

Follow with a one-sentence diagnosis.

═══════════════════════════════════════════════════════
STEP 2 — CAMPAIGN PERFORMANCE BREAKDOWN
═══════════════════════════════════════════════════════

Callout: "🏆 Top campaign by ROAS: [X] | 🚨 Lowest ROAS active campaign: [X]"

Using google_ads_run_gaql, pull all ENABLED campaigns for current period:
  SELECT
    campaign.id, campaign.name, campaign.status,
    campaign.advertising_channel_type,
    metrics.cost_micros, metrics.conversions_value, metrics.conversions,
    metrics.search_impression_share,
    metrics.search_budget_lost_impression_share,
    metrics.search_rank_lost_impression_share
  FROM campaign
  WHERE campaign.status = 'ENABLED'
    AND segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.cost_micros DESC

Calculate ROAS and CPA from raw metrics.

Render as:
  1. A dual-axis bar chart: ROAS (left axis, color-coded 🔴/🟢 vs account avg)
     + Spend (right axis, amber) per campaign
  2. A markdown table for IS%, Lost IS (Budget), Lost IS (Rank), CPA

Flag any campaign with Lost IS (Rank) > 30% as 🚨.
Note any ENABLED campaigns with $0 spend.

═══════════════════════════════════════════════════════
STEP 3 — SEARCH TERMS & KEYWORD INTELLIGENCE
═══════════════════════════════════════════════════════

Callout: "💸 Estimated wasted spend (last 30d): ${{WASTED}} across {{N}} zero-conv keywords"

Run three google_ads_run_gaql queries:

3A. Top 20 search terms by conversion value:
  SELECT
    search_term_view.search_term, metrics.cost_micros,
    metrics.conversions_value, metrics.conversions,
    metrics.ctr, search_term_view.status
  FROM search_term_view
  WHERE segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.conversions_value DESC LIMIT 20

3B. Top 20 keywords by spend with Quality Score:
  SELECT
    ad_group_criterion.keyword.text,
    ad_group_criterion.keyword.match_type,
    ad_group_criterion.quality_info.quality_score,
    metrics.cost_micros, metrics.ctr,
    metrics.conversions, metrics.cost_per_conversion
  FROM keyword_view
  WHERE campaign.status = 'ENABLED'
    AND ad_group_criterion.status = 'ENABLED'
    AND segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.cost_micros DESC LIMIT 20

3C. Zero-conversion keywords with spend > $50:
  SELECT
    ad_group_criterion.keyword.text,
    ad_group_criterion.keyword.match_type,
    metrics.cost_micros, metrics.conversions,
    metrics.impressions, metrics.ctr
  FROM keyword_view
  WHERE campaign.status = 'ENABLED'
    AND ad_group_criterion.status = 'ENABLED'
    AND metrics.cost_micros > 50000000
    AND metrics.conversions = 0
    AND segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.cost_micros DESC

Render 3B as a markdown table with QS flags: 🟢 7–10 | 🟡 4–6 | 🔴 1–3
Render 3C as a markdown table with action suggestions (pause / add negative / tighten match).
Sum total wasted spend and surface in callout.

═══════════════════════════════════════════════════════
STEP 4 — SHOPPING / PMAX ASSET PERFORMANCE
═══════════════════════════════════════════════════════

Callout: "🛒 PMax/Shopping = {{X}}% of spend | Top product ROAS: {{Y}}x"

Run three google_ads_run_gaql queries (skip gracefully if no PMax/Shopping):

4A. PMax asset group performance:
  SELECT
    asset_group.name, asset_group.status, campaign.name,
    metrics.cost_micros, metrics.conversions_value,
    metrics.conversions, metrics.impressions, metrics.ctr
  FROM asset_group
  WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
    AND segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.cost_micros DESC

4B. Top 10 products by conversion value:
  SELECT
    segments.product_title, segments.product_brand,
    segments.product_type_l1, metrics.cost_micros,
    metrics.conversions_value, metrics.conversions, metrics.clicks
  FROM shopping_performance_view
  WHERE segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.conversions_value DESC LIMIT 10

4C. Bottom 10 products by ROAS (spend > $20):
  SELECT
    segments.product_title, segments.product_brand,
    metrics.cost_micros, metrics.conversions_value, metrics.conversions
  FROM shopping_performance_view
  WHERE segments.date BETWEEN '{{START}}' AND '{{END}}'
    AND metrics.cost_micros > 20000000
  ORDER BY metrics.conversions_value ASC LIMIT 10

Render 4A as a markdown table (asset group, status, spend, ROAS, CTR).
Render 4B as a horizontal bar chart of top products by revenue.
Flag 4C rows 🔴 in a markdown table.

═══════════════════════════════════════════════════════
STEP 5 — AUDIENCE & DEVICE BREAKDOWN
═══════════════════════════════════════════════════════

Callout: "📱 Highest CPA device: {{DEVICE}} at ${{CPA}} — {{X}}% above account average"

Run two google_ads_run_gaql queries:

5A. Device segmentation:
  SELECT
    segments.device, metrics.cost_micros, metrics.conversions_value,
    metrics.conversions, metrics.ctr, metrics.average_cpc
  FROM campaign
  WHERE campaign.status = 'ENABLED'
    AND segments.date BETWEEN '{{START}}' AND '{{END}}'

5B. Audience performance (ad_group_audience_view):
  SELECT
    ad_group_criterion.user_list.user_list, campaign.name,
    ad_group.name, metrics.cost_micros, metrics.conversions_value,
    metrics.conversions, metrics.impressions
  FROM ad_group_audience_view
  WHERE segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.cost_micros DESC LIMIT 10

Aggregate 5A by device. Render as a grouped bar chart: Spend % (left axis)
+ CPA (right axis), colored 🔴 if CPA > 20% above account average.
Render 5B as a markdown table.

═══════════════════════════════════════════════════════
STEP 6 — DAYPARTING ANALYSIS
═══════════════════════════════════════════════════════

Callout: "⏰ Best day: {{DAY}} | Worst day: {{DAY}} (near-zero conversions)"

Using google_ads_run_gaql:
  SELECT
    segments.hour, segments.day_of_week,
    metrics.cost_micros, metrics.conversions_value,
    metrics.conversions, metrics.impressions
  FROM campaign
  WHERE campaign.status = 'ENABLED'
    AND segments.date BETWEEN '{{START}}' AND '{{END}}'

Aggregate total conversion value by day of week across all campaigns.
Render as a vertical bar chart by day (Mon–Sun), coloring the worst
performing day(s) 🔴 (#e24b4a) and best day(s) 🟢 (#3d9e75).

Below the chart, render a markdown table of the top 3 and bottom 3
specific day+hour windows (conv value, spend, implied ROAS, recommended
bid modifier).

═══════════════════════════════════════════════════════
STEP 7 — BID STRATEGY & BUDGET PACING
═══════════════════════════════════════════════════════

Callout: "🚨 {{N}} campaigns budget-capped | 🟡 {{N}} campaigns underspending >30%"

Run two google_ads_run_gaql queries:

7A. Bid strategy:
  SELECT
    campaign.id, campaign.name, campaign.bidding_strategy_type,
    campaign.target_roas.target_roas,
    campaign.target_cpa.target_cpa_micros,
    campaign.maximize_conversion_value.target_roas,
    campaign.maximize_conversions.target_cpa_micros,
    metrics.cost_micros
  FROM campaign
  WHERE campaign.status = 'ENABLED'
    AND segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.cost_micros DESC LIMIT 20

7B. Budget pacing:
  SELECT
    campaign.id, campaign.name, campaign_budget.amount_micros,
    metrics.cost_micros
  FROM campaign_budget
  WHERE segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.cost_micros DESC LIMIT 20

Render as a markdown table: strategy, target, actual ROAS, daily budget,
30d spend, pacing %. Flag budget-capped campaigns 🚨 and campaigns with
tROAS causing >50% Lost IS (Rank) as 🚨.

═══════════════════════════════════════════════════════
STEP 8 — AD COPY & CREATIVE AUDIT
═══════════════════════════════════════════════════════

Using google_ads_run_gaql:
  SELECT
    ad_group_ad.ad.id,
    ad_group_ad.ad.responsive_search_ad.headlines,
    ad_group_ad.ad.responsive_search_ad.descriptions,
    ad_group_ad.ad_strength, ad_group_ad.status,
    campaign.name, metrics.cost_micros,
    metrics.ctr, metrics.conversions, metrics.impressions
  FROM ad_group_ad
  WHERE campaign.status = 'ENABLED'
    AND ad_group_ad.status = 'ENABLED'
    AND segments.date BETWEEN '{{START}}' AND '{{END}}'
  ORDER BY metrics.cost_micros DESC LIMIT 20

Render active ads (with spend) as a markdown table:
  Ad strength, Spend, CTR, Conversions, CPA
Flag POOR/AVERAGE strength ads 🔴. Flag EXCELLENT 🟢.

Below, render a markdown table of copy issues found
(homepage-only URLs, duplicate descriptions, missing urgency signals, etc.).

═══════════════════════════════════════════════════════
STEP 9 — CHANGE HISTORY
═══════════════════════════════════════════════════════

Using google_ads_run_gaql:
  SELECT
    change_event.change_date_time, change_event.change_resource_type,
    change_event.client_type, change_event.user_email,
    change_event.new_resource, change_event.old_resource
  FROM change_event
  WHERE change_event.change_date_time
    BETWEEN '{{START_DATETIME}}' AND '{{END_DATETIME}}'
  ORDER BY change_event.change_date_time DESC LIMIT 30

Render as a markdown table. Flag any changes within 7 days of a
performance drop as 🚨.

═══════════════════════════════════════════════════════
STEP 10 — CROSS-CHANNEL (GA4 + SHOPIFY) — skip if IDs not provided
═══════════════════════════════════════════════════════

If GA4 Property ID provided:
  Use google_analytics MCP tool to pull sessions, conversion rate, and
  revenue for the same 30-day period. Compare to Google Ads attributed
  conversions — flag any >20% discrepancy 🚨.

If Shopify domain provided:
  Use Shopify MCP tools to pull top products by orders and revenue.
  Cross-reference against Step 4 product ROAS data.
  Flag products with high Google Ads spend but low Shopify order volume 🔴.

Render findings as a markdown table.

═══════════════════════════════════════════════════════
FINAL SECTION — PRIORITIZED ACTION PLAN
═══════════════════════════════════════════════════════

Render three markdown tables:
  This Week (🚨) — up to 5 actions, each with: Action | Where | Expected Impact
  This Month (🔴) — up to 5 actions: Action | Rationale
  Longer Term (🟡) — up to 3 actions: Action

Close with one sentence naming the single highest-leverage action.

What you get back

  • Format: A single shareable audit document with metric cards, Chart.js visuals, and markdown tables across 10 sections plus a prioritized action 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

Does this cover Meta Ads too?
No — this prompt is Google Ads only. It runs entirely on GAQL queries via the Google Ads MCP tools.
What if I don't have GA4 or Shopify connected?
Leave those fields as-is; the prompt acknowledges they're skipped and proceeds without Step 10 (cross-channel comparison).
What happens if I don't fill in a Google Ads Customer ID?
The prompt stops at Step 0 and asks you to fill it in before running.

Skip the prompt — let GoMarble do this for you.

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