All posts

Shopify App Uninstalled but Code Still There? How to Find and Remove It

Uninstalled a Shopify app but its code is still running on your store? Here is how to find leftover scripts, snippets and app embeds, and remove them safely.

You clicked Delete on an app you stopped using months ago. The app is gone from your admin. The billing stopped. And yet the little chat bubble is still floating in the corner of your product pages, or your speed score dropped instead of going up, or your browser console is throwing errors about a script from a domain you do not recognise.

This is one of the most common and least talked about problems in Shopify stores. Uninstalling an app removes the app. It does not always remove what the app put into your store.

I want to walk through exactly why this happens, where the leftovers hide, how to tell if you have them, and how to clean them out without breaking your storefront.

Why uninstalling an app does not clean up after it

Here is the part most merchants never hear. When you uninstall an app from your Shopify admin, that app’s access token is revoked instantly. There is no grace period, no shutdown window, no five second countdown where the app gets to tidy up. One moment it can read and write to your store, the next moment it cannot.

App developers have asked Shopify for a delay so they can run a cleanup routine on uninstall. As of today that delay does not exist. So if an app added a snippet to your theme, uploaded a JavaScript file to your assets folder, or dropped a line into theme.liquid, that code is stranded the second you hit uninstall. Nobody is coming back for it.

Whether you end up with leftovers depends almost entirely on how the app was built.

Apps built with theme app extensions ship their code as app blocks and app embeds. That code lives outside your theme files, on Shopify’s CDN, and it disappears cleanly when the app goes. This is the modern way and it is what you want.

Apps that inject code directly write into your actual theme files during install. Shopify’s own documentation on extending your theme with apps is upfront about this. Some apps add features by injecting code straight into your theme. When those apps leave, the injected code stays exactly where it was.

Apps that used script tags loaded JavaScript onto your storefront through the API without touching your theme at all. These usually do get removed on uninstall, but not always, and orphaned script tags are absolutely a thing.

So the honest answer to “does uninstalling remove the code” is: sometimes, depending on which of those three routes the developer chose. And you have no way of knowing which one it was until you go looking.

The seven places leftover app code hides

If you are hunting, these are the spots to check, roughly in order of how often something turns up.

1. theme.liquid

The single most common hiding place. Apps love to drop a script tag or a render statement just before the closing </head> or </body> tag. Look for lines that reference an app name, a strange CDN domain, or a {% render 'something-app-core' %} statement.

2. The Snippets folder

Injected code is often bundled into a snippet file with the app’s name on it, then called from theme.liquid or a section. If you delete the call but leave the snippet, you have dead weight. If you delete the snippet but leave the call, you get a Liquid error. Both need to go together.

3. The Assets folder

JavaScript and CSS files the app uploaded. Names like appname.js, appname-widget.css, or something less obvious with a random string in it. These only cost you if something is still requesting them, but they clutter the theme and confuse whoever works on it next.

4. Sections and templates

Review widgets, upsell blocks, size charts and bundle builders often get wedged into product.liquid, main-product.liquid, cart.liquid or a custom section. This is where you see the classic symptom of an empty gap on the page where something used to render.

5. App embed leftovers in the theme editor

Go to Online Store, Themes, Customize, then open the App embeds panel. Sometimes an entry stays listed there after an uninstall, greyed out or throwing an error. The setting is stored in your theme’s settings_data.json file.

6. Orphaned script tags

These load JavaScript on your storefront without touching your theme, so you will never find them in the code editor. You find them by viewing your page source or running a speed test and spotting a request to a domain you no longer do business with.

7. The checkout, for older stores

For years this was a big one. Merchants pasted conversion pixels, affiliate postbacks and app snippets into the Additional Scripts field on the Thank You and Order Status pages, then forgot about them. Shopify has now closed that door. Plus stores lost the field in August 2025, and every non Plus store on Basic, Shopify or Advanced lost it on August 26, 2026. Anything still sitting in there stopped running that day. If your post purchase tracking went quiet at the end of August, that is almost certainly why, and it is not something you fix by editing theme code.

What leftover code is actually costing you

It is tempting to shrug this off. A few dead lines of Liquid never hurt anyone, right? Not quite.

Speed. Every orphaned script is a request the browser still has to make. It resolves DNS, opens a connection, downloads a file, and sometimes waits for a response from a server that no longer cares. Stack three or four uninstalled apps over a couple of years and you have real weight on every single page view. Merchants regularly report their store getting slower over time with nothing in the admin to explain it.

