Chapter 12: Google Ads Integration
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 AdPriority Pro ($149/mo) 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: REDACTED |
| (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 (product peak 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 (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 | REDACTED |
| 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 - Product peak 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 AdPriority Pro)
The Google Ads API integration is planned for the AdPriority Pro tier ($149/month). It enables AdPriority to read campaign performance data and provide automated recommendations.
Planned Capabilities
| Capability | API Resource | Phase |
|---|---|---|
| Read campaign performance | CampaignPerformanceView | AdPriority Pro v1 |
| Read product-level metrics | ShoppingPerformanceView | AdPriority Pro v1 |
| ROAS by priority tier | Custom report aggregation | AdPriority Pro v1 |
| Automated priority recommendations | Internal scoring + API data | AdPriority Pro v2 |
| Budget allocation suggestions | Campaign budget analysis | AdPriority Pro v2 |
| Campaign creation assistance | CampaignService.mutate | AdPriority 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 |
| 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 (AdPriority Pro)
The AdPriority Pro 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 (AdPriority Pro v2)
In the second phase of AdPriority Pro 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) | AdPriority ($49/mo) | Phase 0 |
| Pro v1 | Read-only Google Ads performance data | AdPriority Pro ($149/mo) | Phase 2 |
| Pro v1 | ROAS by priority tier dashboard | AdPriority Pro ($149/mo) | Phase 2 |
| Pro v2 | Automated priority recommendations | AdPriority Pro ($149/mo) | Phase 3 |
| Pro v2 | Budget allocation suggestions | AdPriority Pro ($149/mo) | Phase 3 |
| Pro v3 | Campaign creation assistant | AdPriority Pro ($149/mo) | Future |
| Pro v3 | Automated bid adjustments | AdPriority Pro ($149/mo) | Future |
10.8 PMAX Onboarding Workflow
When a new merchant installs AdPriority and labels are live in GMC, the app provides a guided PMAX campaign setup flow.
Onboarding Steps
PMAX Onboarding Flow (in-app guide)
=====================================
Step 1: Verify Labels in GMC
- AdPriority checks supplemental feed status
- Confirm all 5 custom labels populated
- Estimated time: 24-48 hours after first sync
Step 2: Review Priority Distribution
- Dashboard shows how products are distributed across P0-P5
- Merchant can adjust rules before campaign setup
- Goal: ensure distribution matches business intent
Step 3: Campaign Structure Recommendation
- Show recommended 4-campaign structure (see Section 10.2)
- Provide budget allocation based on merchant's total ad budget
- Calculate per-campaign tROAS targets
Step 4: Manual Setup (AdPriority tier)
- Step-by-step guide with screenshots
- Merchant creates campaigns in Google Ads UI
- AdPriority verifies label filters are correct
Step 4 (alt): Assisted Setup (AdPriority Pro tier, future)
- Google Ads API creates campaigns programmatically
- Merchant approves structure before activation
- Automatic listing group configuration
Producthero Labelizer Comparison
Producthero Labelizer is a competing product that also writes custom labels to GMC for PMAX segmentation. Understanding the competitive landscape:
| Feature | AdPriority | Producthero Labelizer |
|---|---|---|
| Label source | Rules engine + seasonal calendar | AI-based product performance analysis |
| Segmentation approach | Business-logic driven (merchant controls rules) | Performance-data driven (automated tiers: Hero, Sidekick, Villain, Zombie) |
| Shopify integration | Native embedded app (App Bridge) | External tool, feed-based |
| Custom labels used | All 5 (priority, product peak season, category, inventory, brand tier) | 1 (performance tier only) |
| Seasonal awareness | Built-in seasonal calendar with category overrides | No native seasonal logic |
| Manual overrides | Per-product priority locking | Limited |
| Pricing | AdPriority ($49/mo), AdPriority Pro ($149/mo) | From ~$99/mo (varies by product count) |
| Google Ads API integration | AdPriority Pro tier (read performance data, recommendations) | Read + limited write |
| Target market | Shopify merchants wanting rules-based control | Any merchant wanting automated labeling |
AdPriority’s differentiation: Merchant-controlled rules with full seasonal awareness, 5 label dimensions vs. 1, and native Shopify embedded experience. Producthero is stronger for merchants who want fully automated labeling without configuring rules.
10.9 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 AdPriority ($49/mo) tier, AdPriority provides a campaign setup guide and the labels in GMC. Merchants configure their Google Ads campaigns manually. The AdPriority Pro ($149/mo) tier adds Google Ads API integration for performance tracking, ROAS analysis by tier, and automated priority recommendations.
Key takeaways for Nexus Clothing:
- 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
- 2 pricing tiers: AdPriority ($49/mo) and AdPriority Pro ($149/mo)
- AdPriority Pro adds: Performance data, ROAS by tier, automated recommendations
- No Google Ads API access needed for AdPriority tier – labels in GMC are sufficient
- Competitive differentiation vs. Producthero: rules-based control, 5 label dimensions, seasonal awareness