/pmax-audit
Performance Max campaign audit — asset group strength, asset coverage, search themes, audience signals, brand exclusions, channel distribution
$ npx -y skills add cognyai/claude-code-marketing-skills --skill pmax-audit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/pmax-audit
Context preview
The summary Claude sees to decide when to auto-load this skill.
Performance Max campaign audit — asset group strength, asset coverage, search themes, audience signals, brand exclusions, channel distribution
SKILL.md
pmax-audit.SKILL.mdname: pmax-audit
description: Performance Max campaign audit — asset group strength, asset coverage, search themes, audience signals, brand exclusions, channel distribution
version: "1.0.0"
author: Cogny AI
requires: cogny-mcp
platforms: [google-ads]
user-invocable: true
argument-hint: "[campaign name or id]"
allowed-tools:
- mcp__cogny__google_ads__tool_list_accessible_accounts
- mcp__cogny__google_ads__tool_execute_gaql
- mcp__cogny__google_ads__tool_get_gaql_doc
- mcp__cogny__google_ads__tool_get_reporting_view_doc
- mcp__cogny__create_finding
- WebFetch
- WebSearch
Performance Max Audit
A deep audit of your Performance Max campaigns. PMax hides most of its levers — this skill pulls the ones the API still exposes (asset groups, asset coverage, search themes, audience signals, exclusions, channel mix) and flags what's leaking spend.
**Requires:** Cogny Agent subscription ($9/mo) — [Sign up](https://cogny.com/agent)
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
`/pmax-audit` — audit every Performance Max campaign in the account `/pmax-audit Holiday Retail` — audit one campaign by name or id
Why PMax needs its own audit
PMax is a black box compared to Search. There are no keywords and no per-placement bids. The few real levers — **asset group ad strength, asset coverage, search themes, audience signals, and exclusions** — are what this skill inspects, because they are the only things you can actually change.
Steps
1. Find the Performance Max campaigns
SELECT campaign.id, campaign.name, campaign.status,
campaign.bidding_strategy_type, campaign.maximize_conversion_value.target_roas,
campaign.target_cpa.target_cpa_micros, campaign_budget.amount_micros,
metrics.cost_micros, metrics.conversions, metrics.conversions_value
FROM campaign
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
2. Asset group health
SELECT asset_group.id, asset_group.name, asset_group.status,
asset_group.ad_strength, campaign.name,
metrics.cost_micros, metrics.conversions, metrics.conversions_value
FROM asset_group
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
AND segments.date DURING LAST_30_DAYS
Flag:
- Ad strength `POOR` or `AVERAGE` on any spending asset group
- Campaigns with a **single asset group** (no audience/theme segmentation)
- Asset groups with status `REMOVED`/`PAUSED` still configured but campaign starved
3. Asset coverage per group
SELECT asset_group.name, asset_group_asset.field_type,
asset_group_asset.performance_label, asset_group_asset.status,
asset.id, asset.type
FROM asset_group_asset
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
For each asset group, count assets by `field_type` and compare to Google's max slots:
| Field type | Recommended | Max | |------------|-------------|-----| | HEADLINE | 11+ | 15 | | LONG_HEADLINE | 5 | 5 | | DESCRIPTION | 5 | 5 | | MARKETING_IMAGE (1.91:1) | 4+ | 20 | | SQUARE_MARKETING_IMAGE | 4+ | 20 | | PORTRAIT_MARKETING_IMAGE | 2+ | 20 | | LOGO | 1+ | 5 | | YOUTUBE_VIDEO | 1+ | 5 |
Flag:
- Any group below the recommended count for headlines, images, or video
- **No video asset** — Google auto-generates a low-quality one if you skip it
- Assets with `performance_label = LOW` that should be replaced
- Only one image aspect ratio (limits inventory: blocks whole channels)
4. Search themes & audience signals
SELECT asset_group.name, asset_group_signal.search_theme.text,
asset_group_signal.audience.audience
FROM asset_group_signal
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
Flag:
- Asset groups with **no audience signal** — PMax starts cold, wastes budget learning
- No search themes set (up to 25 allowed — they steer the Search surface)
- Search themes that overlap your brand terms (inflates brand cannibalization)
5. Search category insight (where spend actually goes)
SELECT campaign_search_term_insight.category_label,
metrics.clicks, metrics.conversions, metrics.conversions_value
FROM campaign_search_term_insight
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.clicks DESC
LIMIT 50
Flag categories with high clicks and zero conversions — candidates for **negative keywords** (PMax negatives are set at the account level, or via support).
6. Brand exclusions & new-customer goal
SELECT campaign.name, campaign.brand_guidelines_enabled,
campaign.customer_acquisition_setting.optimization_mode
FROM campaign
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
Flag:
- No brand exclusion list — PMax happily spends on your own brand searches
- New-customer acquisition goal not configured (for accounts that want growth, not
just remarketing-flavored conversions)
- Final URL expansion ON with no URL exclusions (PMax can send traffic anywhere on
the domain)
7. Listing groups (retail PMax only)
If the campaign has a Merchant Center feed:
SELECT asset_group.name, asset_group_listing_group_filter.type,
asset_group_listing_group_filter.case_value.product_type.value
FROM asset_group_listing_group_filter
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
Flag everything dumped into one "All products" node — no way to prioritize high-margin SKUs. Recommend `/shopping-campaign-audit` for full feed analysis.
8. Score and report
Performance Max Audit — [Account Name]
PMax Score: X/100 · 30-day spend: [X] · Conv: [X] · ROAS: [X.Xx]
Per campaign / asset group:
| Campaign | Asset group | Ad strength | Signal? | Video? | Spend | ROAS |
|----------|-------------|-------------|---------|--------|-------|------|
🔴 Critical — broken signals, POOR ad strength, no brand exclusion
🟡 Important — thin assets, missing video,
Read more
name: pmax-audit description: Performance Max campaign audit — asset group strength, asset coverage, search themes, audience signals, brand exclusions, channel distribution version: "1.0.0" author: Cogny AI requires: cogny-mcp platforms: [google-ads] user-invocable: true argument-hint: "[campaign name or id]" allowed-tools: - mcp__cogny__google_ads__tool_list_accessible_accounts - mcp__cogny__google_ads__tool_execute_gaql - mcp__cogny__google_ads__tool_get_gaql_doc - mcp__cogny__google_ads__tool_get_reporting_view_doc - mcp__cogny__create_finding - WebFetch - WebSearch
Performance Max Audit
A deep audit of your Performance Max campaigns. PMax hides most of its levers — this skill pulls the ones the API still exposes (asset groups, asset coverage, search themes, audience signals, exclusions, channel mix) and flags what's leaking spend.
**Requires:** Cogny Agent subscription ($9/mo) — [Sign up](https://cogny.com/agent)
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
`/pmax-audit` — audit every Performance Max campaign in the account `/pmax-audit Holiday Retail` — audit one campaign by name or id
Why PMax needs its own audit
PMax is a black box compared to Search. There are no keywords and no per-placement bids. The few real levers — **asset group ad strength, asset coverage, search themes, audience signals, and exclusions** — are what this skill inspects, because they are the only things you can actually change.
Steps
1. Find the Performance Max campaigns
SELECT campaign.id, campaign.name, campaign.status, campaign.bidding_strategy_type, campaign.maximize_conversion_value.target_roas, campaign.target_cpa.target_cpa_micros, campaign_budget.amount_micros, metrics.cost_micros, metrics.conversions, metrics.conversions_value FROM campaign WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX' AND segments.date DURING LAST_30_DAYS ORDER BY metrics.cost_micros DESC
2. Asset group health
SELECT asset_group.id, asset_group.name, asset_group.status, asset_group.ad_strength, campaign.name, metrics.cost_micros, metrics.conversions, metrics.conversions_value FROM asset_group WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX' AND segments.date DURING LAST_30_DAYS
Flag:
- Ad strength `POOR` or `AVERAGE` on any spending asset group
- Campaigns with a **single asset group** (no audience/theme segmentation)
- Asset groups with status `REMOVED`/`PAUSED` still configured but campaign starved
3. Asset coverage per group
SELECT asset_group.name, asset_group_asset.field_type, asset_group_asset.performance_label, asset_group_asset.status, asset.id, asset.type FROM asset_group_asset WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
For each asset group, count assets by `field_type` and compare to Google's max slots:
| Field type | Recommended | Max | |------------|-------------|-----| | HEADLINE | 11+ | 15 | | LONG_HEADLINE | 5 | 5 | | DESCRIPTION | 5 | 5 | | MARKETING_IMAGE (1.91:1) | 4+ | 20 | | SQUARE_MARKETING_IMAGE | 4+ | 20 | | PORTRAIT_MARKETING_IMAGE | 2+ | 20 | | LOGO | 1+ | 5 | | YOUTUBE_VIDEO | 1+ | 5 |
Flag:
- Any group below the recommended count for headlines, images, or video
- **No video asset** — Google auto-generates a low-quality one if you skip it
- Assets with `performance_label = LOW` that should be replaced
- Only one image aspect ratio (limits inventory: blocks whole channels)
4. Search themes & audience signals
SELECT asset_group.name, asset_group_signal.search_theme.text, asset_group_signal.audience.audience FROM asset_group_signal WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
Flag:
- Asset groups with **no audience signal** — PMax starts cold, wastes budget learning
- No search themes set (up to 25 allowed — they steer the Search surface)
- Search themes that overlap your brand terms (inflates brand cannibalization)
5. Search category insight (where spend actually goes)
SELECT campaign_search_term_insight.category_label, metrics.clicks, metrics.conversions, metrics.conversions_value FROM campaign_search_term_insight WHERE segments.date DURING LAST_30_DAYS ORDER BY metrics.clicks DESC LIMIT 50
Flag categories with high clicks and zero conversions — candidates for **negative keywords** (PMax negatives are set at the account level, or via support).
6. Brand exclusions & new-customer goal
SELECT campaign.name, campaign.brand_guidelines_enabled, campaign.customer_acquisition_setting.optimization_mode FROM campaign WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
Flag:
- No brand exclusion list — PMax happily spends on your own brand searches
- New-customer acquisition goal not configured (for accounts that want growth, not
just remarketing-flavored conversions)
- Final URL expansion ON with no URL exclusions (PMax can send traffic anywhere on
the domain)
7. Listing groups (retail PMax only)
If the campaign has a Merchant Center feed:
SELECT asset_group.name, asset_group_listing_group_filter.type, asset_group_listing_group_filter.case_value.product_type.value FROM asset_group_listing_group_filter WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
Flag everything dumped into one "All products" node — no way to prioritize high-margin SKUs. Recommend `/shopping-campaign-audit` for full feed analysis.
8. Score and report
Performance Max Audit — [Account Name] PMax Score: X/100 · 30-day spend: [X] · Conv: [X] · ROAS: [X.Xx] Per campaign / asset group: | Campaign | Asset group | Ad strength | Signal? | Video? | Spend | ROAS | |----------|-------------|-------------|---------|--------|-------|------| 🔴 Critical — broken signals, POOR ad strength, no brand exclusion 🟡 Important — thin assets, missing video,
AI marketing skills for Claude Code, Cursor, Windsurf, and other AI coding tools. Audit SEO, analyze ads, research competitors, qualify leads — all from your terminal. Free skills need no account. Premium skills connect your real data for $9/mo.
Repo: cognyai/claude-code-marketing-skills
Other skills on claude-code-marketing-skills.
brand-kit
Build a portable brand-kit.json for the user's product — colors, typography, voice — that other skills (video, ad creative, landing page) can consume. Multiple…
cogny
Run Cogny marketing analysis tasks — fetch scheduled tasks, analyze ad accounts via MCP, report findings
community-pulse
Weekly read on Discord community health — joins, active channels, top contributors, themes, and unanswered questions
conversion-debug
Conversion Tracking Debugger — diagnose discrepancies across GTM, GA4, Google Ads & Meta Pixel with live API access, BigQuery validation queries, and…

