Chapter 12: Google Ads Integration (Pro Tier)
Google Ads is the ultimate consumer of AdPriority’s custom labels. While AdPriority does not directly create or modify Google Ads campaigns in the MVP, understanding how custom labels drive Performance Max (PMAX) campaign structure is essential. This chapter covers the recommended campaign architecture, how PMAX uses custom labels for product segmentation, and the future Google Ads API integration planned for the Pro tier.
10.1 How PMAX Uses Custom Labels
Performance Max campaigns use listing groups (formerly product groups) to segment a merchant’s product catalog. Custom labels are one of the most powerful segmentation dimensions because they are the only attributes fully controlled by the merchant.
Product Group Hierarchy
Performance Max Campaign
|
+-- Asset Group: "All Products"
|
+-- Listing Group (root)
|
+-- Filter: custom_label_0 = "priority-5"
| (Products scored as maximum push)
|
+-- Filter: custom_label_0 = "priority-4"
| (Strong performers)
|
+-- Filter: custom_label_0 = "priority-3"
| (Standard products)
|
+-- Filter: custom_label_0 IN ("priority-2", "priority-1")
| (Low priority, minimal spend)
|
+-- Filter: custom_label_0 = "priority-0"
(Excluded from advertising)
Why Custom Labels Matter for PMAX
Google’s PMAX algorithm optimizes bid strategy across all products in an asset group. Without segmentation, high-margin seasonal items compete for budget with dead stock and low-performers. Custom labels solve this by letting the merchant tell Google which products deserve more budget.
Without AdPriority Labels With AdPriority Labels
=========================== ==========================
Single PMAX Campaign 4 Focused Campaigns
+---------------------+ +--------------------+
| ALL 20,000 items | | Priority 5 (800) | --> Aggressive
| compete equally | +--------------------+
| for budget | | Priority 4-3 (8K) | --> Standard
| | +--------------------+
| Google guesses | | Priority 2-1 (6K) | --> Minimal
| which to show | +--------------------+
+---------------------+ | Priority 0 (5.2K) | --> Excluded
+--------------------+
Result: Budget wasted Result: Budget focused
on dead stock and on seasonal winners
off-season items and high-margin products
10.2 Recommended Campaign Structure
AdPriority recommends a multi-campaign structure where each campaign targets a priority tier with its own budget and bidding strategy. This provides maximum control over spend allocation.
Campaign Architecture
+-----------------------------------------------------------------------+
| Google Ads Account: 298-086-1126 |
| (Nexus Clothing) |
+-----------------------------------------------------------------------+
| |
| Campaign 1: "PMAX - Priority 5 - Maximum Push" |
| +------------------------------------------------------------------+ |
| | Budget: $80/day (40% of total) | |
| | tROAS: 200% (aggressive, prioritize volume) | |
| | Filter: custom_label_0 = "priority-5" | |
| | Products: Seasonal peaks, new arrivals, high-margin items | |
| | Nexus est: ~800 variants (winter puffers, hoodies, new arrivals) | |
| +------------------------------------------------------------------+ |
| |
| Campaign 2: "PMAX - Priority 4-3 - Active Products" |
| +------------------------------------------------------------------+ |
| | Budget: $80/day (40% of total) | |
| | tROAS: 350% (standard, balanced) | |
| | Filter: custom_label_0 IN ("priority-4", "priority-3") | |
| | Products: Steady sellers, year-round staples, name brands | |
| | Nexus est: ~8,000 variants (jeans, caps, standard t-shirts) | |
| +------------------------------------------------------------------+ |
| |
| Campaign 3: "PMAX - Priority 2-1 - Low Priority" |
| +------------------------------------------------------------------+ |
| | Budget: $30/day (15% of total) | |
| | tROAS: 500% (high threshold, only show if very profitable) | |
| | Filter: custom_label_0 IN ("priority-2", "priority-1") | |
| | Products: Low-margin, off-season, accessories | |
| | Nexus est: ~6,000 variants (underwear, socks, off-season items) | |
| +------------------------------------------------------------------+ |
| |
| Campaign 4: "PMAX - Priority 0 - Excluded" |
| +------------------------------------------------------------------+ |
| | Budget: $0/day (PAUSED) | |
| | Status: Paused | |
| | Filter: custom_label_0 = "priority-0" | |
| | Products: Dead stock, archived, out of stock | |
| | Nexus est: ~5,200 variants (DEAD50 tagged, archived products) | |
| +------------------------------------------------------------------+ |
| |
| Total daily budget: ~$190/day ($5,700/month) |
+-----------------------------------------------------------------------+
Budget Allocation by Priority
| Priority | Campaign | Budget Share | Daily Budget | tROAS Target | Strategy |
|---|---|---|---|---|---|
| 5 | Maximum Push | 40% | $80 | 200% | Aggressive growth – maximize impressions and conversions |
| 4-3 | Active Products | 40% | $80 | 350% | Balanced – steady ROAS with broad reach |
| 2-1 | Low Priority | 15% | $30 | 500% | Conservative – only serve when highly likely to convert |
| 0 | Excluded | 0% | $0 | N/A | Paused campaign, no spend |
| – | Unallocated | 5% | $10 | – | Reserve for testing and catch-all |
Why Multiple Campaigns (Not Asset Groups)
| Approach | Budget Control | tROAS Control | Complexity |
|---|---|---|---|
| Single campaign, multiple asset groups | Shared budget (Google decides allocation) | Single tROAS for all | Low |
| Multiple campaigns (recommended) | Independent budgets per tier | Independent tROAS per tier | Medium |
| Single campaign, no segmentation | No control | No control | Lowest |
Multiple campaigns give the merchant explicit budget and tROAS control per priority tier. With asset groups in a single campaign, Google’s algorithm decides how to split the budget, which often means high-volume low-margin products consume disproportionate spend.
10.3 Secondary Label Segmentation
Beyond the primary custom_label_0 (priority) segmentation, merchants can create additional product groups using the other labels for analysis and fine-tuning.
Seasonal Analysis
Using custom_label_1 (season) within each campaign:
Campaign: "PMAX - Priority 5 - Maximum Push"
|
+-- Asset Group: "Priority 5 - Winter Items"
| Filter: custom_label_0 = "priority-5" AND custom_label_1 = "winter"
|
+-- Asset Group: "Priority 5 - Year-Round Items"
Filter: custom_label_0 = "priority-5" AND custom_label_1 != "winter"
Category-Level Reporting
Using custom_label_2 (category) for performance reports:
Category (label_2) | Impressions | Clicks | Conversions | ROAS |
|---|---|---|---|---|
| jeans-pants | 45,000 | 1,200 | 85 | 420% |
| hoodies-sweatshirts | 38,000 | 980 | 72 | 380% |
| outerwear-heavy | 22,000 | 650 | 55 | 510% |
| headwear-caps | 31,000 | 750 | 45 | 290% |
| t-shirts | 52,000 | 1,400 | 60 | 210% |
This data, when fed back into AdPriority (Pro tier), enables data-driven priority adjustments.
Brand Tier Analysis
Using custom_label_4 (brand tier):
Brand Tier (label_4) | Avg CPC | Conv Rate | ROAS |
|---|---|---|---|
| name-brand | $0.85 | 3.2% | 450% |
| store-brand | $0.62 | 2.8% | 380% |
| off-brand | $0.48 | 1.9% | 280% |
10.4 Nexus Google Ads Account
| Property | Value |
|---|---|
| Google Ads Customer ID | 298-086-1126 |
| Account type | Standard |
| Primary campaign type | Performance Max |
| Linked GMC account | Yes (same Google account) |
| Current PMAX structure | Single campaign, minimal segmentation |
| Custom label usage in ads | None (labels are empty in GMC) |
Current State vs. Target State
Current State (Feb 2026) Target State (With AdPriority)
============================ ================================
1 PMAX Campaign 4 PMAX Campaigns (by priority)
- All products in one group - Priority 5: Aggressive
- Single budget - Priority 4-3: Standard
- Single tROAS - Priority 2-1: Conservative
- No custom label filtering - Priority 0: Paused
No segmentation by: Full segmentation by:
- Season - Priority (label_0)
- Category - Season (label_1)
- Inventory status - Category (label_2)
- Brand tier - Inventory status (label_3)
- Brand tier (label_4)
Manual priority decisions Automated priority scoring
- Guesswork - Rules engine
- Infrequent updates - Seasonal calendar
- No data backing - Tag-based modifiers
10.5 Google Ads API (Future Pro Tier)
The Google Ads API integration is planned for the Pro tier ($199/month). It enables AdPriority to read campaign performance data and provide automated recommendations.
Planned Capabilities
| Capability | API Resource | Phase |
|---|---|---|
| Read campaign performance | CampaignPerformanceView | Pro v1 |
| Read product-level metrics | ShoppingPerformanceView | Pro v1 |
| ROAS by priority tier | Custom report aggregation | Pro v1 |
| Automated priority recommendations | Internal scoring + API data | Pro v2 |
| Budget allocation suggestions | Campaign budget analysis | Pro v2 |
| Campaign creation assistance | CampaignService.mutate | Pro v3 (future) |
Authentication Requirements
| Requirement | Value |
|---|---|
| OAuth 2.0 scope | https://www.googleapis.com/auth/adwords |
| Developer token | Required (apply via Google Ads API Center) |
| Token approval | Basic access initially, then Standard |
| Customer ID format | XXX-XXX-XXXX (e.g., 298-086-1126) |
| Manager account | Optional but recommended for multi-tenant |
GAQL Queries (Google Ads Query Language)
Performance by product (Shopping Performance View):
SELECT
segments.product_item_id,
segments.product_custom_attribute0,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.conversions_value
FROM shopping_performance_view
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.conversions_value DESC
LIMIT 1000
Performance by priority tier (aggregated):
SELECT
segments.product_custom_attribute0,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.conversions_value
FROM shopping_performance_view
WHERE segments.date DURING LAST_30_DAYS
AND segments.product_custom_attribute0 IS NOT NULL
Campaign-level performance:
SELECT
campaign.name,
campaign.status,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.conversions_value,
metrics.average_cpc
FROM campaign
WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX'
AND segments.date DURING LAST_30_DAYS
Performance Tracking Dashboard (Pro Tier)
The Pro tier dashboard will display ROAS and key metrics segmented by priority tier:
+-----------------------------------------------------------------------+
| AdPriority Pro - Performance by Priority Tier (Last 30 Days) |
+-----------------------------------------------------------------------+
| |
| Priority 5 - Maximum Push |
| +---------+----------+--------+--------+----------+--------+ |
| | Impress | Clicks | Cost | Conv | Revenue | ROAS | |
| | 85,000 | 2,400 | $1,920 | 168 | $12,600 | 656% | |
| +---------+----------+--------+--------+----------+--------+ |
| |
| Priority 4-3 - Active Products |
| +---------+----------+--------+--------+----------+--------+ |
| | Impress | Clicks | Cost | Conv | Revenue | ROAS | |
| | 120,000 | 3,100 | $1,860 | 195 | $9,750 | 524% | |
| +---------+----------+--------+--------+----------+--------+ |
| |
| Priority 2-1 - Low Priority |
| +---------+----------+--------+--------+----------+--------+ |
| | Impress | Clicks | Cost | Conv | Revenue | ROAS | |
| | 45,000 | 850 | $510 | 38 | $1,520 | 298% | |
| +---------+----------+--------+--------+----------+--------+ |
| |
| Priority 0 - Excluded |
| +---------+----------+--------+--------+----------+--------+ |
| | Impress | Clicks | Cost | Conv | Revenue | ROAS | |
| | 0 | 0 | $0 | 0 | $0 | N/A | |
| +---------+----------+--------+--------+----------+--------+ |
| |
| TOTAL |
| +---------+----------+--------+--------+----------+--------+ |
| | 250,000 | 6,350 | $4,290 | 401 | $23,870 | 556% | |
| +---------+----------+--------+--------+----------+--------+ |
| |
+-----------------------------------------------------------------------+
Key Performance Indicators
| KPI | Definition | Target |
|---|---|---|
| ROAS by priority tier | Revenue / Cost per tier | Priority 5 > 400%, Priority 2-1 > 200% |
| Cost per conversion | Ad spend / Conversions | Lower for higher priority tiers |
| Impression share | Our impressions / Total eligible impressions | Priority 5 > 80% |
| Click-through rate | Clicks / Impressions | Priority 5 > 3%, overall > 2% |
| Conversion rate | Conversions / Clicks | Priority 5 > 5% |
| Wasted spend | Spend on priority-0 products (should be $0) | $0 |
10.6 Automated Recommendations (Pro v2)
In the second phase of Pro tier development, AdPriority will use Google Ads performance data to generate priority adjustment recommendations.
Recommendation Logic
Recommendation Engine Flow
===========================
1. Fetch last 30 days of shopping performance data
(product-level: impressions, clicks, conversions, revenue, cost)
2. Calculate per-product metrics:
- ROAS = conversions_value / (cost_micros / 1_000_000)
- Conversion rate = conversions / clicks
- Cost efficiency = cost_micros / conversions
3. Compare actual performance vs. expected for priority tier:
Product at Priority 3 with ROAS = 650%?
--> RECOMMEND: Increase to Priority 5
Reason: "ROAS of 650% is 86% above the tier average.
This product is undervalued at Priority 3."
Product at Priority 5 with ROAS = 120%?
--> RECOMMEND: Decrease to Priority 2
Reason: "ROAS of 120% is 70% below the tier average.
Budget is being wasted on this product."
Product at Priority 4 with 0 conversions in 30 days?
--> RECOMMEND: Decrease to Priority 1
Reason: "Zero conversions in 30 days despite 2,400
impressions. Move budget to better performers."
4. Present recommendations in dashboard with one-click accept
Safety Guardrails
| Guardrail | Rule |
|---|---|
| Maximum change per cycle | +/- 2 priority levels per recommendation |
| Minimum data threshold | 100+ impressions before recommending decrease |
| Manual lock respected | Never recommend changes to locked products |
| Seasonal awareness | Do not downgrade seasonal items approaching their peak |
| Recommendation frequency | Weekly (not daily) to avoid churn |
10.7 Implementation Timeline
| Phase | Feature | Tier | Timeline |
|---|---|---|---|
| MVP | Labels in GMC, campaign structure guide (manual setup) | Starter | Phase 0 |
| Pro v1 | Read-only Google Ads performance data | Pro | Phase 2 |
| Pro v1 | ROAS by priority tier dashboard | Pro | Phase 2 |
| Pro v2 | Automated priority recommendations | Pro | Phase 3 |
| Pro v2 | Budget allocation suggestions | Pro | Phase 3 |
| Pro v3 | Campaign creation assistant | Pro | Future |
| Pro v3 | Automated bid adjustments | Pro | Future |
10.8 Chapter Summary
Google Ads is the downstream beneficiary of AdPriority’s custom labels. The recommended campaign structure uses four PMAX campaigns segmented by custom_label_0 (priority), with independent budgets and tROAS targets per tier. Priority 5 products receive aggressive spend, while Priority 0 products are excluded entirely.
For the MVP and Starter/Growth tiers, AdPriority provides a campaign setup guide and the labels in GMC. Merchants configure their Google Ads campaigns manually. The Pro tier adds Google Ads API integration for performance tracking, ROAS analysis by tier, and automated priority recommendations.
Key takeaways for Nexus Clothing (Account 298-086-1126):
- Current state: Single PMAX campaign, no custom label segmentation
- Target state: 4 campaigns segmented by priority tier
- Estimated active variant distribution: ~800 at P5, ~8,000 at P4-3, ~6,000 at P2-1, ~5,200 at P0
- Pro tier adds: Performance data, ROAS by tier, automated recommendations
- No Google Ads API access needed for MVP – labels in GMC are sufficient