Each criterion below includes a test you can run yourself during a trial — no vendor cooperation required — and the red flags that should cost an app points on your scorecard.
1
True cost at YOUR order volume
Weight: 25% of total score
The true cost of a Shopify loyalty app is what you pay at your order volume with the features you need enabled — not the entry price on the pricing page.
Loyalty pricing in August 2026 uses four distinct models, and they produce very different bills at the same order volume. Smile.io starts free with a $15/mo entry tier, but VIP tiers require the $199/mo plan. Rivo is usage-based: $15/mo at low volume, climbing to $499/mo as orders grow. Yotpo charges per order — $0.08 to $0.20 each — which reads cheap at 500 orders/mo ($40–$100) and expensive at 5,000 ($400–$1,000, and above that it goes quote-only). LoyaltyLion publishes no prices at all; every paid tier is a custom quote. Anchor is flat: $14.99/mo regardless of order count.
Model your bill at three volumes: current orders, 2x current, and 5x current. A plan that costs $15 today and $499 at 5x is a different product from one that costs $15 at both. The VIP-tier gate is the most common trap — merchants budget for the entry tier, launch, then discover the tier feature they planned the program around sits two plans up.
scienceHow to test it yourself
Build a three-column spreadsheet (current volume, 2x, 5x) and price every shortlisted app at each column with VIP tiers, referrals, and your integrations enabled. Ask each vendor for the exact plan name that includes every feature on your list — in writing.
flagRed flags
- –The feature you are buying the app for (usually VIP tiers) is only listed on a plan 10x the entry price.
- –Per-order or usage-based pricing with no published cap — your bill scales with your success.
- –Quote-only pricing for a store under $5M GMV. Quotes exist to price-discriminate; small stores rarely win that negotiation.
- –"Contact us" where a number should be, on more than one tier.
2
Storefront performance cost
Weight: 20% of total score
Loyalty widget weight in the current market ranges from 14 KB to roughly 650 KB of JavaScript — a 46x spread you can measure yourself in Chrome DevTools before installing anything.
Every loyalty app injects JavaScript into your storefront, and the spread is enormous: 14 KB (Anchor) to ~650 KB (Yotpo), with most incumbents between 95 KB and 420 KB. On a mid-range Android phone, the heavy end of that range costs measurable Lighthouse mobile points through parse and execute time — typically 8–15 points between the lightest and heaviest widgets on an otherwise identical theme.
This is the one criterion where you never need to trust a vendor claim. Widget weight is directly observable on any live store running the app.
scienceHow to test it yourself
Find a live store running the app (vendor case studies list them). Open Chrome DevTools → Network → filter JS → hard-reload, and sum the transferred size of every request from the vendor domain. Repeat on your own store during the trial and compare Lighthouse mobile scores with the app embed on and off.
flagRed flags
- –The vendor publishes no bundle-size figure and the marketing page says "lightweight" without a number.
- –The widget loads more than 200 KB of JavaScript before any user interaction.
- –Multiple render-blocking requests from the vendor domain in the DevTools waterfall.
3
Admin-native vs external dashboard
Weight: 10% of total score
An admin-native loyalty app runs inside Shopify Admin with Shopify sessions and permissions; an external-dashboard app is a separate website with separate logins that your team must learn and secure.
This sounds cosmetic and is not. External dashboards mean separate credentials to manage, staff permissions that do not map to your Shopify roles, and one more place where an ex-employee login lingers. Admin-native apps inherit Shopify staff accounts and permissions automatically, and daily operations (adjusting a customer balance, checking program stats) happen where your team already works.
scienceHow to test it yourself
During the trial, complete three routine tasks — adjust a customer balance, edit an earning rule, export program data — and note whether each happens inside Shopify Admin or on an external site with a separate session.
flagRed flags
- –Separate username and password for the loyalty dashboard.
- –Staff permissions configured in the vendor dashboard rather than inherited from Shopify roles.
- –Customer data views that exist only outside Shopify Admin.
4
Multi-language coverage
Weight: 10% of total score
Shipped locales are languages the widget displays automatically; "translatable" means your team writes and maintains every string in every language yourself — the two are routinely conflated on pricing pages.
If you sell in non-English markets, ask exactly one question: how many locales ship in the box, auto-detected? The market answer in August 2026 ranges from English-only through 4 (BON), roughly 10 (Growave), to 32+ (Anchor). "Supports translation" without shipped locales means a translation-file project for your team on day one — and again after every widget update that adds strings.
scienceHow to test it yourself
Install the trial, switch your browser locale to each market language you sell in, and load the widget. Count the languages that render correctly with zero configuration. That number — not the pricing-page claim — is the shipped coverage.
flagRed flags
- –"Multi-language support" that turns out to mean a CSV of strings you translate yourself.
- –Language switching requires a paid tier or an add-on app.
- –Right-to-left languages untested or visibly broken in the widget.
5
Headless and Hydrogen support
Weight: 10% of total score
A real headless SDK ships typed methods and prebuilt components for Hydrogen, Next.js, or Remix; a JSON-only API means your team rebuilds the entire loyalty UI from raw endpoints.
Most loyalty vendors answer "yes" to the headless question because a REST API technically exists. The practical difference is 60+ hours of engineering: with a JSON-only API you rebuild points display, redemption flows, referral links, and tier logic yourself, then maintain that code through every API change. A real SDK gives you components and typed client methods and keeps that maintenance on the vendor.
Even if you are on a Liquid theme today, a storefront rebuild inside a 3-year horizon makes this criterion worth its weight — migrating loyalty apps mid-rebuild is the worst possible timing.
scienceHow to test it yourself
Ask for the SDK repository or npm package, not the API docs. Check for a quickstart that renders a points balance in under an hour, published TypeScript types, and a changelog with commits from the last 90 days.
flagRed flags
- –"Headless-ready" backed only by REST API documentation.
- –No published SDK package, or one with no commits in six months.
- –Redemption and referral flows that only work through the vendor-hosted widget.
6
Migration path in AND out
Weight: 15% of total score
Evaluate the exit before the entrance: if a loyalty app cannot export customer points balances to CSV on demand, your customers’ earned value is hostage to that vendor.
Points balances are a liability you owe your customers. Coming in, you need CSV import matched on customer email so balances from your previous app carry over. Going out — and you should check this while you are still a prospect, when the answers are honest — you need self-serve CSV export of balances, tier assignments, and referral history. Vendors that require a support ticket for exports control the timeline of your own migration.
The mechanics of switching are well understood; our migration guides cover Smile.io, Yotpo, and LoyaltyLion step by step, and a typical migration completes in one afternoon with balances preserved.
scienceHow to test it yourself
During the trial, run the export yourself: create test customers with points, then export to CSV without contacting support. Then import that same CSV back. If either direction needs a ticket, you have your answer.
flagRed flags
- –Export available only "on request" or via support ticket.
- –Exported data omits tier assignments or referral attribution.
- –Import exists but is gated behind onboarding services or a paid tier.
- –Contract language claiming ownership or deletion of program data at termination.
7
Support model and contract terms
Weight: 10% of total score
Month-to-month billing with self-serve support suits stores under roughly $5M GMV; annual contracts with account managers only pay for themselves when you actually use the account manager.
Support models split cleanly: self-serve (docs, chat, email — typical at the $15–$50/mo price point) versus account-managed (named contact, onboarding calls — typical on $199+/mo or quote-based plans). Neither is wrong, but paying for account management you will not use is the quiet way loyalty budgets double. The contract term matters more than the support tier: annual lock-in removes your leverage exactly when a pricing change or a feature regression would otherwise make you leave.
scienceHow to test it yourself
Email support with a real technical question during the trial and time the first substantive (non-canned) response. Ask sales directly: is monthly billing available on the plan I need, and what is the cancellation notice period? Get both answers in writing.
flagRed flags
- –Annual prepay is required for the plan tier that has the features you need.
- –Trial-period support noticeably faster than the documented post-sale SLA — you are seeing the sales-window service level.
- –Auto-renewal with a 60- or 90-day cancellation notice window buried in the terms.