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 :
- Search themes — keyword-like hints (you suggest "VPS hosting")
- Audience signals — "here are my best customers" (customer match, similar audiences, custom segments)
- Asset groups — creative bundles (headlines, descriptions, images, videos, logos)
- 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
| Tool | Purpose |
|---|---|
get_pmax_performance | Headline KPIs of PMax campaigns |
list_shared_sets | Find existing negative / brand lists |
list_shared_set_criteria | Inspect what's inside a shared list |
list_audiences + get_audience | Discover audiences before attaching as signals |
Write — targeting
| Tool | Purpose |
|---|---|
asset_group_signal_add | Add search theme OR audience signal to an asset group |
asset_group_signal_remove | Remove a signal by resource_name |
audience_create_custom_segment | Build "Concurrents X" from competitor URLs + keywords |
Write — negatives (the only mechanism for PMax)
| Tool | Purpose |
|---|---|
shared_set_create | Create NEGATIVE_KEYWORDS / BRANDS / NEGATIVE_PLACEMENTS list |
campaign_shared_set_link | Attach to a PMax campaign |
campaign_shared_set_unlink | Detach (preserves the list, useful for A/B test) |
shared_set_criterion_add | Add keywords (with match_type) to a list |
shared_set_criterion_remove | Remove by criterion_ids |
add_negative_placements | Block sites + apps + YouTube videos/channels |
Write — assets & creas
| Tool | Purpose |
|---|---|
asset_create | Create text / image (URL fetch) / YouTube video asset |
asset_group_asset_add | Link asset to group with field_type (HEADLINE, MARKETING_IMAGE, etc.) |
asset_group_asset_remove | Unlink (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 :
- 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.
- Audience signals : if NONE, typical 30% loss of targeting precision. AI recommends customer match list / similar / custom segments based on the product.
- 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).
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 :
# 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 )
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)
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=[...]).