Chapter 20: Phase 0 - Nexus MVP
Goal
Validate the AdPriority concept using Nexus Clothing as a real-world test case. Phase 0 is a manual implementation using Google Sheets as the supplemental feed transport, with no application code. The purpose is to prove that priority-based custom labels in Google Merchant Center produce measurable ROAS improvement in Performance Max campaigns before investing in SaaS development.
Status: IN PROGRESS - Supplemental feed validated (10/10 matched)
Steps Completed
Step 1: Analyze Nexus Catalog
Pulled live data from the Shopify Admin API for nexus-clothes.myshopify.com.
| Metric | Value |
|---|---|
| Total products | 5,582 |
| Active products | 2,425 |
| Archived products | 3,121 |
| Draft products | 36 |
| Unique product types | 90 |
| Unique vendors | 175 |
| Unique tags | 2,522 |
| Estimated active variants | ~15,000-20,000 |
The catalog follows a hierarchical product type naming convention: {Gender}-{Department}-{SubCategory}-{Detail}. Examples include Men-Tops-T-Shirts, Men-Bottoms-Pants-Jeans, and Headwear-Baseball-Fitted. The 90 product types were consolidated into 20 category groups for manageable priority assignment (see Appendix C).
Step 2: Verify GMC ID Format
Exported the full Google Merchant Center product catalog (124,060 variants) and confirmed the product ID format.
CONFIRMED FORMAT
================
shopify_US_{productId}_{variantId}
Examples:
shopify_US_8779355160808_46050142748904
shopify_US_9128994570472_47260097118440
shopify_US_9057367064808_47004004712680
All products in GMC use variant-level IDs. The Item Group ID field contains just the Shopify product ID (e.g., 8779355160808). Country code is US for all Nexus products.
Step 3: Confirm Custom Labels Available
Audited all five custom label slots in the GMC product export.
| Label | Current State | Products Using | Decision |
|---|---|---|---|
custom_label_0 | “Argonaut Nations - Converting” | 7 (0.006%) | Safe to overwrite |
custom_label_1 | EMPTY | 0 | Available |
custom_label_2 | EMPTY | 0 | Available |
custom_label_3 | EMPTY | 0 | Available |
custom_label_4 | EMPTY | 0 | Available |
All five labels are effectively available. The 7 products with existing custom_label_0 values represent a negligible fraction of the catalog and are safe to overwrite.
Step 4: Create Sample Feed
Built a Google Sheet with 10 test products spanning multiple categories, priority levels, and seasons.
Feed Structure:
Columns:
id - GMC product ID (shopify_US_{pid}_{vid})
custom_label_0 - Priority score (priority-0 through priority-5)
custom_label_1 - Season (winter)
custom_label_2 - Category group (e.g., headwear-caps, outerwear-heavy)
custom_label_3 - Product status (in-stock, low-inventory, dead-stock)
custom_label_4 - Brand tier (name-brand, off-brand)
Sample Products Tested:
| Product | Type | Priority | Status | Brand |
|---|---|---|---|---|
| New Era Colts Knit 2015 | Headwear-Knit Beanies | 4 | low-inventory | name-brand |
| New Era Yankees 59FIFTY | Headwear-Baseball-Fitted | 4 | in-stock | name-brand |
| G3 Patriots Hoodie | Men-Tops-Hoodies & Sweatshirts | 0 | dead-stock | off-brand |
| Primitive Velour Pants | Men-Bottoms-Joggers | 0 | dead-stock | off-brand |
| Mitchell & Ness Warriors Hood | Men-Tops-T-Shirts | 3 | low-inventory | off-brand |
| Levi’s Torn Up 501 Jeans | Men-Bottoms-Pants-Jeans | 0 | dead-stock | off-brand |
| Gray Earth Denim Shorts | Men-Bottoms-Shorts-Denim | 1 | low-inventory | off-brand |
| Cookies SF V3 Glowtray | Accessories | 3 | low-inventory | name-brand |
| Rebel Minds Puffer Jacket | Men-Tops-Outerwear-Jackets-Puffer Jackets | 5 | low-inventory | off-brand |
| Ethika Men Go Pac Go | Men-Underwear | 0 | dead-stock | name-brand |
Step 5: Upload to GMC
Connected the Google Sheet as a supplemental feed in Google Merchant Center.
Process:
- Shared the Google Sheet publicly (Viewer access)
- In GMC: Products > Feeds > Add supplemental feed > Google Sheets
- Linked the feed to all three primary data sources:
- Content API - US, English
- Content API - Local, US
- Local Feed Partnership
- Triggered a manual update
Results:
| Metric | Result |
|---|---|
| Products in feed | 10 |
| Products matched | 10 (100%) |
| Attribute names recognized | All 6 columns |
| Issues found | None |
| Processing time | < 1 hour |
| Feed status | Accepted, no errors |
VALIDATION RESULT
=================
Feed Upload --> 10 rows submitted
ID Matching --> 10/10 matched (100%)
Label Application --> All 5 custom labels applied
Errors --> 0
Warnings --> 0
Status --> VALIDATED
Remaining Steps
Step 6: Expand to Full Active Catalog
Scale the supplemental feed from 10 test products to the full active catalog.
Scope:
| Metric | Estimate |
|---|---|
| Active products | ~2,425 |
| Active variants (rows needed) | ~15,000-20,000 |
| Google Sheets cells used | ~120,000 (1.2% of 10M limit) |
Process:
- Export all active products from Shopify API (paginated, 250/page, ~10 pages)
- For each product, enumerate all variants
- Apply category mapping rules (20 groups from category-mapping.md)
- Apply seasonal priorities (Winter season as of February 2026)
- Apply tag modifiers (
NAME BRAND+1,in-stock+1,Sale-1,DEAD50override to 0,archivedoverride to 0,warning_inv_1-1) - Apply new arrival boost (products created within 14 days get priority 5)
- Generate GMC ID for each variant:
shopify_US_{productId}_{variantId} - Write all rows to Google Sheet via Sheets API or manual paste
- Verify GMC processes the full feed without errors
Expected Distribution (Winter, estimated):
PROJECTED PRIORITY DISTRIBUTION
================================
Priority 5 (Push Hard): ~300 (12%) Puffer jackets, hoodies, new arrivals
Priority 4 (Strong): ~500 (21%) Jeans, name brand items, joggers
Priority 3 (Normal): ~800 (33%) Caps, basic t-shirts, year-round items
Priority 2 (Low): ~400 (16%) Underwear, socks, off-season light items
Priority 1 (Minimal): ~200 (8%) End-of-season, slow movers
Priority 0 (Exclude): ~225 (10%) Dead stock, archived, out of stock
-----
Total Active: 2,425
Step 7: Set Up PMAX Campaigns by Priority Tier
Restructure existing Google Ads Performance Max campaigns to segment products by the custom_label_0 priority score.
Proposed Campaign Structure:
PMAX CAMPAIGN STRUCTURE
=======================
Campaign 1: "PMAX - High Priority (5)"
Listing group filter: custom_label_0 = "priority-5"
Daily budget: $50
Target ROAS: 3.0x
Products: ~300
Campaign 2: "PMAX - Strong (4)"
Listing group filter: custom_label_0 = "priority-4"
Daily budget: $35
Target ROAS: 4.0x
Products: ~500
Campaign 3: "PMAX - Normal (3)"
Listing group filter: custom_label_0 = "priority-3"
Daily budget: $20
Target ROAS: 5.0x
Products: ~800
Campaign 4: "PMAX - Low (1-2)"
Listing group filter: custom_label_0 IN ("priority-1", "priority-2")
Daily budget: $10
Target ROAS: 6.0x
Products: ~600
Priority 0 products: Excluded (not in any campaign)
Budget Allocation (daily):
| Campaign | Priority | Budget | % of Total |
|---|---|---|---|
| High Priority | 5 | $50 | 43% |
| Strong | 4 | $35 | 30% |
| Normal | 3 | $20 | 17% |
| Low | 1-2 | $10 | 9% |
| Exclude | 0 | $0 | 0% |
| Total | $115 | 100% |
Step 8: Monitor ROAS for 30 Days
Track campaign performance daily for 30 days to establish whether the priority-segmented structure outperforms the previous flat structure.
Baseline Metrics (to capture before restructuring):
| Metric | Capture Before | Track After |
|---|---|---|
| Overall ROAS | Current PMAX ROAS | Daily ROAS by campaign |
| Cost per conversion | Current CPA | CPA by priority tier |
| Revenue | Monthly revenue from ads | Revenue by priority tier |
| Impressions | Total impressions | Impressions by priority tier |
| Click-through rate | Overall CTR | CTR by priority tier |
| Wasted spend | Spend on priority-0 products | Should be $0 after restructure |
Success Criteria:
| Criterion | Target |
|---|---|
| Overall ROAS improvement | >= 20% increase vs. baseline |
| Priority 5 ROAS | >= 4.0x |
| Wasted spend eliminated | $0 on priority-0 products |
| Feed sync reliability | Zero missed daily syncs |
| No negative impact | No decrease in total revenue |
Tracking Spreadsheet:
DATE | CAMPAIGN | SPEND | REVENUE | ROAS | CONV | CPA
------------|------------- |--------|---------|-------|------|------
2026-02-15 | High (5) | $48.20 | $241.00 | 5.0x | 24 | $2.01
2026-02-15 | Strong (4) | $33.10 | $132.40 | 4.0x | 17 | $1.95
2026-02-15 | Normal (3) | $19.50 | $58.50 | 3.0x | 10 | $1.95
2026-02-15 | Low (1-2) | $9.80 | $24.50 | 2.5x | 5 | $1.96
...
Step 9: Document Results
Produce a comprehensive results document covering:
- Methodology: How products were scored, how campaigns were structured
- Baseline vs. Result: Before/after comparison with statistical significance
- Category Analysis: Which category groups benefited most from prioritization
- Seasonal Validation: Whether Winter priorities matched actual demand
- Lessons Learned: What to adjust in the SaaS version
- Process Documentation: Step-by-step replication guide for Phase 1
Tools and Resources
| Tool | Purpose | Status |
|---|---|---|
| Google Sheets | Supplemental feed transport | Active |
| Google Merchant Center | Custom label application | Connected |
| Shopify Admin API | Product data export | Tested |
| Google Ads | Campaign management | Existing campaigns |
| Sheets API | Programmatic Sheet updates (for full catalog) | Available |
Success Metric
The single success metric for Phase 0 is:
Measurable ROAS improvement versus the flat (unsegmented) campaign structure, sustained over a 30-day monitoring period.
If ROAS improves by 20% or more with the priority-segmented approach, the concept is validated and Phase 1 (SaaS development) proceeds. If ROAS does not improve, the category mappings and seasonal priorities are revised before retesting.
Timeline
PHASE 0 TIMELINE
================
Week 1 (Feb 3-9):
[DONE] Analyze catalog (5,582 products, 90 types)
[DONE] Verify GMC ID format
[DONE] Confirm custom labels available
[DONE] Create sample feed (10 products)
[DONE] Upload and validate sample feed (10/10 matched)
Week 2 (Feb 10-16):
[TODO] Expand feed to full active catalog (~2,425 products)
[TODO] Capture baseline PMAX metrics
[TODO] Restructure PMAX campaigns by priority tier
Week 3-6 (Feb 17 - Mar 16):
[TODO] Monitor ROAS daily for 30 days
[TODO] Weekly progress checks
[TODO] Adjust priorities if data warrants
Week 7 (Mar 17-23):
[TODO] Compile results document
[TODO] Go/no-go decision for Phase 1