Why this is hard to figure out manually

Shopify's admin shows you a list of installed apps. Lighthouse shows you a performance score. Neither tells you which app contributed which milliseconds of blocking time, and that's the information you actually need.

The naive approach ("just uninstall them one at a time and re-run Lighthouse") takes hours, breaks your storefront features in unpredictable ways, and produces noisy results because Lighthouse scores vary ±5–10 points between runs. There's a better way.

Manual

Chrome DevTools workflow

  • ~45 minutes per audit
  • Requires DevTools knowledge
  • Per-page only (no aggregation)
  • You map scripts to apps yourself
Read the method →

The manual method: Chrome DevTools

If you only need to do this once, or you're comfortable in DevTools, here's the workflow. Five steps.

1. Set DevTools to mobile emulation

Open your storefront homepage in Chrome incognito (no extensions). Open DevTools (Cmd+Opt+I on Mac, Ctrl+Shift+I on Windows). Click the device toolbar icon (top-left) to switch to mobile emulation. Pick "Moto G Power" or any 4× CPU throttling preset. Desktop will lie to you about how bad mobile is.

2. Record a Performance trace

Open the Performance tab. Click the reload icon (circular arrow) to record a fresh page load. Wait until the storefront finishes loading + the spinner stops. Click Stop.

3. Find the "Long Tasks" in the main thread

Look at the Main row in the timeline. Long horizontal bars (>50ms) are tasks blocking your storefront from being interactive. Click each long bar to see what called it: typically a third-party script.

4. Identify the script host

Switch to the Network tab. Filter to JavaScript only. Sort by Initiator. Each blocking script will have a host like klaviyo.com, static.judgeme.io, tagmanager.google.com. Note the hosts.

5. Map hosts to apps

Open your Shopify admin → Apps page. Cross-reference each script host against your installed apps. Some are obvious (klaviyo.com = Klaviyo). Some are harder (cdn-shop-judgeme-2.b-cdn.net = Judge.me, but only if you recognize the CDN pattern). Anything you can't map is "unattributed".

Repeat for product, collection, and cart pages. Now you have a rough map of which apps are loading which scripts. The blocking time per app is the sum of the long tasks attributed to that app's scripts.

Real talk: this is what Store Auditor automates. The fingerprint database we maintain covers ~94% of the apps a typical Shopify store has installed. The remaining 6% gets labeled "unattributed third-party" so you can investigate manually.

The automated method: Store Auditor

Same idea, 90 seconds. One install, every page, both mobile and desktop, every blocking script mapped to a named app.

  1. Install Store Auditor from the Shopify App Store. Free plan available.
  2. On the dashboard, click Run scan. We hit your homepage, product, collection, and cart pages with Lighthouse 13 on mobile and desktop.
  3. Read the ranked list. Each row is a specific installed app, with its blocking time, severity, and a recommended fix.
  4. Apply the top recommendation. Re-scan. Verify the gain.

What to do with the list

Critical-severity apps are the ones worth touching first. Typically these are analytics scripts (GA4, Meta Pixel) that should move to Shopify Web Pixels, or marketing automation scripts (Klaviyo, Omnisend) that should be deferred.

High-severity apps are usually review widgets (Judge.me, Yotpo, Loox) that can be lazy-loaded below the fold. Medium-severity apps are usually chat widgets (Tidio, Gorgias, Intercom) that should trigger on user intent rather than page load. Low-severity is usually fine to ignore: fix the top before the bottom.

Run the audit on your store and see the named list:

Install Store Auditor free