Are You Paying Twice For the Same Job?

Open your Shopify billing page and count the tools that capture email addresses. Then count the ones that record sessions. Then the ones that measure traffic.
A store that's been through three agencies in five years is usually running two of at least one of those. Sometimes three.
"Nobody sat down and decided to do that. It's the residue of handovers."
Each agency arrives with the stack it already knows, installs it, and leaves without pulling out the one before, because uninstalling a tool you didn't install is the quickest way to break something and then own the blame for it.
Third-party weight, by the numbers
79
Median third-party requests on a mobile page load
3
Median depth of a third-party inclusion chain — each one loading another
45
Minutes to run the full inventory below
Duplication is a handover artefact, not a decision
The pattern repeats with unnerving consistency. An email platform gets replaced but the old one keeps its script embed, because someone was still exporting lists out of it in month one and nobody went back. A session recorder goes in for a three-week CRO sprint and never comes out. Analytics accumulates in layers: a hardcoded tag in theme.liquid, the same property again inside a tag manager, and a third measurement app a marketing agency added because it had a dashboard they preferred.
Every one of those made sense to the person adding it. What nobody owns is the removal, and Shopify will not prompt you for it. Apps built as theme app extensions do clean up after themselves, because their app blocks and embeds come out with the app. Older integrations that edited theme.liquid or dropped a script tag in directly are the ones we find still running months after the subscription was cancelled, calling a service the store no longer pays for.
The subscription is the smaller cost
Add up the monthly bills and you get a number worth having. The number on the page is worse.
The Web Almanac's 2025 crawl found the median depth of a third-party inclusion chain is 3, meaning most third parties load at least one further third party of their own, and the median page carries 79 third-party requests on mobile.
"A duplicate tag manager isn't one file. It's a file whose job is fetching other files."
That cost lands hardest on INP, the Core Web Vitals metric for how quickly a page responds after someone taps. It's the metric most sensitive to heavy JavaScript and main-thread contention, which is a fair description of what a stack of overlapping tags produces. Shopify stores hold up better than most platforms here. That's not much comfort if you're spending the headroom on scripts whose output nobody has looked at since installation.
The inventory, about 45 minutes
Three tabs and a spreadsheet.
- Settings, then Apps and sales channels in your Shopify admin. List every installed app alongside what it does in four words or fewer. Sort by that description and the duplicates surface on their own, because the whole trick is describing the job rather than the brand.
- Online Store, Themes, Customize, then the App embeds panel. This is what's injecting code into your storefront right now, and it is not the same list as the one above. Anything switched on here that doesn't appear in your app list is an orphan.
- Load a busy product page in Chrome with DevTools open on the Network tab, filter to JS, sort by size. Every domain that isn't yours or Shopify's is a third party. Match them back to the first two lists. Whatever's left over is code running with nothing behind it.
Then add one column you can only fill in by asking around: who looked at the output of this in the last 90 days? Not who has a login. Who opened it, and what changed because of what they saw.
Anything with no name in that last column is your first candidate to remove, and it's the right place to start because it's the cheapest decision to reverse.
Before you cancel a thing, run PageSpeed Insights on that same product page and keep the number. Remove one duplicate, wait for the field data to catch up, run it again. One at a time is slower, and it's the only way you'll know which one was actually costing you.
Check the theme after each uninstall, too. If the app predates theme app extensions, its code doesn't necessarily leave when the app does, and carrying the load without the tool is the worst version of this.
The bottom line
Every app on that list made sense to someone once. The audit above is a spreadsheet, not a redesign, and it costs about 45 minutes. Remove one duplicate at a time and let the data tell you which subscription was actually doing something.
At beCommerce, we run this exact duplication audit as part of every performance and app-stack review. If you want a hand finding what's still running, book your free audit →.
Is your store making any of these mistakes?
We audit Shopify stores for exactly these kinds of conversion-killing patterns — the ones that have become normalised until you see them through a customer's eyes.
Book your free audit →

