Deep Dive · Updated March 2026

Shopify Third-Party Scripts: Find & Fix Slow Apps (2026)

How third-party apps slow down your Shopify store

Third-party JavaScript accounts for 60–80% of total script execution time on most Shopify stores. Not your theme. Not your images. Your apps are the #1 reason your store is slow — and most merchants don't even know it.

~14 min read · 3,200 words · The definitive guide

Why This Matters for Your Store

60–80%

of script execution time comes from third-party apps

3+ sec

of delay from app scripts on a typical store

7%

conversion drop per 1 second of delay

The Easy Fix: Automatic Script Optimization

Third-party scripts are the hardest speed problem to solve manually — you can't edit app code, and naive deferral breaks functionality. Thunder Page Speed Optimizer was built specifically to solve this problem.

What Thunder does with your app scripts:

Smart Script Deferral

Defers third-party scripts while preserving execution order and dependencies

Dependency Mapping

Understands which scripts depend on each other — won't break your apps

Per-App Impact Report

Shows exactly how many milliseconds each app adds to your page load

Auto-Adapts to Changes

New app installed? Theme updated? Thunder adapts automatically

Average improvement: +27 PageSpeed points

Stores with many apps see the biggest gains — often 20–60% faster load times. 4.6★ rating · 20,000+ stores.

Fix Your App Scripts Now →

Free plan available · No credit card required · 30-second setup · Works with all themes

Prefer to do it yourself? Keep reading ↓

1. What Are Third-Party Scripts (And Why Should You Care)?

Every time you install an app from the Shopify App Store, that app needs a way to show its features on your storefront. A review widget needs to display stars. A chat app needs to show a chat bubble. An email popup needs to... well, pop up.

To do this, each app injects JavaScript files (scripts) into your store's HTML. These are called "third-party scripts" because they come from external servers — not from Shopify's infrastructure or your theme code.

Here's the problem: your visitor's browser must download, parse, and execute every single one of these scripts before it can finish loading the page. And unlike your theme code, which Shopify has optimized and serves from its CDN, third-party scripts come from dozens of different servers with varying performance.

🔴 The core issue: Your theme loads once and weighs maybe 200–400KB of JavaScript. But third-party app scripts can collectively add 1–3MB of additional JavaScript — 3–10x more than your entire theme. Every kilobyte must be downloaded over your visitor's connection and processed by their device's CPU.

This isn't just a theoretical concern. Research from the HTTP Archive and Google consistently shows that third-party JavaScript accounts for 60–80% of total script execution time on the average ecommerce site. On Shopify stores specifically, we've seen this number reach 85% on app-heavy stores.

The cruel irony? Most of these scripts load on every page of your store, even when the app's features aren't visible. Your review widget's JavaScript loads on your homepage, your about page, your contact page — everywhere — even though reviews only display on product pages.

2. How Third-Party Scripts Load in Your Browser

To understand why third-party scripts are so damaging to performance, you need to understand how browsers load a page. Here's the simplified version:

1

HTML arrives

The browser receives your page's HTML from Shopify's servers. This is fast — Shopify's infrastructure is solid.

2

Browser starts parsing HTML

As it reads the HTML, it discovers resources to load: CSS files, JavaScript files, images, fonts.

3

⚠️ Script tags block rendering

When the parser hits a <script> tag without async or defer, it stops everything. It must download the script, parse it, and execute it before continuing. This is called "render blocking."

4

⚠️ Each script makes network requests

Many app scripts aren't self-contained. They load additional files — configuration data, widget templates, analytics libraries. Each one requires its own DNS lookup, connection, and download.

5

Page finally renders

Only after all blocking scripts finish executing does the browser display the page. Your visitor has been staring at a blank or half-loaded screen this entire time.

Many app developers don't add async or defer attributes to their script tags — either because they don't know about performance best practices, or because their scripts depend on the DOM being in a specific state. The result: their scripts block your page from rendering.

The loading timeline

0ms — HTML received from Shopify

