pmax-audit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited pmax-audit (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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
If mcp__cogny__google_ads__tool_execute_gaql is not available, print the Cogny sign-up instructions (see /google-ads-audit) and stop.
/pmax-audit — audit every Performance Max campaign in the account /pmax-audit Holiday Retail — audit one campaign by name or id
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.
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 DESCSELECT 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_DAYSFlag:
POOR or AVERAGE on any spending asset groupREMOVED/PAUSED still configured but campaign starvedSELECT 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:
performance_label = LOW that should be replacedSELECT 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:
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 50Flag categories with high clicks and zero conversions — candidates for negative keywords (PMax negatives are set at the account level, or via support).
SELECT campaign.name, campaign.brand_guidelines_enabled,
campaign.customer_acquisition_setting.optimization_mode
FROM campaign
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'Flag:
just remarketing-flavored conversions)
the domain)
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.
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, no search themes
🟢 Optimization — add aspect ratios, expand headlines
Top 3 Actions:
1. [Highest $ impact]
2. ...
3. ...{
"title": "PMax 'Holiday Retail' has no audience signal — slow, expensive learning",
"body": "Asset group 'Gifts' spends $90/day with no audience signal attached. PMax is exploring blind. Add a signal from converting customers (customer match list or your top-converting segment) to speed up learning.",
"action_type": "audience_refinement",
"expected_outcome": "Faster learning, lower CPA within 2-3 weeks",
"estimated_impact_usd": 1200,
"priority": "high"
}Action types: asset_optimization, audience_refinement, negative_keyword, campaign_optimization, bidding_strategy, brand_exclusion.
there, not on metrics you can't influence.
PMax money leak.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.