원클릭으로
pmax-optimization
The Performance Max Optimization skill provides expert-level management of Google's most automated campaign type.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
The Performance Max Optimization skill provides expert-level management of Google's most automated campaign type.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Parallel Agent Orchestration is the discipline of dispatching, coordinating, and aggregating results from multiple concurrent subagents to dramatically accelerate complex tasks.
Proactive Intelligence enables agents to autonomously seek out external information — web searches, API re-pulls, data freshness checks — during analysis without waiting for explicit user requests
Context Engineering is the discipline of maximizing agent output quality while minimizing token expenditure.
Prompt Architecture is the structural engineering of agent instructions.
Verification Loops are systematic evaluation pipelines that validate agent outputs at every stage of execution.
Continuous Learning enables agents to automatically extract successful patterns from completed sessions and codify them into reusable skills, rules, and prompt refinements.
| name | pmax-optimization |
| description | The Performance Max Optimization skill provides expert-level management of Google's most automated campaign type. |
Part of Agent Skills™ by googleadsagent.ai™
The Performance Max Optimization skill provides expert-level management of Google's most automated campaign type. Performance Max (PMax) campaigns serve across all Google inventory — Search, Display, YouTube, Discover, Gmail, and Maps — using AI-driven targeting. While Google automates much of the delivery, the advertiser's strategic inputs dramatically influence performance: asset quality, audience signals, URL strategies, search themes, and campaign structure determine whether PMax delivers efficient growth or wasteful spend.
This skill addresses the core challenge of PMax: optimizing a black-box system. It establishes structural best practices (asset group architecture mapped to product lines or audience segments), configures audience signals that accelerate machine learning without constraining reach, manages URL expansion settings to balance automation with brand safety, and leverages the search themes feature to influence where PMax appears on Search.
Critical to PMax success is asset performance management. The skill monitors asset performance ratings (Best, Good, Low, combinations available), identifies underperforming creative elements, and generates replacement assets. It also manages the often-overlooked negative controls: brand exclusions to prevent cannibalization of branded search campaigns, negative keywords (available via API or Google rep), and placement exclusions to maintain brand safety on Display and YouTube inventory.
flowchart TD
A[PMax Campaign Analysis] --> B[Structural Assessment]
A --> C[Asset Performance Review]
A --> D[Signal Quality Evaluation]
B --> B1[Asset Group Architecture]
B --> B2[Campaign Segmentation]
B --> B3[URL Expansion Settings]
B --> B4[Bidding Configuration]
C --> C1[Headlines: Best/Good/Low]
C --> C2[Descriptions: Best/Good/Low]
C --> C3[Images: Best/Good/Low]
C --> C4[Videos: Best/Good/Low]
C --> C5[Ad Strength Rating]
D --> D1[Custom Segments]
D --> D2[Your Data Lists]
D --> D3[Google Audiences]
D --> D4[Demographics]
B1 --> E[Optimization Engine]
B2 --> E
B3 --> E
B4 --> E
C1 --> E
C2 --> E
C3 --> E
C4 --> E
D1 --> E
D2 --> E
D3 --> E
D4 --> E
E --> F[Structural Recommendations]
E --> G[Asset Replacement Queue]
E --> H[Signal Refinements]
E --> I[Negative Controls]
I --> I1[Brand Exclusions]
I --> I2[Negative Keywords via API]
I --> I3[Placement Exclusions]
I --> I4[Search Theme Adjustments]
PMax campaign assessment and optimization engine:
async function optimizePMax(customerId, campaignId) {
const campaign = await getPMaxCampaignData(customerId, campaignId);
const assetGroups = await getAssetGroups(customerId, campaignId);
const audienceSignals = await getAudienceSignals(customerId, campaignId);
const searchTermInsights = await getSearchTermInsights(customerId, campaignId);
return {
structuralAssessment: assessStructure(campaign, assetGroups),
assetPerformance: analyzeAssets(assetGroups),
signalQuality: evaluateSignals(audienceSignals),
searchAnalysis: analyzeSearchTerms(searchTermInsights),
recommendations: generateRecommendations(campaign, assetGroups, audienceSignals),
negativeControls: reviewNegativeControls(campaign)
};
}
function assessStructure(campaign, assetGroups) {
const issues = [];
if (assetGroups.length === 1 && campaign.productCount > 20) {
issues.push({
severity: 'high',
finding: 'Single asset group serving all products',
recommendation: 'Split into themed asset groups by product category for tailored messaging'
});
}
for (const group of assetGroups) {
if (group.headlines.length < 5) {
issues.push({
severity: 'medium',
assetGroup: group.name,
finding: `Only ${group.headlines.length} headlines (minimum 5, recommended 15)`,
recommendation: 'Add headlines to maximize ad combination options'
});
}
if (!group.videos || group.videos.length === 0) {
issues.push({
severity: 'high',
assetGroup: group.name,
finding: 'No videos provided — Google will auto-generate low-quality videos',
recommendation: 'Upload at least one custom video to prevent auto-generation'
});
}
if (group.adStrength !== 'EXCELLENT') {
issues.push({
severity: 'medium',
assetGroup: group.name,
finding: `Ad strength: ${group.adStrength} (target: Excellent)`,
recommendation: 'Add more unique, diverse assets to improve ad strength'
});
}
}
return {
urlExpansion: campaign.urlExpansionEnabled,
finalUrlStrategy: campaign.finalUrlStrategy,
biddingStrategy: campaign.biddingStrategy,
issues
};
}
function analyzeAssets(assetGroups) {
const analysis = [];
for (const group of assetGroups) {
const allAssets = [
...group.headlines.map(a => ({ ...a, type: 'headline' })),
...group.descriptions.map(a => ({ ...a, type: 'description' })),
...group.images.map(a => ({ ...a, type: 'image' })),
...(group.videos || []).map(a => ({ ...a, type: 'video' }))
];
const lowPerformers = allAssets.filter(a => a.performanceLabel === 'LOW');
const bestPerformers = allAssets.filter(a => a.performanceLabel === 'BEST');
analysis.push({
assetGroup: group.name,
totalAssets: allAssets.length,
performanceDistribution: {
best: bestPerformers.length,
good: allAssets.filter(a => a.performanceLabel === 'GOOD').length,
low: lowPerformers.length,
learning: allAssets.filter(a => a.performanceLabel === 'LEARNING').length
},
replacementCandidates: lowPerformers.map(a => ({
type: a.type,
content: a.text || a.url,
performanceLabel: a.performanceLabel,
action: 'replace_with_new_variant'
})),
topPerformers: bestPerformers.map(a => ({
type: a.type,
content: a.text || a.url,
insight: 'Use this as a template for new variants'
}))
});
}
return analysis;
}
Search themes and negative keyword management:
function configureSearchThemes(campaign, searchTermInsights) {
const topConvertingTerms = searchTermInsights
.filter(t => t.conversions > 0)
.sort((a, b) => b.conversionValue - a.conversionValue);
const missingCoverage = searchTermInsights
.filter(t => t.impressionShare < 0.3 && t.conversions > 0);
return {
recommendedThemes: topConvertingTerms.slice(0, 25).map(t => ({
theme: t.searchTerm,
rationale: `${t.conversions} conversions, ${formatCurrency(t.conversionValue)} value`,
searchVolume: t.estimatedVolume
})),
expansionOpportunities: missingCoverage.map(t => ({
theme: t.searchTerm,
currentImpressionShare: t.impressionShare,
potentialGain: `Up to ${((1 - t.impressionShare) * t.conversions).toFixed(0)} additional conversions`
})),
maxThemes: 25
};
}
async function manageNegativeKeywords(customerId, campaignId) {
const searchTerms = await getSearchTermInsights(customerId, campaignId);
const negatives = searchTerms.filter(term =>
term.clicks > 5 && term.conversions === 0 && term.cost > 50
);
return {
recommendedNegatives: negatives.map(n => ({
term: n.searchTerm,
clicks: n.clicks,
cost: n.cost,
matchType: 'EXACT'
})),
implementation: {
method: 'google_ads_api',
note: 'PMax negative keywords require API access or Google rep assistance',
apiEndpoint: 'CampaignCriterionService',
criterionType: 'KEYWORD',
negativeType: 'campaign_level'
},
brandExclusions: {
enabled: true,
excludedBrands: [],
recommendation: 'Exclude own brand if running separate branded Search campaigns'
}
};
}
Performance Max Optimization is a high-priority skill within Buddy™ Agent because PMax campaigns increasingly dominate Google Ads account spend. Buddy™ monitors PMax asset performance ratings daily, automatically flagging "Low" rated assets and generating replacement suggestions using the Ad Copy Generation skill.
Buddy™ addresses the PMax transparency challenge by correlating search term insights with conversion data, building a clearer picture of where PMax is finding conversions. It detects Search campaign cannibalization by monitoring branded query attribution and recommends brand exclusions when PMax is consuming branded traffic at higher CPCs than dedicated Search campaigns.
The platform manages audience signal lifecycle, refreshing Customer Match lists on schedule and recommending signal updates as conversion patterns shift. For e-commerce accounts, Buddy™ coordinates PMax with the Shopping Ads skill to optimize product feed data that directly impacts PMax Shopping placements.
| Platform | Supported |
|---|---|
| Claude Code | ✅ |
| Cursor | ✅ |
| Codex | ✅ |
| Gemini | ✅ |
performance max, pmax optimization, asset groups, audience signals, search themes, pmax assets, url expansion, pmax negative keywords, brand exclusions, asset performance, pmax campaign structure, pmax best practices, google pmax, performance max campaigns, pmax cannibalization
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License