Chapter 23: Phase 3 - App Store Launch

Goal

Submit AdPriority to the Shopify App Store, pass the review process, and launch publicly. Phase 3 focuses on meeting all Shopify requirements, preparing marketing materials, and establishing the billing infrastructure.


Shopify App Store Submission Requirements

Two legal documents must be hosted at publicly accessible URLs before submission.

DocumentURLContent
Privacy Policyhttps://adpriority.com/privacyData collected (product data only, no customer PII), data usage (priority scoring and GMC sync), data sharing (custom labels to GMC only), data retention (deleted within 30 days of uninstall), user rights (export/deletion via GDPR webhooks)
Terms of Servicehttps://adpriority.com/termsService description, acceptable use, billing terms, limitation of liability, termination clause, data ownership (merchant owns their data)

App Listing

The listing is the storefront that merchants see when discovering AdPriority.

Required assets:

AssetSpecificationNotes
App icon1200x1200px PNGClean design, no text, recognizable at small sizes
App name“AdPriority” (30 characters max)Must be unique in App Store
Tagline“Automate Google Ads product priorities with smart scoring” (70 chars max)Primary search hook
Screenshots3-5 images, 1600x900px eachDashboard, Products list, Rules engine, Seasonal calendar, Settings
Description100-500 wordsSEO-optimized, covers problem/solution/features
Key benefits3-5 bullet pointsValue propositions for scanning
Demo video60-90 seconds (optional but recommended)Walkthrough of install to first sync
Support URLhttps://adpriority.com/supportHelp center or contact form
CategoryMarketing > AdvertisingPrimary category for App Store placement

Listing description (draft):

AdPriority: Smart Product Scoring for Google Ads

Stop wasting ad spend on the wrong products. AdPriority automatically
scores your products from 0-5 based on category, season, inventory,
and brand, then syncs those scores as custom labels to Google Merchant
Center. Use these labels to build focused Performance Max campaigns
that put your budget where it matters.

KEY FEATURES:

- Automatic 0-5 priority scoring based on configurable rules
- Seasonal calendar that adjusts priorities when seasons change
- New arrival boost gives fresh products maximum visibility
- One-click sync to Google Merchant Center via supplemental feed
- Visual dashboard showing priority distribution and sync health

HOW IT WORKS:

1. Install and import your products (automatic)
2. Configure category rules and seasonal priorities
3. AdPriority calculates a priority score for every product
4. Scores sync to Google Merchant Center as custom labels
5. Segment your PMAX campaigns by priority for smarter budgets

Works with any Shopify store running Google Ads. No Google API
setup required for the AdPriority tier.

Start your 14-day free trial today.

Screenshots

Each screenshot should demonstrate a specific value proposition:

#ScreenCaptionWhat to Show
1Dashboard“See your priority distribution at a glance”Pie chart, sync status, quick stats
2Products“Every product scored automatically”Product list with priority badges, filters
3Product Detail“Understand exactly why each score was assigned”Priority breakdown card showing base + modifiers
4Rules“Configure rules that match your business”Rule list with pattern matching
5Seasons“Priorities adjust automatically with the seasons”Calendar view and category-season matrix

Demo Video

A 60-90 second video covering:

  1. Opening: “Stop wasting ad spend” hook (5 seconds)
  2. Problem statement: Manual custom label management (10 seconds)
  3. Install flow: Click install, products import automatically (15 seconds)
  4. Dashboard: Show priority distribution (10 seconds)
  5. Products: Browse products with priority badges (10 seconds)
  6. Rules: Create a category rule (15 seconds)
  7. Sync: Watch labels push to Google Sheet (10 seconds)
  8. Closing: “Start your free trial” CTA (5 seconds)

Review Process

Timeline

Shopify App Store review typically takes 5-10 business days from submission to decision. If the app is rejected, the team provides specific feedback, and resubmission restarts the review clock.

Review Checklist

Shopify reviews the app against these criteria:

