mcpField
S
search-campaign-audit

search-campaign-audit

github.com/cognyaiMarketing & growth11145 installsUpdated 2w ago
Repository

About search-campaign-audit

search-campaign-audit is a read-only skill for auditing Google Ads Search campaigns through campaign and keyword data. It identifies quality-score issues, wasted search-term spend, match-type problems, gaps in negative keywords, and weak ad coverage, then records recommendations.

Key features

  1. 01Campaign and keyword review
  2. 02Quality Score diagnostics
  3. 03Match-type spend analysis
  4. 04Search-term waste detection
  5. 05Negative keyword coverage checks
  6. 06Ad and asset coverage review

Use cases

  1. 01Finding spend on terms with no conversions
  2. 02Diagnosing low Quality Scores
  3. 03Reviewing broad-match performance
  4. 04Checking ad groups for limited ad coverage

MCP support

The skill requires the Cogny Google Ads GAQL tool, identified as `mcp__cogny__google_ads__tool_execute_gaql`, to access campaign data. It is read-only and reports recommendations rather than making account changes.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/cognyai/claude-code-marketing-skills --skill search-campaign-audit

After installing, type/search-campaign-auditin Claude Code to confirm it loaded.

Details

From the project README

Search Campaign Audit

A deep audit of your Google Ads Search campaigns — the campaign type where you still control keywords, match types, and ads directly. Finds quality-score drags, wasted match-type spend, negative gaps, and weak ads.

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

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

/search-campaign-audit — audit every Search campaign in the account /search-campaign-audit Brand - Exact — audit one campaign by name or id

Benchmarks

SignalPoorOKGood
Quality Score≤45–67–10
Ad StrengthPoor / AverageGoodExcellent
Search term relevance<50% spend on intent terms50–75%>75%
Impression share lost (rank)>40%20–40%<20%

Steps

1. Find the Search campaigns
SELECT campaign.id, campaign.name, campaign.status,
  campaign.bidding_strategy_type, campaign_budget.amount_micros,
  metrics.cost_micros, metrics.conversions, metrics.conversions_value,
  metrics.search_impression_share, metrics.search_rank_lost_impression_share,
  metrics.search_budget_lost_impression_share
FROM campaign
WHERE campaign.advertising_channel_type = 'SEARCH'
  AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC

Flag campaigns losing >40% impression share to rank (quality/bids) or to budget.

2. Keyword performance & quality score
SELECT ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type,
  ad_group_criterion.quality_info.quality_score,
  ad_group_criterion.quality_info.creative_quality_score,
  ad_group_criterion.quality_info.post_click_quality_score,
  ad_group_criterion.quality_info.search_predicted_ctr,
  campaign.name, ad_group.name,
  metrics.cost_micros, metrics.conversions, metrics.clicks, metrics.impressions
FROM keyword_view
WHERE segments.date DURING LAST_30_DAYS AND metrics.cost_micros > 0
ORDER BY metrics.cost_micros DESC
LIMIT 100

Flag:

  • Quality Score ≤4 on spending keywords — and read the three components to say why (creative_quality_score = ad relevance, post_click_quality_score = landing page, search_predicted_ctr = expected CTR)
  • High-spend keywords with zero conversions
  • Duplicate keywords across ad groups (internal auction competition)
3. Match-type mix

Aggregate spend and conversions by match_type (EXACT / PHRASE / BROAD).

Flag:

  • Broad match taking a large share of spend with a worse CPA than exact/phrase — broad only works well with Smart Bidding and tight negatives
  • Accounts that are 100% exact (likely missing volume) or 100% broad (likely bleeding)
4. Search term analysis
SELECT search_term_view.search_term, search_term_view.status, campaign.name,
  ad_group.name, metrics.cost_micros, metrics.conversions, metrics.clicks
FROM search_term_view
WHERE segments.date DURING LAST_30_DAYS AND metrics.cost_micros > 0
ORDER BY metrics.cost_micros DESC
LIMIT 100

Flag:

  • Irrelevant / off-intent terms with spend — negative keyword candidates
  • Converting terms with status NONE (not yet added as keywords) — harvest them
  • The total cost of zero-conversion terms — this is the headline waste number
5. Negative keyword coverage
SELECT shared_set.name, shared_set.type, shared_set.member_count
FROM shared_set
WHERE shared_set.type = 'NEGATIVE_KEYWORDS'

Flag: no shared negative list, brand terms not negated in non-brand campaigns, and no list of perennial junk (free, jobs, diy, cheap — adjust to the business).

6. Ad strength & RSA coverage
SELECT ad_group.name, ad_group_ad.ad.id, ad_group_ad.ad.type,
  ad_group_ad.ad_strength, ad_group_ad.status, campaign.name,
  metrics.impressions, metrics.conversions
FROM ad_group_ad
WHERE campaign.advertising_channel_type = 'SEARCH'
  AND ad_group_ad.status = 'ENABLED'
  AND segments.date DURING LAST_30_DAYS

Flag:

  • Ad groups with only one RSA (no test running)
  • ad_group_ad.ad_strength of POOR or AVERAGE
  • Any remaining Expanded Text Ads (deprecated)
  • Ad groups with zero enabled ads
7. Asset (extension) coverage
SELECT campaign.name, campaign_asset.field_type, campaign_asset.status
FROM campaign_asset
WHERE campaign.advertising_channel_type = 'SEARCH'

Flag campaigns missing sitelinks, callouts, or structured snippets — free real estate and CTR that most accounts leave on the table.

8. Score and report
Search Campaign Audit — [Account Name]
Search Score: X/100  ·  30-day spend: [X]  ·  Conv: [X]  ·  CPA: [X]

| Campaign | Spend | Conv | CPA | Avg QS | IS lost (rank) |
|----------|-------|------|-----|--------|----------------|

🔴 Critical   — QS ≤4 on top spenders, zero-conversion keyword spend
🟡 Important  — broad-match bleed, single-RSA ad groups, missing negatives
🟢 Optimization — extensions, search-term harvesting

Top 3 Actions:
1. [Highest $ impact]
2. ...
3. ...
9. Record findings
{
  "title": "Quality Score 3 on 'crm software' — $620/mo at a 2.4x CPA penalty",
  "body": "'crm software' (phrase) has QS 3: ad relevance below average, landing page below average. It spent $620 last month at $94 CPA vs $39 account average. Tighten the ad group to one theme, mirror the keyword in RSA headlines, and point it at a dedicated landing page.",
  "action_type": "keyword_optimization",
  "expected_outcome": "QS to 6+, CPC down 20-35%, CPA toward account average",
  "estimated_impact_usd": 380,
  "priority": "high"
}

Action types: keyword_optimization, negative_keyword, match_type, creative_refresh, campaign_optimization, bidding_strategy.

Critical rules

  1. Read the QS components, don't just report the number. The fix differs for ad relevance vs landing page vs CTR.
  2. Zero-conversion search-term spend is the headline waste figure — total it.
  3. Quote real numbers: QS values, match-type splits, term costs.
  4. Read-only. Never add negatives or pause keywords — recommend, don't act.

Comments

Markdown supported