Documentation

Connect your marketing data to Claude, ChatGPT and other LLMs.

Performance Max — deep dive

PMax is Google's most opaque campaign type. No keyword targeting, no ad groups in the traditional sense, ML decides everything. gadspilot is the only MCP that exposes read AND write on the full PMax surface — 16 dedicated tools, 3 dedicated insights tabs, custom AI rules.

How PMax actually works

One PMax campaign diffuses on 7 Google surfaces automatically :

  • Search (results + partners)
  • Display Network (third-party sites)
  • YouTube (in-stream + in-feed + Shorts)
  • Discover feed (mobile)
  • Gmail (promotions tab)
  • Maps (local results)
  • Shopping (if product feed)

The Google ML allocates budget in real-time across these 7 based on predicted conversion probability. You don't choose where. Your only control is via 4 indirect signals :

  1. Search themes — keyword-like hints (you suggest "VPS hosting")
  2. Audience signals — "here are my best customers" (customer match, similar audiences, custom segments)
  3. Asset groups — creative bundles (headlines, descriptions, images, videos, logos)
  4. Listing groups — for Shopping only

The algo IGNORES or FOLLOWS these signals based on its predictions. That's why analyzing a PMax without seeing these 3 layers = analyzing blind.

3 dedicated tabs on /accounts/{id}/insights

When the selected campaign is PMax (or all campaigns view with a PMax in the account), 3 extra tabs appear at the bottom :

🎯 PMax signals

Lists all search themes + audience signals attached to each asset group. If the count is 0, the AI flags this as a major underperformance cause (the algo runs blind during learning phase). 2-column layout side-by-side.

🔍 PMax search terms

Google doesn't reveal individual queries on PMax (unlike Search) but groups them in CATEGORIES via campaign_search_term_insight. Covers ~20-40% of impressions. Useful for discovering misaligned themes to exclude via shared lists.

⭐ PMax asset perf

Google rates each asset (BEST / GOOD / LOW / PENDING / LEARNING). The table shows asset type + content + asset group + performance label color-coded. Replace LOW assets in priority, monitor PENDING for 7-14 days.

16 PMax-specific MCP tools

Read

ToolPurpose
get_pmax_performanceHeadline KPIs of PMax campaigns
list_shared_setsFind existing negative / brand lists
list_shared_set_criteriaInspect what's inside a shared list
list_audiences + get_audienceDiscover audiences before attaching as signals

Write — targeting

ToolPurpose
asset_group_signal_addAdd search theme OR audience signal to an asset group
asset_group_signal_removeRemove a signal by resource_name
audience_create_custom_segmentBuild "Concurrents X" from competitor URLs + keywords

Write — negatives (the only mechanism for PMax)

ToolPurpose
shared_set_createCreate NEGATIVE_KEYWORDS / BRANDS / NEGATIVE_PLACEMENTS list
campaign_shared_set_linkAttach to a PMax campaign
campaign_shared_set_unlinkDetach (preserves the list, useful for A/B test)
shared_set_criterion_addAdd keywords (with match_type) to a list
shared_set_criterion_removeRemove by criterion_ids
add_negative_placementsBlock sites + apps + YouTube videos/channels

Write — assets & creas

ToolPurpose
asset_createCreate text / image (URL fetch) / YouTube video asset
asset_group_asset_addLink asset to group with field_type (HEADLINE, MARKETING_IMAGE, etc.)
asset_group_asset_removeUnlink (preserves the asset)

AI rule 5ter — what the AI knows about PMax

When the in-app chat detects a PMax scope, the system prompt enforces a 3-axis analysis :

💡
  1. Search themes : if NONE, this is a major underperformance cause — the algo has zero keyword-hint. AI must recommend 5-10 themes aligned with the product.
  2. Audience signals : if NONE, typical 30% loss of targeting precision. AI recommends customer match list / similar / custom segments based on the product.
  3. Asset perf labels : count the LOW assets and propose to replace them (citing the provided examples). Monitor PENDING (need 7-14 more days of data).