50ms — CSS parsed, layout begins

100ms — ⏸ Script: review-widget.js (blocking, 300ms)

400ms — ⏸ Script: chat-app.js (blocking, 250ms)

650ms — ⏸ Script: analytics.js (blocking, 200ms)

850ms — ⏸ Script: popup-builder.js (blocking, 350ms)

1200ms — ⏸ Script: loyalty-program.js (blocking, 200ms)

1400ms — ⏸ Each script loads 2-3 MORE scripts...

2800ms — Scripts finally done executing

3000ms — 🖼️ Page renders (visitor sees content)

Simplified timeline showing how script blocking delays page render

In this example, 2.8 seconds of the 3-second load time is spent on third-party scripts alone. The actual page content — your products, your images, your branding — could load in under 500ms if the scripts weren't in the way.

3. Real Examples: How Much Each App Type Costs You

Not all apps are equally heavy. Here's what we typically see across Shopify stores, based on real-world measurements:

💬 Live Chat Widgets

300–500ms

Examples: Tidio, Gorgias, Zendesk Chat, LiveChat, Intercom

Chat widgets are among the heaviest apps. They load a full UI framework, establish a WebSocket connection, fetch conversation history, and render a chat bubble with animations. Intercom alone loads 300–500KB of JavaScript. Most of this runs on every page, even though most visitors never click the chat bubble.

⭐ Review Widgets

200–400ms

Examples: Judge.me, Loox, Yotpo, Stamped.io, Okendo

Review apps load their core JavaScript, then make API calls to fetch review data, render star ratings, and set up interactive features (photo carousels, filtering, sorting). Even on pages with no reviews displayed, the script still loads and initializes. Judge.me is one of the lighter options; Yotpo and Loox tend to be heavier.

📧 Email Marketing & Popups

200–350ms

Examples: Klaviyo, Omnisend, Privy, Justuno, OptiMonk

These load scripts for form rendering, user tracking, popup logic (timing, targeting rules, A/B tests), and often include their own CSS frameworks. Klaviyo's onsite JavaScript is particularly heavy because it tracks user behavior for segmentation — loading analytics code, session tracking, and form handlers on every page.

📊 Analytics & Tracking

100–300ms

Examples: Google Analytics, Facebook Pixel, TikTok Pixel, Hotjar, Lucky Orange, Pinterest Tag

Analytics scripts are sneaky. Each one seems small — maybe 50–100KB. But stores often run 4–6 tracking scripts simultaneously: GA4, Facebook Pixel, TikTok Pixel, Hotjar for heatmaps, plus the store's own analytics app. They add up to 300–600KB collectively, plus each one fires network requests to send tracking data.

🏷️ Google Tag Manager (GTM)

300–800ms

The #1 third-party script container. GTM isn't just another script — it's a script that loads more scripts.

The GTM container itself weighs 80–100KB+. But the real cost comes from what's inside it: Meta Pixel (80–150KB), TikTok Pixel (100–200KB), Google Ads conversion tracking (50–100KB), Klaviyo tracking (100–200KB), Hotjar (150–300KB), and whatever else has been added over time. A typical GTM container triggers 5–15 additional scripts, adding 300–800ms of total load time.

How to audit your GTM container:

  1. Open Google Tag Manager and select your container.
  2. Go to Tags — count how many are active. Most stores have 10–30+.
  3. Check each tag's Trigger — if it says "All Pages," ask: does this really need to fire everywhere?
  4. Look for zombie tags from old campaigns (old Facebook audiences, discontinued tools).
  5. Use GTM's Preview mode to see exactly which tags fire on each page and how long they take.

Common heavy tags inside GTM:

Meta Pixel (Facebook) 80–150KB
TikTok Pixel 100–200KB
Google Ads Conversion 50–100KB
Klaviyo Tracking 100–200KB
Hotjar / Lucky Orange 150–300KB
Pinterest Tag 50–100KB

