agentsclimarketplace

Google ads monitor

Skill cognyai/claude-code-marketing-skills/skills/google-ads-monitor

Marketing skills for Claude Code — SEO audits and implementation, ad analysis, ad optimization. Free skills need no account. $9/mo for live Search Console, Bing & LinkedIn data.

Install
npx -y skills add cognyai/claude-code-marketing-skills --skill google-ads-monitor

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

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

What its author says it does

Copied from the file, not written here

Weekly Google Ads health check — budget pacing, spend spikes, disapproved ads, conversion-tracking breaks, CPA/ROAS swings — with week-over-week deltas

SKILL.md

5.7 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it

Google Ads Monitor

A recurring weekly check that makes sure your ads are still running smoothly. It catches the things that break quietly — a disapproved ad, tracking that stopped firing, a campaign that started overspending — and reports week-over-week so you see trends, not noise.

Requires: Cogny Agent subscription ($9/mo) — Sign up

Designed to be scheduled weekly via /loop or /schedule.

Prerequisites Check

If mcp__cogny__google_ads__tool_execute_gaql is not available, print the Cogny sign-up instructions (see /google-ads-audit) and stop.

Usage

/google-ads-monitor — weekly health check of the connected account.

For a deep one-time review, run /google-ads-audit instead. This skill is the light, repeatable rhythm; the audit is the full teardown.

Steps

1. Read the prior snapshot

Call read_context_node on insights/google-ads/monitor/latest. If it exists, it holds last week's metrics — every number this week is reported as a delta against it. If it does not exist, this is the first run: report absolute numbers and note that deltas start next week.

2. Account-level performance (last 7d vs prior 7d)

SELECT metrics.cost_micros, metrics.conversions, metrics.conversions_value,
  metrics.clicks, metrics.impressions
FROM customer
WHERE segments.date DURING LAST_7_DAYS

Repeat with a BETWEEN range for the prior 7 days. Compute WoW deltas for spend, conversions, CPA, ROAS, CTR.

3. Per-campaign movement

SELECT campaign.name, campaign.status, campaign.advertising_channel_type,
  campaign_budget.amount_micros, metrics.cost_micros, metrics.conversions,
  metrics.conversions_value
FROM campaign
WHERE segments.date DURING LAST_7_DAYS AND campaign.status = 'ENABLED'
ORDER BY metrics.cost_micros DESC

🔴 Alert if any campaign:

  • Spent >40% more than the prior week
  • Dropped to zero conversions after converting the week before
  • Is capped at its daily budget every day (budget-limited)
  • Stopped delivering entirely (zero impressions, still enabled)

4. Ad disapprovals & policy issues

SELECT ad_group_ad.ad.id, ad_group_ad.policy_summary.approval_status,
  ad_group_ad.policy_summary.review_status, campaign.name, ad_group.name
FROM ad_group_ad
WHERE ad_group_ad.status = 'ENABLED'
  AND ad_group_ad.policy_summary.approval_status != 'APPROVED'

🔴 Alert on any DISAPPROVED ad. 🟡 Flag APPROVED_LIMITED (running but throttled).

5. Conversion-tracking heartbeat

SELECT conversion_action.name, conversion_action.status,
  metrics.conversions, metrics.all_conversions
FROM conversion_action
WHERE segments.date DURING LAST_7_DAYS

🔴 Alert if a primary conversion action recorded conversions last week but zero this week — tracking has almost certainly broken. This is the single most important check in the skill.

6. Budget & bidding drift

Flag campaigns whose bidding strategy changed status to LEARNING, and any campaign where the target CPA/ROAS is set but actual is >50% off target.

7. Output

Google Ads Monitor — [Account Name]
Week of [YYYY-MM-DD] – [YYYY-MM-DD]

⚠️  Needs attention this week
- [Critical/important items first, or "Nothing — account is running clean."]

Performance (7d vs prior 7d)
- Spend ........ $X,XXX  (+/-X% WoW)
- Conversions .. XXX     (+/-X% WoW)
- CPA .......... $XX     (+/-X% WoW)
- ROAS ......... X.Xx    (+/-X% WoW)

Campaign movers
| Campaign | Type | Spend (WoW) | Conv (WoW) | Note |
|----------|------|-------------|------------|------|

Disapproved / limited ads: [N]
Conversion tracking: [OK / BROKEN — details]

Recommended actions
1. ...
2. ...

8. Save this week's snapshot

Call write_context_node on insights/google-ads/monitor/latest with this week's metrics (spend, conversions, CPA, ROAS, per-campaign figures, disapproval count) so next week can compute deltas. Also write a dated copy to insights/google-ads/monitor/<YYYY-MM-DD> for history.

9. Record findings — selectively

Only file a create_finding for genuine problems (disapprovals, tracking breaks, spend spikes, budget-limited profitable campaigns) — not routine numbers. A clean week should produce zero findings.

{
  "title": "Conversion tracking stopped — 'Lead Form Submit' at 0 this week",
  "body": "'Lead Form Submit' recorded 41 conversions last week, 0 this week, while clicks held steady. The tag or GTM trigger has likely broken. Check the GA4/Ads conversion tag.",
  "action_type": "conversion_tracking",
  "expected_outcome": "Tracking restored; Smart Bidding gets accurate signal again",
  "estimated_impact_usd": 0,
  "priority": "critical"
}

Action types: conversion_tracking, budget_adjustment, campaign_optimization, policy_fix, bidding_strategy.

Critical rules

  1. Trends over snapshots. Always report WoW deltas. A single week's number is noise.
  2. Lead with what's broken. If nothing is wrong, say so in one line and keep the report short.
  3. Tracking break = critical, always. It corrupts every downstream number.
  4. Read-only. Never pause campaigns or change budgets — surface, don't act.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

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.