RequirementStatusNotes
HTTPS everywhereRequiredCloudflare Tunnel provides TLS
OAuth implementationRequiredToken exchange flow, no implicit grants
Session token validationRequiredJWT verification with client secret
Webhook HMAC verificationRequiredAll webhook endpoints verify signature
GDPR webhooks implementedRequired3 mandatory endpoints
Polaris UI componentsRequiredAll UI built with Polaris v13
Responsive designRequiredPolaris handles automatically
Accessibility (WCAG 2.0 AA)RequiredPolaris provides built-in a11y
Loading statesRequiredSpinner on every async operation
Empty statesRequiredHelpful messaging when no data exists
Error handlingRequiredUser-friendly error messages
Scope justificationRequiredDocumented reason for each OAuth scope
No test/debug dataRequiredClean submission with no placeholder content
Privacy policyRequiredPublicly hosted URL
Terms of serviceRequiredPublicly hosted URL
Support contactRequiredEmail or help center URL

Common Rejection Reasons

ReasonHow to Avoid
Missing GDPR webhooksImplement all three, even as no-ops for non-PII apps
Requesting unnecessary scopesOnly request read_products, write_products, read_inventory
UI not using PolarisUse only Polaris components, no custom CSS that overrides Polaris
No loading statesAdd Spinner to every data fetch, SkeletonPage on initial load
No empty statesAdd EmptyState with illustration and CTA for every empty list
Broken OAuth flowTest with multiple development stores, handle edge cases
Missing error handlingCatch all API errors, show Banner with tone="critical"
App crashes on installTest fresh install on a store with no products, with 50K products
Billing not workingTest appSubscriptionCreate in test mode before submission
Data not deleted on uninstallapp/uninstalled webhook must cascade delete all store data

Resubmission Strategy

If rejected:

  1. Read the rejection feedback carefully (Shopify is specific)
  2. Fix every cited issue (do not submit with partial fixes)
  3. Test the fixes thoroughly
  4. Add a note in the resubmission explaining what was changed
  5. Resubmit (review clock resets to 5-10 business days)

Marketing

App Store SEO

Shopify’s App Store search uses the app name, tagline, and description for ranking. Target keywords:

KeywordSearch Volume (est.)Competition
google adsHighHigh
custom labelsMediumLow
performance maxMediumMedium
google shoppingHighHigh
product priorityLowVery Low
google merchant centerMediumMedium
pmax optimizationLowLow

SEO strategy: Include primary keywords in the tagline (“Google Ads product priorities”) and secondary keywords in the description. The unique terms “product priority” and “priority scoring” have very low competition because no existing app targets this concept.

Launch Campaign

ChannelActionTimeline
Shopify Community forumsPost in “Apps” section with use case storyLaunch day
Reddit r/shopifyShare experience with priority-based PMAX resultsLaunch week
Reddit r/PPCPost about custom label automation strategyLaunch week
Twitter/XThread: “How we improved ROAS by X% with product scoring”Launch day
Blog post“Why Your PMAX Campaigns Need Product Priorities”Launch week
Email to beta usersAnnounce launch, ask for App Store reviewLaunch day
YouTubePost the demo video as a tutorialLaunch week

Demo Video Distribution

The demo video serves double duty as a marketing asset and an App Store listing video:

  • Upload to YouTube (public, SEO-optimized title and description)
  • Embed on the App Store listing
  • Embed on the marketing website landing page
  • Share in forum posts and social media

Pricing Setup: Shopify Billing API

Subscription Plans

AdPriority uses Shopify’s Billing API for recurring charges. Merchants are charged through their Shopify bill, which eliminates payment friction.

Plan configuration:

PlanPriceTrialProductsFeatures
AdPriority$49/mo14 daysUp to 5,000Priority scoring, GMC sync, basic rules, tag modifiers, new arrival boost
AdPriority Pro$149/mo14 daysUnlimitedSeasonal automation, advanced rules engine, Google Ads API, ROAS tracking, audit log (365 days), PMAX onboarding wizard

Billing Flow

BILLING FLOW
============

  1. Merchant installs app (free during trial)
         |
         v
  2. 14-day trial starts automatically
         |
         v
  3. Trial expiration approaching (day 12):
     Show Banner: "Your trial ends in 2 days. Choose a plan."
         |
         v
  4. Merchant clicks "Choose Plan" on Billing page
         |
         v
  5. App creates subscription via GraphQL:
     appSubscriptionCreate(
       name: "AdPriority Pro"
       price: $149.00
       interval: EVERY_30_DAYS
       trialDays: 0  (already in trial)
       returnUrl: /api/v1/billing/callback
     )
         |
         v
  6. Shopify returns confirmationUrl
         |
         v
  7. Redirect merchant to Shopify payment confirmation
         |
         v
  8. Merchant approves charge
         |
         v
  9. Shopify redirects to returnUrl
         |
         v
  10. App verifies subscription status via GraphQL
          |
          v
  11. Update tenants.plan_tier in database
          |
          v
  12. Enable tier features

