Skip to content
Looplift

Guide

What should be left on your store after you uninstall an A/B testing app

Cem Bilen, Founder · August 1, 2026 · 6 min read

The answer is nothing, and most merchants only discover it is not nothing months later, when a page is slow and nobody can explain the script loading on it.

This post is the mechanism behind that, and then a checklist you can run this afternoon on any testing app you have installed.

The complaint, in numbers

We read 385 reviews across 137 apps in the Shopify App Store's CRO and A/B testing category on 31 July 2026. Of the 73 rated three stars or below, 7% describe code left behind after uninstall and 5% describe an app breaking the store or theme. Together that is 12% — roughly one negative review in eight is about a testing app changing something it should not have.

One, de-identified: a two-star review of a Built-for-Shopify app, written twenty minutes after install, reports five blocks of code still sitting on the page after uninstalling. Twenty minutes is not enough time to run a test. It is enough time to acquire a cleanup problem.

Why it happens

Uninstalling a Shopify app revokes its access. It does not revert edits the app already made to your theme. If an app added a snippet, an include, or a block to `theme.liquid` or a section file while it was installed, that code is now part of your theme file, and removing the app leaves it exactly where it is.

Well-built apps handle this with an uninstall routine that removes their own code before access goes away. That works right up until it does not: the routine fails, or the merchant removes the app from the admin in a way that skips it, or the app's servers are having a bad day at exactly that moment. There is no second chance — once access is revoked, the app cannot reach your theme to clean up even if it wants to.

Theme duplication compounds it. A merchant who duplicates the live theme to try a redesign carries every leftover fragment into the copy. Six months and three apps later, the theme contains code from tools nobody on the team remembers installing, and the only way to find it is to read the files.

Where the code actually hides

“Leftover code” is vague enough that merchants often go looking in the wrong place and conclude everything is fine. In practice there are five hiding places, and they are worth knowing by name because you can check all five yourself.

  • `theme.liquid`. The layout file every page renders through, and therefore the most convenient place for an app to add a script tag. It is also the file a merchant is least likely to open.
  • Section and snippet files. An app that added a block or an include leaves the markup where it put it, and a section file with an orphaned include can throw a Liquid error on a page you do not visit often.
  • Injected script tags near `content_for_header`. These load on every page, and they keep loading after the app that needed them is gone.
  • Duplicated themes. This is the one that surprises people. Uninstall cleanup, when it works at all, works on the theme it knows about. A copy made while the app was installed keeps the code and is invisible to the routine.
  • Metafields and webhook subscriptions. Not visible in the theme at all. They rarely cause damage, but they are the honest measure of whether an uninstall was complete.

None of this requires malice or incompetence on the vendor's part. It requires only that an app had write access to your theme and that something went wrong once.

The structural answer

An app that renders through a theme app extension has nothing to clean up. Its code is not in your theme; it is in an extension that Shopify renders alongside your theme. Disable the app embed, or uninstall the app, and it stops rendering. The theme file is byte-identical to what it was before install because the app never opened it.

This is not a virtue on the vendor's part. It is a consequence of what Shopify permits: writing theme files requires an exemption that CRO variant editing does not qualify for, so an App Store testing app either has that exemption or it does not touch your theme at all. Knowing which of the two you are buying is the single most useful thing you can establish before installing.

A checklist you can run yourself

None of this requires a developer. Six steps, in order:

  • Before installing anything, duplicate your live theme and leave the copy untouched. It is the cheapest rollback in commerce and it takes about ten seconds.
  • After you uninstall, search your theme's code for the app's handle and for its asset URLs. Shopify's theme editor has a file search; the app's handle is the last segment of its App Store URL.
  • Check `theme.liquid` around `content_for_header` for script tags you did not add. That is where injected code most often lands.
  • Check for orphaned metafields and webhooks. `read_themes` is unrestricted, so a partner or developer can check this for you in minutes without being granted anything sensitive.
  • Re-run PageSpeed Insights and compare the request waterfall to the baseline you took before installing. A script that is still loading will be in the list, even if you cannot find it in the theme.
  • If you find leftovers, remove them from the duplicated theme first, publish the clean copy, and keep the old one until you are sure nothing broke.

The follow-up question worth asking a vendor

“Everything is removed automatically on uninstall” is a sentence you will hear, and it deserves one follow-up: removed by what, if the app no longer has access to my store? There is a good answer — the cleanup runs on the uninstall webhook, before access is revoked — and a vendor who gives it has thought about your worst day. A vendor who cannot answer has not.

The second question is quieter and better: what happens to a theme I duplicated while your app was installed? Almost nobody has an answer to that one, and it is the case that actually strands code.

What we can and cannot show you today

Looplift does not write to your theme, and does not request the permission that would let us. Today's delivery is a single script line you add yourself and can delete yourself; deleting that line removes all of Looplift, because there is nothing else of ours anywhere in your store. Our Shopify app, which will deliver through a theme app extension instead, is in development and is not shipped — we are not going to describe it in the present tense until it is.

What we do not have is a screen that proves any of this to you. There is no “0 traces remaining” confirmation in the product, and building one is on the list rather than in the box. Until it exists, the checklist above is the verification, and it works on us exactly as well as it works on anyone else.

Run it on whatever you have installed. The result is more informative than any vendor's answer, including ours.

Sources

See it on your own store

Looplift runs this methodology on your site automatically: a free audit, three ready-to-launch experiment proposals, peeking-safe results. You approve every launch.

Run a free audit

Keep reading

← All field notes