Chapter 5: Success Criteria
Overview
Success criteria define the measurable outcomes that determine whether each phase of AdPriority development has achieved its objectives. These criteria are structured around four phases, each building on the validated results of the previous one.
This chapter also documents validation milestones that have already been achieved during the research phase, providing a foundation of confirmed technical feasibility.
Phase 0 Success: Nexus MVP
Phase 0 validates the core concept using Nexus Clothing as a live test case. The goal is to prove that priority-based custom labels measurably improve Google Ads ROAS before investing in SaaS infrastructure.
Success Criteria
| # | Criterion | Metric | Status |
|---|---|---|---|
| P0-01 | Supplemental feed pipeline working | Google Sheet connected to GMC, products matched | ACHIEVED |
| P0-02 | Custom labels appearing in GMC | All 5 labels populated on test products | ACHIEVED |
| P0-03 | All active products scored | 2,425 active products have priority 0-5 assigned | Pending |
| P0-04 | Full supplemental feed deployed | ~15,000-20,000 variant rows in Google Sheet | Pending |
| P0-05 | PMAX campaigns restructured | Asset groups segmented by priority score | Pending |
| P0-06 | Baseline ROAS recorded | 30-day pre-change ROAS documented by priority tier | Pending |
| P0-07 | Post-change ROAS measured | 30-day post-change ROAS documented by priority tier | Pending |
| P0-08 | Measurable ROAS improvement | Overall ROAS improvement of 15%+ within 30 days | Pending |
| P0-09 | Process documented | Complete step-by-step guide for replication | Pending |
| P0-10 | Category mapping validated | Store owner confirms 20 category groups are accurate | Pending |
Phase 0 Definition of Done
PHASE 0 CHECKLIST
=================
TECHNICAL
[x] Google Sheets supplemental feed connected to GMC
[x] Product ID format verified (shopify_US_{productId}_{variantId})
[x] Custom labels recognized by GMC (10/10 test products matched)
[ ] Full catalog scored (2,425 active products, ~15K-20K variants)
[ ] Supplemental feed processing without errors
CAMPAIGN STRUCTURE
[ ] PMAX campaigns restructured with priority-based asset groups
[ ] Budget allocation aligned to priority tiers
[ ] Priority 0 products excluded from all campaigns
MEASUREMENT
[ ] Baseline ROAS captured (30-day pre-change period)
[ ] Post-change ROAS captured (30-day post-change period)
[ ] Comparison report generated
DOCUMENTATION
[ ] Category mapping validated with store owner
[ ] Seasonal calendar confirmed
[ ] Tag modifier rules confirmed
[ ] End-to-end process documented for SaaS replication
Expected Outcomes
| Metric | Before AdPriority | After AdPriority (Target) |
|---|---|---|
| Overall ROAS | Baseline (to be measured) | +15-30% improvement |
| Wasted spend on priority-0 products | Unknown % of budget | 0% (excluded) |
| Seasonal product alignment | Manual, infrequent | Automated, real-time |
| Time to update priorities | Hours per season change | Zero (automated) |
| Products with custom labels | 7 (0.006% of catalog) | ~20,000 (all active variants) |
Phase 1 Success: SaaS Foundation
Phase 1 transforms the validated Nexus MVP into an installable Shopify app that other merchants can use. The focus is on core infrastructure: authentication, data storage, and automated feed generation.
Success Criteria
| # | Criterion | Metric | Target |
|---|---|---|---|
| P1-01 | Shopify app installable | OAuth flow completes without errors | 100% success rate |
| P1-02 | App embedded in Shopify admin | Polaris UI renders inside Shopify admin panel | All major browsers |
| P1-03 | Product import working | Shopify products fetched and stored in database | < 5 minutes for 5K products |
| P1-04 | Priority rules configurable | Merchant can create/edit category rules via UI | Minimum 5 rule types |
| P1-05 | Priority scores calculated | Engine calculates scores for all imported products | < 30 seconds for 5K products |
| P1-06 | Google Sheet auto-generated | Sheets API creates and populates supplemental feed | < 2 minutes for 5K products |
| P1-07 | GMC sync confirmed | Labels appear in GMC within 24 hours of Sheet update | 95%+ match rate |
| P1-08 | Database operational | PostgreSQL storing rules, mappings, sync state | Zero data loss |
| P1-09 | Webhook processing | Product create/update/delete events handled | < 5 second processing time |
| P1-10 | Beta testers onboarded | Real merchants using the app | 5 beta testers |
Phase 1 Definition of Done
PHASE 1 CHECKLIST
=================
AUTHENTICATION
[ ] Shopify OAuth 2.0 flow working
[ ] Session tokens stored securely
[ ] App installs and uninstalls cleanly
[ ] GDPR webhooks implemented (mandatory for App Store)
DATA LAYER
[ ] PostgreSQL database provisioned (postgres16 container)
[ ] Prisma schema deployed (stores, rules, products, sync_logs)
[ ] Product import pipeline (paginated Shopify API fetch)
[ ] Webhook handlers (products/create, products/update, products/delete)
RULES ENGINE
[ ] Category-to-priority mapping configurable
[ ] Tag modifier rules configurable
[ ] Manual override per product
[ ] Score calculation pipeline (hierarchy: manual > tag > seasonal > category)
SYNC PIPELINE
[ ] Google Sheets API integration
[ ] Automated Sheet generation with correct column structure
[ ] Sheet sharing (public viewer access)
[ ] Sync status tracking in database
USER INTERFACE
[ ] Dashboard: priority distribution, sync status, recent activity
[ ] Product list: sortable, filterable, inline priority editing
[ ] Rules page: category mapping, tag modifiers
[ ] Settings: Google account connection, sync preferences
QUALITY
[ ] 5 beta testers actively using the app
[ ] Zero critical bugs in production
[ ] < 2 second page load times
[ ] Error logging and alerting functional
Technical Targets
| Component | Target | Measurement |
|---|---|---|
| API response time | < 500ms (95th percentile) | Server-side logging |
| Page load time | < 2 seconds | Lighthouse performance score |
| Product import speed | 1,000 products/minute | Timed bulk import |
| Score calculation | 5,000 products in < 30 seconds | Timed batch run |
| Sheet generation | 20,000 rows in < 2 minutes | Sheets API timing |
| Uptime | 99.5% | Monitoring service |
| Error rate | < 1% of API requests | Error logging |
Phase 2 Success: Full Product
Phase 2 adds the features that differentiate AdPriority from manual feed management: seasonal automation, a configurable rules engine UI, and the new arrival boost system. This phase also expands from beta to paid customers.
Success Criteria
| # | Criterion | Metric | Target |
|---|---|---|---|
| P2-01 | Seasonal automation working | Priorities auto-adjust on season boundaries | Correct within 24 hours of season change |
| P2-02 | Seasonal calendar configurable | Merchant can define custom season dates | 4 default seasons + custom |
| P2-03 | Rules engine UI complete | Visual rule builder for category and tag rules | No code required |
| P2-04 | New arrival boost functional | Products < 14 days old auto-boosted to priority 5 | Configurable duration and target score |
| P2-05 | Bulk operations working | Merchant can select and update multiple products | 100+ products in one action |
| P2-06 | Priority preview | Merchant can see what scores would change before applying | Shows affected product count |
| P2-07 | Sync reliability | GMC labels match expected values | 98%+ accuracy on reconciliation |
| P2-08 | Paying customers | Merchants on paid Starter or Growth plans | 50+ paying customers |
| P2-09 | Customer retention | Monthly churn rate | < 8% |
| P2-10 | Customer satisfaction | App Store rating | 4.0+ stars |
Phase 2 Feature Matrix
PHASE 2 FEATURES
=================
SEASONAL AUTOMATION
+-----------------------------------------------+
| Season Calendar |
| |
| Winter: Dec 1 - Feb 28 Spring: Mar 1 - May 31
| Summer: Jun 1 - Aug 31 Fall: Sep 1 - Nov 30
| |
| Category x Season Priority Matrix: |
| |
| Winter Spring Summer Fall |
| T-Shirts 2 4 5 3 |
| Shorts 0 3 5 1 |
| Hoodies 5 3 1 5 |
| Outerwear 5 1 0 4 |
| Headwear-Caps 3 3 3 3 |
| Beanies 5 1 0 3 |
| |
| [Auto-transitions on season boundaries] |
+-----------------------------------------------+
RULES ENGINE
+-----------------------------------------------+
| Rule Builder |
| |
| IF product_type CONTAINS "Shorts" |
| AND current_season = "Summer" |
| THEN priority = 5 |
| |
| IF tag INCLUDES "DEAD50" |
| THEN priority = 0 (override) |
| |
| IF tag INCLUDES "NAME BRAND" |
| THEN priority + 1 (modifier) |
| |
| IF created_at > 14 days ago |
| THEN priority = 5 (new arrival boost) |
+-----------------------------------------------+
NEW ARRIVAL BOOST
+-----------------------------------------------+
| Configuration |
| |
| Boost duration: 14 days (configurable) |
| Boost priority: 5 (configurable) |
| Decay option: 5 -> 4 -> 3 over time |
| Override manual: No (manual always wins) |
+-----------------------------------------------+
Phase 3 Success: App Store Launch
Phase 3 takes AdPriority from a working product to a publicly available Shopify app. Success at this stage is defined by App Store approval, install velocity, and sustainable growth metrics.
Success Criteria
| # | Criterion | Metric | Target |
|---|---|---|---|
| P3-01 | App Store approved | Passes Shopify app review | First submission or with minor revisions |
| P3-02 | App Store listing live | Published and discoverable | Listed under Google Ads / Marketing categories |
| P3-03 | Install velocity | New installs in first 90 days | 100+ installs |
| P3-04 | Conversion to paid | Free trial to paid conversion | 20%+ |
| P3-05 | Monthly churn rate | Percentage of customers canceling | < 5% |
| P3-06 | App Store rating | Average review score | 4.5+ stars |
| P3-07 | Review count | Number of published reviews | 10+ in first 90 days |
| P3-08 | Support response time | Time to first response on support tickets | < 4 hours business hours |
| P3-09 | Zero critical incidents | No data loss, no incorrect label sync | Zero incidents |
| P3-10 | Revenue milestone | Monthly recurring revenue | $5,000+ MRR |
App Store Requirements Checklist
Shopify has specific requirements for app approval. Meeting these is a hard gate for Phase 3 success.
SHOPIFY APP STORE REQUIREMENTS
===============================
MANDATORY (will not approve without these)
[ ] OAuth 2.0 authentication (no API keys)
[ ] GDPR webhooks: customers/data_request, customers/redact, shop/redact
[ ] App uninstall webhook handled (cleanup user data)
[ ] Embedded app experience (App Bridge + Polaris)
[ ] Session token authentication (not cookie-based)
[ ] HTTPS everywhere
[ ] Privacy policy URL
[ ] Clear value proposition in listing
QUALITY REQUIREMENTS
[ ] No broken links or dead pages
[ ] Responsive design (works on all screen sizes)
[ ] Loading states for async operations
[ ] Error handling with user-friendly messages
[ ] Onboarding flow for new installs
LISTING REQUIREMENTS
[ ] App name (AdPriority)
[ ] Tagline (< 80 characters)
[ ] Detailed description
[ ] Screenshots (minimum 3)
[ ] Demo video (recommended)
[ ] Pricing displayed clearly
[ ] Support contact information
[ ] Category selection
Key Metrics Dashboard
These are the ongoing metrics that define AdPriority’s health and growth trajectory across all phases.
Business Metrics
| Metric | Phase 0 | Phase 1 | Phase 2 | Phase 3 | Measurement |
|---|---|---|---|---|---|
| Paying customers | 0 | 0-5 (beta) | 50+ | 150+ | Billing system |
| MRR | $0 | $0 | $3,000+ | $10,000+ | Stripe dashboard |
| ARR | $0 | $0 | $36,000+ | $120,000+ | Calculated |
| ARPU (avg revenue per user) | – | – | $60/mo | $67/mo | MRR / customers |
| Monthly churn | – | – | < 8% | < 5% | Cancellation tracking |
| CAC (customer acquisition cost) | – | – | < $50 | < $40 | Marketing spend / new customers |
| LTV (lifetime value) | – | – | $750+ | $1,340+ | ARPU / churn rate |
| LTV:CAC ratio | – | – | > 10:1 | > 30:1 | Calculated |
| Trial conversion rate | – | – | 15%+ | 20%+ | Trials / paid |
| Net Promoter Score | – | – | 30+ | 50+ | Customer survey |
Product Metrics
| Metric | Phase 0 | Phase 1 | Phase 2 | Phase 3 | Measurement |
|---|---|---|---|---|---|
| Products scored | 2,425 | 25,000+ | 250,000+ | 1,000,000+ | Database count |
| Sync success rate | 100% | 95%+ | 98%+ | 99%+ | Sync logs |
| Score calculation time | Manual | < 30s/5K | < 30s/5K | < 30s/5K | Performance logs |
| API uptime | – | 99.5% | 99.9% | 99.9% | Monitoring |
| API response time (p95) | – | < 500ms | < 500ms | < 300ms | APM dashboard |
| Webhook processing time | – | < 5s | < 3s | < 2s | Event logs |
Customer Impact Metrics
| Metric | Target | Measurement Method |
|---|---|---|
| ROAS improvement | 15-30% within 30 days of setup | Before/after comparison in Google Ads |
| Time saved | 4+ hours per season change | Customer survey |
| Products correctly labeled | 98%+ accuracy | GMC reconciliation |
| Setup time | < 30 minutes to first sync | Onboarding funnel tracking |
| Time to value | < 24 hours (labels in GMC) | First sync timestamp |
Validation Milestones Already Achieved
Before any code was written for the SaaS platform, the research phase validated several critical technical assumptions. These milestones de-risk the implementation by confirming that the core pipeline works with real data.
Milestone 1: GMC Product ID Format Verified
Date: 2026-02-10 Status: ACHIEVED
The Shopify-to-GMC product ID format was confirmed by analyzing a live GMC export of 124,060 products from the Nexus Clothing account.
VERIFIED ID FORMAT
==================
Format: shopify_US_{productId}_{variantId}
Example: shopify_US_8779355160808_46050142748904
Components:
- Prefix: "shopify_US_" (constant for all US Shopify stores)
- Product ID: 13-digit Shopify product ID
- Separator: "_"
- Variant ID: 14-digit Shopify variant ID
Verification:
- Source: GMC TSV export (124,060 rows)
- All IDs follow this format consistently
- All IDs are variant-level (no product-only IDs found)
- Country code is "US" for all Nexus products
Why this matters: The supplemental feed must use IDs that exactly match GMC’s primary feed. An incorrect format would cause zero products to match. This was the single highest-risk technical assumption.
Milestone 2: All 5 Custom Labels Available
Date: 2026-02-10 Status: ACHIEVED
Analysis of the GMC product export confirmed that all five custom label slots are effectively available for AdPriority use.
| Label | Current State | Products Using | Available for AdPriority |
|---|---|---|---|
custom_label_0 | “Argonaut Nations - Converting” on 7 products | 7 of 124,060 (0.006%) | Yes (safe to overwrite) |
custom_label_1 | Empty | 0 | Yes |
custom_label_2 | Empty | 0 | Yes |
custom_label_3 | Empty | 0 | Yes |
custom_label_4 | Empty | 0 | Yes |
Why this matters: If custom labels were already in use for other purposes (e.g., another app or manual feed rules), AdPriority would need to share or negotiate label slots. Having all 5 available means the full label schema can be implemented without conflict.
Milestone 3: Supplemental Feed Pipeline Confirmed
Date: 2026-02-10 Status: ACHIEVED
A test supplemental feed of 10 real Nexus products was created as a Google Sheet, connected to GMC, and processed successfully.
SUPPLEMENTAL FEED TEST RESULTS
===============================
Test Parameters:
- Feed type: Google Sheets
- Format: 6 columns (id + 5 custom labels)
- Sample size: 10 active Nexus products
- Data sources: Content API - US, Content API - Local, Local Feed Partnership
Results:
+----------------------------------+-----------+
| Metric | Result |
+----------------------------------+-----------+
| Total products in feed | 10 |
| Products matched in GMC | 10 (100%) |
| Attribute names recognized | All |
| Processing errors | None |
| Time to process | < 1 hour |
| Feed accepted by GMC | Immediate |
+----------------------------------+-----------+
Sample Products Tested:
+-----------------------------------+----------+--------+----------------------+
| Product | Priority | Season | Category |
+-----------------------------------+----------+--------+----------------------+
| New Era Colts Knit 2015 | 4 | winter | headwear-cold-weather |
| New Era Yankees 59FIFTY | 4 | winter | headwear-caps |
| G3 Patriots Hoodie | 0 | winter | hoodies-sweatshirts |
| Rebel Minds Puffer Jacket | 5 | winter | outerwear-heavy |
+-----------------------------------+----------+--------+----------------------+
Conclusion: Pipeline is PRODUCTION-READY for MVP deployment.
Why this matters: This test confirmed the entire data flow from Google Sheet to GMC custom labels. The 100% match rate with zero errors validates that the ID format, column naming, and sheet sharing approach all work correctly.
Milestone 4: Nexus Catalog Analyzed
Date: 2026-02-10 Status: ACHIEVED
The complete Nexus Clothing catalog was pulled from the live Shopify Admin API, providing the data needed to design the category mapping and rules engine.
NEXUS CATALOG ANALYSIS
======================
Overall:
- Total products: 5,582
- Active products: 2,425
- Archived products: 3,121
- Draft products: 36
- GMC variants: 124,060
Product Types:
- Unique types: 90
- Grouped into: 20 category groups
- Top type: Men-Tops-T-Shirts (1,101 products, 19.7%)
- Naming convention: {Gender}-{Department}-{SubCategory}-{Detail}
Vendors:
- Unique vendors: 175
- Top vendor: New Era (576 products)
- Name brands: 2,328 products tagged "NAME BRAND"
Tags:
- Unique tags: 2,522
- Key priority tags: archived (3,130), DEAD50 (615),
NAME BRAND (2,328), Sale (1,471),
in-stock (930), warning_inv_1 (3,619)
Seasonal Distribution:
- Year-round products: ~60% (jeans, headwear-caps, underwear, accessories)
- Seasonal products: ~40% (shorts, outerwear, hoodies, beanies, sandals)
Why this matters: The catalog analysis informed the design of the 20 category groups, the seasonal priority matrix, and the tag modifier rules. These are the building blocks of the rules engine and have been designed from real data rather than theoretical assumptions.
Milestone 5: GMC Specifications Documented
Date: 2026-02-10 Status: ACHIEVED
All GMC custom label specifications and constraints were researched and documented.
| Specification | Value | Impact on AdPriority |
|---|---|---|
| Custom labels available | 5 (label_0 through label_4) | Full schema can be implemented |
| Max characters per label | 100 | More than sufficient for our values |
| Max unique values per label | 1,000 | AdPriority uses 6 + 4 + ~20 + 5 + 3 = ~38 values total |
| Case sensitivity | Not case-sensitive | Can use lowercase for consistency |
| Visibility to shoppers | Not visible (internal only) | No customer-facing impact |
| API update limit | 2x per day per product | Daily sync schedule is within limits |
| Google Sheets row limit | 10 million cells | ~20K rows x 6 columns = 120K cells (1.2% of limit) |
Risk Mitigation
Each phase has identified risks with planned mitigations.
Phase 0 Risks
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| ROAS does not improve | Medium | High – invalidates premise | Measure for 30 days minimum; analyze by product group not just overall |
| GMC feed processing delays | Low | Medium – delays measurement | Use manual “Update” trigger in GMC; document processing times |
| Category mappings inaccurate | Medium | Medium – wrong priorities assigned | Validate with store owner before full deployment |
Phase 1 Risks
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Shopify API rate limits | Medium | Medium – slow imports | Implement pagination, respect rate limit headers, use bulk operations |
| Google Sheets API quotas | Low | Medium – sync failures | Monitor quota usage; implement retry with exponential backoff |
| Beta testers unresponsive | Medium | Medium – limited feedback | Recruit 8-10 to ensure 5 active; offer extended free access |
Phase 2 Risks
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Seasonal transitions cause errors | Medium | High – wrong priorities live | Implement preview mode; allow manual season override; monitor for 48 hours after transition |
| Rules engine too complex for users | Medium | High – adoption friction | Start with pre-built templates; add complexity gradually |
| Churn exceeds 10% | Medium | High – unsustainable growth | Implement onboarding flow; add in-app guidance; monthly check-in emails |
Phase 3 Risks
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| App Store rejection | Medium | High – blocks launch | Study requirements in detail; test against all criteria before submission |
| Low install velocity | Medium | Medium – slow growth | Invest in App Store SEO; build case studies; explore paid acquisition |
| Competitor copies approach | Low | Medium – reduced differentiation | Move fast; build brand; add features competitors cannot easily replicate |
Summary
Success for AdPriority is defined in concrete, measurable terms at each phase:
-
Phase 0 proves the concept works with a real store and real Google Ads campaigns. The supplemental feed pipeline is already validated (10/10 products matched). Remaining work is full catalog deployment, PMAX restructuring, and ROAS measurement.
-
Phase 1 proves the concept can be delivered as a self-service Shopify app. Success means 5 beta testers are using the app with working OAuth, product import, rules engine, and automated Google Sheets sync.
-
Phase 2 proves the product differentiators work at scale. Seasonal automation, the rules engine UI, and new arrival boost must function reliably with 50+ paying customers and less than 8% monthly churn.
-
Phase 3 proves the product can grow through the Shopify App Store. 100+ installs in 90 days, a 4.5+ star rating, less than 5% churn, and $5,000+ MRR define a successful launch.
The research phase has already de-risked the three highest-uncertainty technical questions: the GMC product ID format works, all 5 custom labels are available, and the supplemental feed pipeline processes correctly. The remaining work is execution.