Core Web Vitals and rankings. Render blocking scripts push out your Largest Contentful Paint. Slow pages hurt conversion directly, and page experience feeds into how Google treats your pages. You are paying a speed tax for a service you cancelled.

Visible breakage. Ghost widgets in your footer, a language selector that does nothing, a grey box in your navigation, a review section that shows a spinner forever. These are the ones customers notice.

JavaScript errors. A dead script can throw an error early in page load and stop later scripts from running. That is how one uninstalled app can quietly break a different, working app.

Theme update pain. Shopify’s help documentation notes that manual and app made code edits carry across when you update a theme, provided they do not conflict. So your leftovers get copied forward into the new version, and the mess follows you around for years.

Privacy exposure. If a tracking script from a service you no longer use is still firing, you may still be sending customer data to a third party. That is a conversation you do not want to have with a regulator or a customer.

How to check whether your store has leftover code

You do not need to be a developer for any of this. Five checks, ten minutes.

Check one: view your page source. Open your storefront, right click, View Page Source, then press Ctrl+F or Cmd+F and search for the name of the app you removed. Search for the developer’s name too. If either shows up, you have a leftover.

Check two: run a speed test and read the third party list. Run your homepage and a product page through PageSpeed Insights or GTmetrix. Both break out third party scripts by domain. Look down that list for anything you do not recognise or anything belonging to an app you cancelled. If you cannot place a domain, paste it into Google, the developer usually turns up on the first page.

Check three: search your theme code. Online Store, Themes, click the three dots on your live theme, Edit code. Use the search box at the top of the file list and search the app name. Then search the developer name, then any distinctive keyword from the widget. Check theme.liquid manually even if the search comes up empty, since some apps use obfuscated naming.

Check four: look for modified file markers. In the code editor, files that have been changed from the theme’s original version are flagged. Those flags are a shortlist of where to look. Just be careful, because your own customisations are flagged the same way, and reverting a file wipes both.

Check five: open the App embeds panel. In the theme editor, check for entries belonging to apps that are no longer installed.

For a more forensic approach, download your theme as a zip from the Themes page, unzip it, and open the whole folder in a code editor like VS Code. A project wide search across every file catches things the admin search box misses.

How to remove leftover app code safely

Order matters here. Do not skip the first step.

Step 1: Duplicate your theme

Themes, three dots on your live theme, Duplicate. Work on the copy. Never edit your live theme directly, not even for a change you are sure about. This one habit is the difference between a bad afternoon and a fine one. Downloading a zip backup as well takes fifteen seconds and gives you a version you can restore from even if something goes wrong inside Shopify.

Step 2: Ask the developer first

Before you touch anything, email the app’s support address. Most reputable developers keep uninstall instructions on file and will tell you exactly which files and lines belong to them. They know their own code better than you can guess at it, and it costs you one email. This is genuinely the fastest and safest route, especially for apps that touched multiple files.

Step 3: Identify what is actually safe to remove

This is where people get into trouble. Before deleting anything, ask two questions.

Is anything still calling this? A snippet you delete that a section still renders will throw a Liquid error on the live site. Search for the snippet name across the theme before removing the file.

Is this really the app’s code, or is it mine? Custom work from a developer often sits right next to app code and looks similar. If you are unsure who wrote a block, comment it out first rather than deleting it, then preview and see what changes.

Anything you are still uncertain about, leave it and flag it for a developer.

Step 4: Remove it

Work through your list. Delete the injected lines from theme.liquid, sections and templates. Delete the orphaned snippet files. Delete the abandoned asset files. Save as you go.

Leftover CSS deserves a mention. If an app left styles behind and you cannot cleanly remove them, they are usually harmless, but a stylesheet that hides or repositions elements can cause layout weirdness long after the app is gone.

Step 5: Preview properly

Do not just glance at the homepage. Preview the duplicate theme and click through your homepage, a collection page, a product page with variants, the cart, and your account pages. Open the browser console on each and watch for red errors. Test on mobile, because plenty of app code was mobile specific.

Step 6: Publish, then verify

Publish the cleaned theme. Run PageSpeed Insights again on the same pages you tested before and compare the third party list. The domains you removed should be gone. If they are still there, what you removed was not the source, and you are probably looking at a script tag rather than theme code.

Step 7: Deal with anything that is not theme code