PMax has no strict targeting — these 3 levers are the only ones the user controls. The AI cannot recommend anything else.

Setting target CPA / ROAS on PMax (the gotcha)

Performance Max does NOT accept TARGET_CPA or TARGET_ROAS as direct bidding strategies — the API rejects with an error. The correct way is to use MAXIMIZE_CONVERSIONS (or MAXIMIZE_CONVERSION_VALUE) with a target_cpa_micros / target_roas sub-field :

ask Claude
# WRONG : will be rejected by Google Ads API
update_bidding_strategy(
  campaign_id="...",
  bidding_strategy="TARGET_CPA",        # ❌ not allowed on PMax
  target_cpa_micros=25000000
)

# RIGHT : "Maximize conversions with target CPA" pattern
update_bidding_strategy(
  campaign_id="...",
  bidding_strategy="MAXIMIZE_CONVERSIONS",  # ✓ PMax accepts this
  target_cpa_micros=25000000                # = €25 target CPA
)

# Same logic for value-based bidding :
update_bidding_strategy(
  campaign_id="...",
  bidding_strategy="MAXIMIZE_CONVERSION_VALUE",
  target_roas=2.5                           # = 250% target ROAS
)
Search and Display campaigns DO accept TARGET_CPA and TARGET_ROAS directly — this PMax restriction is specific to the algo's hybrid bidding model. The MCP tool description spells out both cases so Claude picks the right one automatically.

End-to-end PMax audit workflow (via Claude)

ask Claude
Audit my PMax campaign 23639991014 :

1. Pull last 30d performance via get_pmax_performance and channel breakdown
2. Check the 3 PMax axes :
   - asset_group_signal_add reveals : how many themes? how many audience signals?
   - asset performance ratings : how many LOW assets per group?
   - search term categories : what's the top-spend category? does it match product intent?
3. Find candidates to add as negatives :
   - get_search_terms (limited but useful)
   - cross-reference with list_shared_set_criteria for the linked NEGATIVE_KEYWORDS list
4. Propose action plan :
   - For LOW assets : suggest specific replacements
   - For missing signals : suggest 5 themes + 1 audience type
   - For wasted spend categories : list new negatives to add
5. Once approved, execute writes (dry_run=true first, then false) :
   - shared_set_criterion_add for negatives
   - asset_group_signal_add for missing signals
   - asset_create + asset_group_asset_add for new creas

FAQ

Can I add normal keyword negatives to a PMax campaign?

No. PMax doesn't support direct campaign-level or ad-group-level negatives. Only shared lists work. If Claude tries add_negative_keywords on a PMax campaign, the API rejects with a clear error. Use the shared set workflow instead.

How do I reset a PMax that's gone off-track?

Don't pause + recreate (loses learning). Instead : (1) Add aggressive negatives via shared lists, (2) Strengthen search themes (5-10 product-specific), (3) Add audience signals, (4) Replace LOW-rated assets. Give it 7-14 days. If still bad, lower budget by 30% (not pause) so the algo cleans up its own data without losing the campaign.

What if I don't have customer match data for audience signals?

Use audience_create_custom_segment to build one from competitor URLs (heroku.com, vercel.com for SaaS) + keyword intentions ("alternative to X", "vs Y"). Google validates in ~24h, then attach via asset_group_signal_add(type=AUDIENCE).

Can I see exactly which placement (site / app / YouTube channel) my PMax ads run on?

Partially. The "Diffusion" tab shows placements with impression counts (PMax limits the data — no spend, no clicks per placement). To exclude bad ones : add_negative_placements(youtube_channel_ids=[...], urls=[...], app_ids=[...]).

Need help? Ask Léa 💬
gadspilot assistant
Léa
AI assistant · gadspilot
Need a human? Contact support