⚡ Thunder's approach: Instead of deferring individual tags inside GTM (which requires GTM expertise), Thunder defers the entire GTM container. When GTM loads later, all tags inside it also load later — automatically. This single optimization can save 300–800ms without touching your GTM configuration. Try it free →

🎨 Page Builders & Upsell Apps

200–500ms

Examples: PageFly, Shogun, GemPages, ReConvert, Bold Upsell

Page builders like PageFly inject their own rendering framework, which loads on every page — even pages you didn't build with the app. Upsell apps load product recommendation logic, cart modification scripts, and popup UIs on every page to be ready when a customer adds to cart.

🔔 Social Proof & Urgency

100–250ms

Examples: Sales Pop, Fomo, Trust badges, Countdown timers, Stock counters

These seem lightweight, but they often cause layout shift (CLS problems). They inject elements into the page after load — notification popups, trust badge bars, countdown timers — pushing content around and creating a janky user experience. Plus, each one is another script your browser must process.

4. The Cascade Effect: Death by a Thousand Scripts

No single app kills your speed. It's the combination that does. Here's what a typical app-heavy Shopify store looks like:

A real-world app stack (15 apps)

Klaviyo (email marketing) +280ms
Yotpo (reviews) +350ms
Gorgias (live chat) +420ms
PageFly (page builder) +300ms
ReConvert (upsells) +250ms
Privy (popups) +200ms
Loyalty Lion (rewards) +180ms
Facebook Pixel +150ms
Google Analytics (GA4) +120ms
TikTok Pixel +130ms
Hotjar (heatmaps) +180ms
Shopify Inbox (chat) +100ms
Sales Pop (social proof) +120ms
Currency converter +90ms
Wishlist app +130ms
Total third-party script cost +3,000ms

Three full seconds of delay — just from app scripts. Add your theme's JavaScript (~300ms), CSS (~100ms), images (~500ms), and fonts (~200ms), and you're looking at a 4+ second page load on a good connection. On a mobile device with a 3G connection, double that. If your store looks anything like this, our step-by-step guide walks you through fixing every layer — not just scripts.

15 apps

average number of apps on a Shopify store

~200ms

average delay per app script

3+ sec

total third-party script delay

But the math is actually worse than simple addition. Scripts don't just add time linearly — they compete for resources:

  • Network contention: Browsers limit concurrent connections per domain (typically 6). When 15 apps try to load from 15 different domains simultaneously, they queue up and wait for each other.
  • CPU contention: JavaScript is single-threaded. While one script is executing on the main thread, all other scripts must wait. This is why INP (Interaction to Next Paint) suffers — the browser can't respond to user clicks while it's busy executing app code.
  • Memory pressure: Each script allocates memory. On budget smartphones (which represent a large portion of mobile shoppers), excessive memory usage causes the browser to slow down or even crash.
  • Secondary requests: Most app scripts load additional resources. A review widget loads its main script, then that script loads CSS, font icons, and API data. One app's "single script" can trigger 5–10 additional network requests.

💡 The takeaway: It's not about any single app being "too slow." It's the accumulated weight of all your apps loading simultaneously, competing for network bandwidth, CPU time, and memory. The solution isn't necessarily removing apps — it's controlling when and how they load.

5. How to Audit Third-Party Scripts on Your Store

Before you can fix the problem, you need to identify exactly which scripts are causing it. Start with a quick baseline — test your store speed to see where you stand right now. Then use these methods, from most technical to easiest:

Method 1: Chrome DevTools Network Tab

This is the most detailed view of what's loading on your page.

  1. Open your store in Chrome. Press F12 (or right-click → Inspect) to open DevTools.
  2. Click the Network tab.
  3. Check the "Disable cache" checkbox (simulates a first-time visitor).
  4. Reload the page (Ctrl+Shift+R for a hard reload).
  5. Click the "JS" filter to show only JavaScript files.
  6. Sort by "Size" or "Time" column to find the heaviest/slowest scripts.

