Back to blog
featurenpsreferralshopifyv2-0-0-20

AliShopping Shopify NPS + Referral Flywheel — Feature Deep Dive

AliShopping Tools TeamApril 23, 20265 min read

AliShopping Shopify NPS + Referral Flywheel — Feature Deep Dive

v2.0.0.20 shipped with a new prompt that appears for Shopify users meeting specific criteria. It asks "How likely are you to recommend AliShopping to another Shopify seller?" on a 0-10 scale. The response routes to one of three flows:

  • Promoters (9-10): One-click share CTA generating a Chrome Web Store link with embedded referrer ID
  • Passives (7-8): Inline textarea asking "What would make it a 10 for you?"
  • Detractors (0-6): Inline textarea asking "What's the #1 blocker?"

This is the measurement layer the extension was missing. Until v20, feedback from Shopify users was collected through nothing — the ReviewPrompt component was not even mounted on Shopify pages.

Why Segment-Aware

The prompt only fires for three of the five MECE store categories:

  • C_DROPSHIPPER (dropshipping operations)
  • E_HYBRID (hybrid own-brand + dropshipping operations)
  • D_POD (print-on-demand operations)
  • A_BRAND (real DTC brands — rarely refer peers, different pain points)
  • B_RETAILER (retailers — different business model, different needs)

Segment filtering matters because feedback from a dropshipper about "I need faster AliExpress import" is different from a brand's "I need better store analytics for my VC board report." Mixing these signals pollutes the product roadmap.

The classify-store.ts MECE classification runs on every Shopify page load, so the segment is known before the prompt renders. The segment filter adds zero latency to the user experience.

The 6 Eligibility Gates

The prompt only appears if ALL six conditions are true:

  1. Platform: Current page is a Shopify storefront (not AliExpress, not TikTok)
  2. Interaction count: shopifyInteractionCount >= 3 (tracked via _spFeedbackPrompt storage key, incremented on cross-sell open and Store Compare open)
  3. Install age: 2+ days since install (via _affInstalledAt set by background.ts on chrome.runtime.onInstalled)
  4. Segment: Detected store category is in {C_DROPSHIPPER, E_HYBRID, D_POD}
  5. Not previously submitted: submittedAt in _spFeedbackPrompt is null
  6. Not dismissed recently: suppressUntil timestamp in _spFeedbackPrompt is past (14-day suppression on dismiss)

Six gates is deliberate over-engineering. Prompts are annoying. The worst product outcome would be showing a feedback prompt to a user who installed 10 minutes ago and hasn't explored features yet. Over-gated prompts feel respectful. Under-gated prompts feel spammy.

The Promoter Flow — Why Share, Not Review

Traditional SaaS feedback loops route promoters to "leave us a review." AliShopping routes promoters to "share with a friend" instead. Three reasons:

  1. Reviews are one-shot per user. Once someone leaves a CWS review, the surface is exhausted for that user forever.
  2. Shares compound. A single share to a relevant network contact can produce multiple installs, and the referred user is themselves a future promoter candidate.
  3. CWS review conversion is already handled elsewhere. The ReviewPrompt component (now also mounted on Shopify per v20) handles the review ask with different gates. The NPS prompt focuses specifically on peer-to-peer referral.

The share CTA generates a URL of the form:

https://chromewebstore.google.com/detail/agiaehdeifaihlndhnhcmopjpjijnfap?utm_source=referral&utm_medium=shopify_nps&utm_campaign=promoter_share&ref={installId}

The ref parameter carries the promoter's install ID. When a referred user installs the extension, the welcome page (hypothetically, in a future version) could attribute the install back to the referring promoter. The attribution infrastructure is not yet live — that is v21 work.

The Passive/Detractor Flow — Why Textarea, Not Tally

The passive/detractor branches ask for open-text feedback. Early prototype routed this to a Tally form (third-party survey service). The PO explicitly rejected this approach because Tally is a third-party dependency that splits data across two systems.

The final design routes feedback via chrome.runtime.sendMessage with type: 'TRACK_EVENT' and event name shopify_feedback_text. The payload includes:

{
  event: 'shopify_feedback_text',
  payload: {
    score: 5,                 // The NPS score given
    storeCategory: 'C_DROPSHIPPER',
    text: 'The verdict feels slow on some products',
    installId: 'abc-123-def'
  }
}

The background.ts handleTrackEventBridge() function routes this to the existing BackendClient.trackEvent() which POSTs to /api/v1/tracking/event with HMAC signature. No third-party dependency. All feedback data lives in the same backend as every other tracking event.

The 1000-character limit on the textarea prevents abuse. The 1-hour cooldown per install ID prevents rapid-fire spam.

The TRACK_EVENT Bridge Fix — Invisible But Critical

A separate but related fix in v20 addressed a months-old bug: the TRACK_EVENT message type was being sent by four different components but never handled by background.ts. Those events silently disappeared for months.

Affected components:

  • ReviewPrompt.vue — all review prompt analytics lost
  • cross-tab-attribution.ts — Shopify-to-AliExpress navigation tracking lost
  • find-on-aliexpress.ts — cross-sell click events lost
  • ShopifyFeedbackPrompt.vue — new NPS events would have been lost without the fix

The bridge fix adds a handler in background.ts that intercepts TRACK_EVENT messages, extracts the event name and payload, and routes to the existing provider.trackEvent() method with proper payload shape normalization. From v20 onward, all four components report telemetry correctly.

Historical data before v20 is lost. Going forward, the measurement is accurate.

Why This Matters Long-Term

The NPS + Referral flywheel is not a growth feature. It is a measurement feature that enables growth decisions.

Without NPS signal:

  • Roadmap prioritization is gut-based
  • Retention is invisible (we cannot see if users are satisfied or quietly leaving)
  • Referral acquisition is impossible to distinguish from organic discovery

With NPS signal flowing to backend:

  • Roadmap prioritization is data-informed
  • Retention signals cluster by segment (dropshipper complaints vs hybrid brand complaints)
  • Referral attribution becomes possible (once the ref= query parameter propagation lands in v21)

Install and Help Calibrate

The NPS prompt only appears after you have genuinely used the extension on Shopify stores. If you install today, it will appear sometime in the next few days as you actually use it.

Install AliShopping Tools free — one Chrome permission, no account, no paywall. Run Shopify research naturally over a few days. When the NPS prompt appears, any score and any feedback — it all lands in front of us.

The honest feedback is what makes v21 useful.

Ready to find winning products?

Try AliShopping Tools — 15 free AI tools for product research.

More from the blog