Plan Enforcement

FeatureAdPriority ($49/mo)AdPriority Pro ($149/mo)
Product importUp to 5,000Unlimited
Priority scoringEnabledEnabled
Basic rules (10 max)EnabledEnabled
Tag modifiersEnabledEnabled
New arrival boostEnabledEnabled
Seasonal automationBlocked (show upgrade prompt)Enabled
Advanced rules (unlimited)BlockedEnabled
Google Ads connectionBlockedEnabled
ROAS trackingBlockedEnabled
Audit log retention90 days365 days
PMAX onboarding wizardBlockedEnabled

When a merchant on the AdPriority tier tries to access a Pro feature, the UI shows a Polaris Banner with an upgrade call-to-action rather than hiding the feature entirely. This educates merchants about available features and drives upgrades.

Billing Webhooks

WebhookAction
app_subscriptions/updateSync plan status changes (activated, cancelled, frozen)
app/uninstalledCancel subscription, initiate data retention countdown

Addressable Market

The addressable market for AdPriority is estimated at 25,000-35,000 Shopify stores that actively run Google Ads Performance Max campaigns. This estimate is based on:

FactorEstimate
Total Shopify stores~4.4 million
Stores using Google Ads~200,000-300,000
Stores running PMAX campaigns~50,000-100,000
Stores with 100+ products (minimum viable)25,000-35,000

At a 1% penetration rate, that represents 250-350 paying customers. At an average of $99/mo (blended across both tiers), that is $25K-$35K MRR.

PMAX Onboarding Wizard (Pro Tier)

AdPriority Pro includes a guided PMAX onboarding wizard that helps merchants restructure their Google Ads campaigns to use priority-based segmentation. This is critical because without campaign restructuring, the custom labels have no effect on ad spend.

The wizard is documented in detail in Chapter 18 (Screen 8: PMAX Onboarding Wizard).

Staging Environment

Before App Store submission, a staging environment must be deployed and validated:

ComponentStaging Config
Backendadpriority-staging container, port 3020
Admin UIadpriority-staging-ui container, port 3021
Databaseadpriority_staging_db (separate database in postgres16)
RedisShared Redis instance, key prefix staging:
Tunnelstaging-adpriority.nexusclothing.synology.me

All App Store review testing should be performed against the staging environment first.

DR Drill

Before launch, conduct a disaster recovery drill to validate:

  1. Database restore: Restore adpriority_db from a pg_dump backup
  2. Container rebuild: Rebuild and redeploy all containers from scratch
  3. Feed recovery: Verify Google Sheet supplemental feed resumes after outage
  4. Webhook replay: Confirm Shopify webhooks are reprocessed after downtime

Document the results and time-to-recovery for each scenario.

Cloud Migration Triggers

AdPriority launches on the Synology NAS (SLA target: 99.0%). If any of these triggers are hit, begin cloud migration planning:

TriggerThresholdAction
Tenant count> 200Evaluate cloud hosting options
Monthly revenue> $10K MRRBudget available for cloud infra
Uptime violations< 99.0% for 2 consecutive monthsMigrate to cloud for 99.9% SLA
Response timep95 > 2s sustainedScale horizontally on cloud
NAS hardware failureAnyEmergency migration to cloud

Post-Launch Priorities

After App Store approval, the focus shifts to:

  1. Monitor installs: Track daily install rate, conversion from trial to paid
  2. Respond to reviews: Reply to every App Store review within 24 hours
  3. Support queue: Handle incoming support emails within 24-48 hours
  4. Bug fixes: Rapid response to any issues reported by early users
  5. Gather testimonials: Ask satisfied merchants for case studies
  6. Iterate on onboarding: Reduce time-to-value based on user behavior data

Target Metrics (First 90 Days)

MetricTarget
Installs100+
Trial-to-paid conversion20%+
Monthly churn< 5%
App Store rating4.0+ stars
Support response time< 24 hours
NPS score> 40