What to look for: Scripts from domains you don't recognize are third-party. Common patterns include cdn.judge.me, static.klaviyo.com, widget.intercom.io, etc. Note the domain, file size, and load time for each.

Method 2: Chrome Coverage Tool

The Coverage tool shows how much of each JavaScript file is actually used on the current page. This reveals waste — scripts that load hundreds of KB but only use 10–20% of their code.

  1. Open DevTools (F12).
  2. Press Ctrl+Shift+P (Command menu) and type "Coverage".
  3. Click "Show Coverage".
  4. Click the reload button in the Coverage panel.
  5. After the page loads, sort by "Unused Bytes".

Red flag: If a script has 80%+ unused bytes, it's loading far more code than needed for the current page. This is common with large app bundles that include features for every page but only use a fraction on any given page.

Method 3: PageSpeed Insights "Reduce JavaScript Execution Time"

The simplest approach. Run your store through PageSpeed Insights and look for these specific diagnostics:

  • "Reduce JavaScript execution time" — Lists the heaviest scripts by execution time
  • "Reduce the impact of third-party code" — Shows third-party scripts grouped by provider with their blocking time
  • "Minimize main-thread work" — Shows total main thread time breakdown by category
  • "Avoid enormous network payloads" — Flags oversized resources

Method 4: Use Thunder's App Scanner (Easiest)

Thunder automatically scans your installed Shopify apps and generates a per-app speed impact report — showing exactly how many milliseconds and kilobytes each app adds to your page load. No DevTools knowledge required. Install the app, and the report appears in your Shopify dashboard.

6. How to Fix Slow Third-Party Scripts

⚠️ Difficulty: Intermediate to Advanced. Manual script optimization requires understanding JavaScript execution order, dependency chains, and Shopify's Liquid templating. One mistake can break your checkout or apps. Thunder automates all of this with a 30-second setup.

Once you've identified the culprits, here's what you can do about them — in order of effectiveness:

Fix 1: Remove What You Don't Need

The fastest script is the one that never loads. Go through your installed apps and honestly evaluate each one:

  • Apps you tried once and forgot about. Check your Shopify admin → Apps. You'd be surprised how many "trial" apps are still installed.
  • Duplicate functionality. Running both Klaviyo and Omnisend? Using Loox and Judge.me? Pick one.
  • Low-value apps. That "Sales Pop" notification that shows "Someone in Toronto just bought..."? It adds 100–200ms of load time. Is it actually driving conversions, or is it just noise?
  • Seasonal leftovers. Holiday countdown timer still installed in February? Remove it.

Critical step: After uninstalling, check your theme code. Go to Online Store → Themes → Edit Code and search for the app's name in theme.liquid and layout/ files. Many apps leave behind script tags that continue loading even after you uninstall.

Fix 2: Find Lighter Alternatives

Not all apps in the same category have equal performance impact. For example:

  • Reviews: Judge.me is significantly lighter than Yotpo or Loox
  • Email marketing: Shopify Email is lighter than Klaviyo for basic needs
  • Chat: Shopify Inbox is lighter than Intercom or Gorgias
  • Analytics: Shopify's built-in analytics + GA4 may be sufficient without Hotjar, Lucky Orange, AND Mixpanel

Fix 3: Defer Non-Critical Scripts

For apps you want to keep, the next best option is changing when their scripts load. Instead of blocking the page render, defer them until after the main content is visible:

  • Manual approach: Edit your theme's theme.liquid and add defer to app script tags. Risky — can break apps if done incorrectly.
  • Delay until interaction: Some developers use a technique where scripts only load after the user's first interaction (scroll, click, touch). This dramatically improves initial load time but means features aren't ready immediately.
  • Use a script optimizer: Tools like Thunder automate this process, intelligently deferring scripts while maintaining functionality. See our complete speed optimization guide for more details.

Fix 4: Conditional Loading (Page-Specific Scripts)

Why load your review widget's script on your homepage when reviews only show on product pages? Conditional loading ensures scripts only load where they're needed.