If a script survives a clean theme, it is coming from somewhere else. Orphaned script tags need to be queried and deleted through the Shopify Admin API, which is a job for a developer or the app’s support team. If a chat widget or pixel is still loading, check whether it was also installed independently outside the app, which happens more often than you would think.

The workaround nobody likes but everybody uses

Sometimes a widget refuses to die. You have searched every file, deleted everything with the app’s fingerprints on it, and a grey box is still sitting in your menu.

The common fix is CSS. Add a rule that hides the element with display: none, drop it into your theme, and the visual problem goes away.

Be clear about what this does. It hides the symptom. The underlying code still loads, still costs you bytes and still runs. As a temporary patch before a proper cleanup, fine. As a permanent solution, you are sweeping it under the rug and it will confuse whoever inherits the theme.

The 2027 deadline that changes this problem

There is good news on the horizon, and a date worth putting in your calendar.

Shopify is retiring script tags. According to the official Shopify developer changelog, from October 1, 2026, apps can no longer create or update them, and the API will return an error if they try. From March 1, 2027, Shopify stops injecting script tags into storefronts altogether. Existing tags keep running until that date, and the query and delete operations stay available so developers can audit and clean up what is already there.

The replacement is app embed blocks shipped in a theme app extension, or a web pixel for anything that is purely analytics or conversion tracking. Both live outside your theme files and both disappear when the app does.

What this means for you as a merchant is that the leftover code problem is slowly being engineered out of the platform. The apps causing it are the older ones and the ones that have not modernised. Which leads neatly to how you avoid all of this next time.

How to stop this happening again

Prefer apps that use app blocks and app embeds. You can usually tell from the app’s own install instructions. If they say “activate the app embed in your theme editor”, good. If they say “paste this snippet into theme.liquid” or ask for collaborator access to edit your theme, you are signing up for cleanup later.

Check the listing before you install. An app that has been actively maintained through the theme app extension era is far less likely to leave a mess than one that has not seen a real update since 2020.

Keep an app log. A plain spreadsheet with the app name, install date, what it touched, and the support email. Thirty seconds per install. It turns a two hour archaeology dig into a five minute cleanup.

Duplicate your theme before installing anything new. Same logic as before you uninstall. A clean pre install copy of the theme gives you an exact reference for what the app added.

Uninstall through the admin, properly. Disable the app embed in the theme editor first, remove its app blocks from your templates, and only then delete the app from Apps in your admin. Doing it in that order removes the theme facing pieces while the app still has a chance to behave.

Ask before you uninstall. Email support and ask what needs removing. Do that while the app is still installed and you will usually get a much more useful answer.

Audit twice a year. Run a speed test, read the third party list, and make sure every domain on it belongs to something you actively pay for.

Frequently asked questions

Does uninstalling a Shopify app remove all of its code? Not reliably. Apps built with theme app extensions clean up automatically, since their code never lived in your theme. Apps that inject code into your theme files leave it behind, because uninstalling revokes the app’s access instantly and it has no opportunity to remove anything.

Will removing leftover app code break my store? It can, if you remove something that is still being used. The two classic mistakes are deleting a snippet that a section still renders, and deleting a script another script depends on. Working on a duplicate theme and previewing before you publish removes almost all of the risk.

Can I just revert my theme files to the original? You can, from the code editor, and it will strip out app injected code. It will also strip out every custom change you or your developer ever made to those files. On a store with real customisation, that is usually a worse outcome than the leftover code.

How do I know which app a leftover script belongs to? Copy the script URL or domain and search for it. Most third party script domains map straight back to a product name. You can also open the app’s demo store from its App Store listing, run a speed test on it, and compare the script URLs to the ones on your site.

Do leftover scripts really affect SEO? Indirectly but genuinely. They slow your pages down, which affects Core Web Vitals and conversion. Google does not penalise you for having an unused script, but it does account for how the page performs for real users.

Is there an app that cleans this up automatically? There are cleanup tools, and they can help you spot problems. Nothing safely automates the judgement call about whether a specific line is still needed, though. Detection is easy to automate. Deletion is not.

The short version

Uninstalling an app is not the same as removing it. The app leaves your admin, but any code it wrote into your theme stays exactly where it was, quietly loading on every page view for a service you no longer use.

Check your page source and your third party script list. Duplicate your theme before you touch anything. Email the developer, because they know what to remove. Preview everything before you publish. And going forward, favour apps that use theme app extensions so this is not your problem again in two years.

Twenty minutes of housekeeping today saves you a mystery you cannot solve later.