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
Legal Documents
Two legal documents must be hosted at publicly accessible URLs before submission.
| Document | URL | Content |
|---|---|---|
| Privacy Policy | https://adpriority.com/privacy | Data 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 Service | https://adpriority.com/terms | Service 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:
| Asset | Specification | Notes |
|---|---|---|
| App icon | 1200x1200px PNG | Clean 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 |
| Screenshots | 3-5 images, 1600x900px each | Dashboard, Products list, Rules engine, Seasonal calendar, Settings |
| Description | 100-500 words | SEO-optimized, covers problem/solution/features |
| Key benefits | 3-5 bullet points | Value propositions for scanning |
| Demo video | 60-90 seconds (optional but recommended) | Walkthrough of install to first sync |
| Support URL | https://adpriority.com/support | Help center or contact form |
| Category | Marketing > Advertising | Primary 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 Starter tier.
Start your 14-day free trial today.
Screenshots
Each screenshot should demonstrate a specific value proposition:
| # | Screen | Caption | What to Show |
|---|---|---|---|
| 1 | Dashboard | “See your priority distribution at a glance” | Pie chart, sync status, quick stats |
| 2 | Products | “Every product scored automatically” | Product list with priority badges, filters |
| 3 | Product Detail | “Understand exactly why each score was assigned” | Priority breakdown card showing base + modifiers |
| 4 | Rules | “Configure rules that match your business” | Rule list with pattern matching |
| 5 | Seasons | “Priorities adjust automatically with the seasons” | Calendar view and category-season matrix |
Demo Video
A 60-90 second video covering:
- Opening: “Stop wasting ad spend” hook (5 seconds)
- Problem statement: Manual custom label management (10 seconds)
- Install flow: Click install, products import automatically (15 seconds)
- Dashboard: Show priority distribution (10 seconds)
- Products: Browse products with priority badges (10 seconds)
- Rules: Create a category rule (15 seconds)
- Sync: Watch labels push to Google Sheet (10 seconds)
- 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:
| Requirement | Status | Notes |
|---|---|---|
| HTTPS everywhere | Required | Cloudflare Tunnel provides TLS |
| OAuth implementation | Required | Token exchange flow, no implicit grants |
| Session token validation | Required | JWT verification with client secret |
| Webhook HMAC verification | Required | All webhook endpoints verify signature |
| GDPR webhooks implemented | Required | 3 mandatory endpoints |
| Polaris UI components | Required | All UI built with Polaris v13 |
| Responsive design | Required | Polaris handles automatically |
| Accessibility (WCAG 2.0 AA) | Required | Polaris provides built-in a11y |
| Loading states | Required | Spinner on every async operation |
| Empty states | Required | Helpful messaging when no data exists |
| Error handling | Required | User-friendly error messages |
| Scope justification | Required | Documented reason for each OAuth scope |
| No test/debug data | Required | Clean submission with no placeholder content |
| Privacy policy | Required | Publicly hosted URL |
| Terms of service | Required | Publicly hosted URL |
| Support contact | Required | Email or help center URL |
Common Rejection Reasons
| Reason | How to Avoid |
|---|---|
| Missing GDPR webhooks | Implement all three, even as no-ops for non-PII apps |
| Requesting unnecessary scopes | Only request read_products, write_products, read_inventory |
| UI not using Polaris | Use only Polaris components, no custom CSS that overrides Polaris |
| No loading states | Add Spinner to every data fetch, SkeletonPage on initial load |
| No empty states | Add EmptyState with illustration and CTA for every empty list |
| Broken OAuth flow | Test with multiple development stores, handle edge cases |
| Missing error handling | Catch all API errors, show Banner with tone="critical" |
| App crashes on install | Test fresh install on a store with no products, with 50K products |
| Billing not working | Test appSubscriptionCreate in test mode before submission |
| Data not deleted on uninstall | app/uninstalled webhook must cascade delete all store data |
Resubmission Strategy
If rejected:
- Read the rejection feedback carefully (Shopify is specific)
- Fix every cited issue (do not submit with partial fixes)
- Test the fixes thoroughly
- Add a note in the resubmission explaining what was changed
- 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:
| Keyword | Search Volume (est.) | Competition |
|---|---|---|
| google ads | High | High |
| custom labels | Medium | Low |
| performance max | Medium | Medium |
| google shopping | High | High |
| product priority | Low | Very Low |
| google merchant center | Medium | Medium |
| pmax optimization | Low | Low |
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
| Channel | Action | Timeline |
|---|---|---|
| Shopify Community forums | Post in “Apps” section with use case story | Launch day |
| Reddit r/shopify | Share experience with priority-based PMAX results | Launch week |
| Reddit r/PPC | Post about custom label automation strategy | Launch week |
| Twitter/X | Thread: “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 users | Announce launch, ask for App Store review | Launch day |
| YouTube | Post the demo video as a tutorial | Launch 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:
| Plan | Price | Trial | Products | Features |
|---|---|---|---|---|
| Starter | $29/mo | 14 days | 500 | Manual scoring, GMC sync, basic labels |
| Growth | $79/mo | 14 days | Unlimited | Seasonal auto, rules engine, tag modifiers, new arrival boost |
| Pro | $199/mo | 14 days | Unlimited | Google Ads API, AI suggestions, ROAS tracking, performance dashboard |
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 Growth"
price: $79.00
interval: EVERY_30_DAYS
trialDays: 0 (already in trial)
returnUrl: /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 store.plan_tier in database
|
v
12. Enable tier features
Plan Enforcement
| Feature | Starter | Growth | Pro |
|---|---|---|---|
| Product import | Capped at 500 | Unlimited | Unlimited |
| Seasonal automation | Blocked (show upgrade prompt) | Enabled | Enabled |
| Rules engine | Basic (3 rules max) | Full | Full |
| Tag modifiers | Blocked | Enabled | Enabled |
| Google Ads connection | Blocked | Blocked | Enabled |
| ROAS tracking | Blocked | Blocked | Enabled |
When a merchant on the Starter tier tries to access a Growth 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
| Webhook | Action |
|---|---|
app_subscriptions/update | Sync plan status changes (activated, cancelled, frozen) |
app/uninstalled | Cancel subscription, initiate data retention countdown |
Post-Launch Priorities
After App Store approval, the focus shifts to:
- Monitor installs: Track daily install rate, conversion from trial to paid
- Respond to reviews: Reply to every App Store review within 24 hours
- Support queue: Handle incoming support emails within 24-48 hours
- Bug fixes: Rapid response to any issues reported by early users
- Gather testimonials: Ask satisfied merchants for case studies
- Iterate on onboarding: Reduce time-to-value based on user behavior data
Target Metrics (First 90 Days)
| Metric | Target |
|---|---|
| Installs | 100+ |
| Trial-to-paid conversion | 20%+ |
| Monthly churn | < 5% |
| App Store rating | 4.0+ stars |
| Support response time | < 24 hours |
| NPS score | > 40 |