Shopify loyalty apps have a dirty secret: most of them are heavy enough to measurably hurt your Core Web Vitals. We spent a week benchmarking every major app's JavaScript footprint. The gap between the lightest and heaviest is 46× — and the mid-pack isn't great either.
Why We Ran This Benchmark
We got tired of vague performance marketing. Every loyalty app's landing page says "built for speed." Nobody publishes numbers. So we did it ourselves.
The goal: measure the total JavaScript transferred to the browser when each loyalty app loads on a live Shopify store. Not just the main bundle — everything: third-party dependencies, CSS-in-JS, analytics scripts pulled in by the app, tracking pixels. Real-world conditions, real-world cost.
Methodology
For each app we installed it on a fresh Shopify demo store (one app per store to isolate measurements), opened the storefront in an incognito Chrome window, and used DevTools > Coverage tab to measure gzipped transferred bytes. Each test was run three times and averaged.
- What counts: Any JavaScript/CSS asset loaded by the loyalty app, directly or through dependencies
- What doesn't count: Shopify theme assets, Shopify core scripts, shared browser-cached resources
- Environment: Fresh Shopify demo store, desktop Chrome 124+, 4G throttled network
- Measurement: Coverage tab gzipped transfer size, averaged across 3 runs
The Results
Key observations:
- Yotpo is 46× larger than Anchor. Yotpo bundles reviews/SMS/loyalty into one heavy package even when you only use loyalty.
- Growave is nearly as heavy. Their "loyalty suite" bundles wishlist, reviews, and more — you pay the JavaScript cost whether you use those features or not.
- The "enterprise" apps carry 340-400 KB — still enough to measurably impact Core Web Vitals on slower connections.
- Only Rivo and Anchor are in the "small" category, and Anchor is 6.8× smaller than Rivo.
What 650 KB Actually Costs
On a median mobile device (4G, roughly 1.6 Mbps effective throughput), 650 KB of JavaScript adds ~3.2 seconds to Time to Interactive and ~1.8 seconds to Largest Contentful Paint. Anchor's 14 KB adds ~70 ms to TTI — effectively zero.
- Shopify data: every 100ms of extra load time costs ~1% in conversions
- Google: sites with LCP over 2.5s get penalized in rankings
- Mobile commerce: 53% of visitors abandon if load takes more than 3 seconds
A store doing $1M/year at 3% conversion rate could lose $30,000+ annually from the conversion impact of a 650 KB loyalty app alone. That's before factoring in lost organic traffic from poor Core Web Vitals.
How Anchor Hits 14 KB
Architecture, not micro-optimization. Three choices explain most of the gap:
1. No heavy framework. We don't ship React, Vue, or a virtual DOM. The widget renders with vanilla DOM APIs and custom elements. Frameworks are great for apps — they're dead weight when you're rendering one floating widget.
2. Aggressive lazy loading. The launcher button loads first (~2 KB). The full panel only loads when the user clicks. Most customers never open the widget on any given page view, so they never pay the full cost.
3. No bundled third-party services. We don't embed Intercom, don't embed Segment, don't embed GTM by default. Competitors bundling "reviews + SMS + wishlist + loyalty" carry all those dependencies whether you use them or not.
The Sustainability Angle
There's a climate cost too. The internet's carbon footprint is now ~4% of global emissions. Heavy JavaScript directly contributes.
At 10,000 daily store visitors, a 650 KB loyalty app transfers 6.5 GB/day (~2.4 TB/year). At the Website Carbon Calculator's 1.805g CO₂ per GB, that's ~4.3 kg of CO₂ per year per store, from one app. Anchor's 14 KB at the same traffic transfers 140 MB/day — a 97.8% reduction.
Can the Heavy Apps Get Lighter?
In theory, yes. In practice, they'd need to rewrite their frontends from scratch. Smile.io and Yotpo are built on a decade of accumulated code — legacy framework versions, bundled third-party services, internal design systems that ship 200 KB before any business logic runs. Refactoring to 14 KB is not an incremental win; it's a rewrite.
This is why the architectural gap has been stable for 12+ months and will likely stay stable for years. Performance isn't something you bolt on — it's something you architect for from day one.
How to Measure Your Current Loyalty App
Don't take our word for it:
- Open your storefront in Chrome incognito
- Open DevTools (Cmd+Opt+I / Ctrl+Shift+I)
- Go to the Coverage tab (may be under "More tools")
- Click reload in the Coverage tab
- Filter by your loyalty app's domain or script names
- Sum the transferred bytes
You'll likely see a number that's uncomfortable. The good news: switching loyalty apps is painless — points and customer data can be migrated.
What This Means for You
If you're shopping for a Shopify loyalty app in 2026, JavaScript footprint should be a primary selection criterion, not a footnote. Ask every vendor to share their current bundle size. If they dodge, check yourself with Coverage tab.
Want the fastest Shopify loyalty app? Install Anchor Loyalty — or read our full performance report and feature comparison before you decide.
Frequently Asked Questions
How did you measure the JavaScript size?
We installed each app on a fresh Shopify demo store, opened the storefront in Chrome, and used DevTools Coverage tab to measure bytes transferred (gzipped). Third-party dependencies loaded by the app are counted. Shopify theme code and shared browser-cached resources are excluded. Measurements taken in April 2026.
Why does JavaScript size matter for a loyalty app?
Every KB of JavaScript adds to Time to Interactive, Largest Contentful Paint, and total page weight — all of which Google uses to rank sites and that directly affect conversion rate. Shopify data shows every 100ms of extra load costs ~1% in conversions.
Is smaller always better?
Functionally yes, to a point. A loyalty widget needs code for the launcher UI, panel rendering, point calculations, redemption flow, referral sharing, and localization. Anchor compresses this to ~14 KB through code splitting and lazy loading. The 350-650 KB competitors aren't near any theoretical floor — they're carrying heavy legacy frameworks.
Are these numbers accurate today?
Measurements are from April 2026. Apps update frequently; absolute numbers drift. The relative gap — Anchor 30-50× smaller than big competitors — has been stable for 12+ months because it reflects architectural choices, not incremental optimizations.