In Liquid, you can wrap app script tags with template conditionals:

{% if template contains 'product' %}

<script src="review-widget.js"></script>

{% endif %}

This is a powerful technique, but it requires editing your theme code and knowing which apps are needed on which pages. Some apps inject their scripts in ways that make this difficult without breaking functionality.

7. The Thunder Approach: Automated Script Optimization

All of the fixes above work, but they share a problem: they're manual, fragile, and hard to maintain. Apps update their scripts. New apps get installed. Theme updates can overwrite your changes. You'd need a developer to constantly monitor and adjust.

This is why we built Thunder. Instead of manually editing script tags and hoping they don't break, Thunder automatically:

  • Scans all installed apps and generates a per-app speed impact report
  • Intelligently defers non-critical scripts so they load after your page content is visible
  • Preserves script dependencies — understands which scripts need to load before others
  • Monitors Core Web Vitals so you can see the real-world impact in your Shopify dashboard
  • Adapts automatically when apps update their scripts or you install new apps

The result: stores typically see a 20–60% improvement in load time, with the biggest gains on stores that have the most third-party apps. If your PageSpeed score is currently 25–35, you can realistically reach 50–70+ with script optimization alone. Want to see what's included? Check Thunder plans — there's a free tier to get started.

Not sure if Thunder is the right choice? We've written honest comparisons against every major competitor: Thunder vs Booster, Thunder vs Hyperspeed, Thunder vs Avada, and Thunder vs Tapita. Or see our full roundup of the best Shopify speed optimizer apps for 2026.

Frequently Asked Questions

What are third-party scripts on Shopify?

Third-party scripts are JavaScript files loaded by apps you've installed on your Shopify store. When you install a review widget, chat app, email popup, or analytics tool, each one injects its own JavaScript into your storefront. These scripts run in your visitors' browsers alongside your theme code, competing for processing time and network bandwidth.

How do I find which apps are slowing down my Shopify store?

Open Chrome DevTools (F12), go to the Network tab, reload your page, and filter by 'JS'. Look for scripts from external domains — these are third-party app scripts. Sort by size or time to find the worst offenders. For an easier approach, use the Coverage tool (Ctrl+Shift+P → 'Coverage') to see how much of each script is actually used. Thunder's app scanner automates this entire process and gives you a per-app impact report.

Do uninstalled Shopify apps still slow down my store?

Yes, often they do. Many Shopify apps inject code snippets into your theme files (especially theme.liquid) during installation. When you uninstall the app, these code snippets remain. You need to manually check your theme code and remove leftover script tags. Search your theme files for the app's name or its script domain to find orphaned code.

How many Shopify apps is too many?

There's no magic number — it depends on the weight of each app. A store with 30 lightweight apps can be faster than one with 5 heavy apps. The average Shopify store has 15-25 apps installed. Focus on measuring each app's actual impact on load time rather than counting apps. As a rule of thumb, if your PageSpeed score drops more than 5 points after installing an app, that app needs optimization.

Can I defer third-party scripts without breaking my apps?

Yes, but it requires care. Naive script deferral can break app functionality — for example, deferring a review widget's script might cause reviews to flash in after page load, or deferring an analytics script might miss pageview tracking. Smart deferral tools like Thunder understand script dependencies and defer scripts in the correct order, preserving functionality while improving load time.

What's the difference between async and defer for scripts?

Both async and defer allow the browser to continue parsing HTML while downloading the script. The difference: 'async' scripts execute as soon as they download (potentially out of order), while 'defer' scripts execute after the HTML is fully parsed, in the order they appear. For third-party app scripts, 'defer' is usually safer because it preserves execution order. However, the best approach is to delay scripts entirely until after the page is interactive — this is what speed optimizer apps do.

Do It Yourself

Free plan · 1-click install · Instant results

Install Thunder Free →

Done For You

Core Web Vitals guarantee · 2-week delivery · 6 months Thunder free

Get Expert Optimization →

Starting from €1,500