Back to Insights
    Performance8 min2025-06-10

    Your Shopify Store Is Probably Running Code From Apps You Deleted 6 Months Ago

    Last year, we made a decision that changed everything about how we work. We stopped being “developers who do Shopify” and went all-in on becoming a specialized Shopify engineering agency.

    That meant building our own apps from scratch. Not white-label. Not forks. From zero.

    I want to share what we learned, because if you’re a technical ecommerce manager on Shopify, some of this might hit close to home, especially if you’ve ever wondered why a Shopify store slow due to apps keeps happening even after you uninstall them.

    The Problem Nobody Talks About

    Here’s the dirty truth about the Shopify ecosystem: when you uninstall an app, it doesn’t clean up after itself. That upsell widget you tried for two weeks in March? Its JavaScript is still loading on every single page. That split-testing app you ran during Black Friday? Still diverting traffic. That currency converter you replaced? Still injecting CSS into your DOM.

    We call it Shopify ghost code, and it’s the #1 reason many merchants experience slow Shopify theme performance without understanding why.

    When we audit stores before building custom solutions, we regularly find 8–12 orphaned scripts from apps that were uninstalled months ago, sometimes years ago. Each one making a request, each one blocking render, each one contributing to Shopify LCP issues that lower your Core Web Vitals scores.

    And here’s the worst part: Shopify’s app uninstall process instantly revokes access, so the app can’t even clean up if it wanted to. In other words, proper Shopify app uninstall cleanup doesn’t happen automatically, the code just sits there.

    This is the kind of problem you only see when you’re deep in the code every day. Not when you’re just installing apps from the store.

    Why We Build Differently

    When we built our first app, Hotshop/Outfit Gallery, an interactive product gallery with shoppable hotspots, we obsessed over two things:

    1. Zero residue on uninstall. Our apps use Shopify’s Theme App Extensions exclusively. No Liquid snippets injected into your theme.liquid. No leftover assets. No ghost scripts. When you uninstall, the code disappears. Completely. This prevents the typical Shopify store slow due to apps problem from ever happening. It’s the opposite of how most apps work, but it’s how all apps should work.

    2. Surgical data fetching with GraphQL. Shopify went all-in on GraphQL and made it mandatory for all new apps since April 2025. But there’s a big difference between “using GraphQL” and using it well. Most apps over-fetch data because developers copy-paste queries from the docs without considering what they actually need. We write queries that request exactly the fields required, nothing more. The result: fewer API calls, smaller payloads, and apps that respect your rate limits.

    For context: a poorly written GraphQL query fetching product data might return 50+ fields per product when you only need 6. Multiply that across hundreds of products and it’s a real performance problem, contributing to the same slow Shopify theme performance you’re fighting.

    What Technical Ecom Managers Actually Struggle With

    After a year of building on Shopify full-time and talking to merchants and ecommerce teams daily, here are the real pain points I keep seeing:

    Theme performance degradation over time. Stores launch fast, then gradually accumulate technical debt. App residue, redundant JS libraries, outdated pixels, CSS bloat from quick-fixes, all adding up to Shopify LCP issues and slow page loads. By the time someone notices, the speed score has dropped from 80 to 40 and nobody can pinpoint why.

    The GraphQL migration gap. Shopify deprecated REST for new apps, but the ecosystem is still catching up. Apps built on legacy REST endpoints can’t handle the new 2,000+ variant limit per product. If you’re on Shopify Plus and your apps haven’t migrated, you’re going to hit walls, and Shopify will tell your merchants it’s the app’s fault, not theirs.

    No visibility into what apps actually do to your theme. You install an app, it injects code. You uninstall it, the code stays. There’s no dashboard, no audit trail, no way to see what’s running unless you manually dig through theme.liquid and every snippet file. For a technical ecom manager running 15–20 apps, this is a nightmare, and a leading cause of Shopify ghost code.

    Conversion tracking inconsistencies. Every analytics app tracks sessions differently. Cookie-based, fingerprint-based, server-side, they all give different numbers. When your CEO asks why Shopify Analytics says one thing and your app says another, you don’t have a good answer.

    What We’re Building Next

    After shipping the gallery app, we moved straight into CRO Navigator, a conversion rate optimization tool that approaches analytics differently.

    Instead of just showing you numbers, it compares your funnel against industry benchmarks and tells you exactly where you’re losing money. Not “your bounce rate is high,” but: “Your add-to-cart rate is 23% below the benchmark for your niche, and fixing this one step would recover €X per month.”

    The tracking is session-based and anonymous. No cookies. Fully GDPR-compliant by design, not as an afterthought. And the theme extension loads under 2KB, because an analytics tool causing Shopify LCP issues would be a contradiction.

    What 10x Better Actually Looks Like

    We’ve thought a lot about what it means to do this 10x better than other players in the Shopify app space. It’s not about features. Every app has features. It comes down to three things:

    1. Performance as a feature. We test our apps against Shopify Core Web Vitals before submission. INP under 200ms. TTFB optimized. CLS minimized. We make sure our tools improve performance instead of adding to the pile of code that causes slow Shopify theme performance.

    2. Clean architecture, clean uninstall. Theme App Extensions only. No legacy Liquid injections. When a merchant removes our app, their store returns to its exact previous state. No Shopify ghost code, no 404s from missing assets.

    3. GraphQL-native from day one. Not migrated from REST. Not using GraphQL as a wrapper around REST patterns. Built natively with efficient queries, proper pagination, and respect for rate limits. This means our apps play well with others, they don’t hog your store’s API budget.

    The Bigger Picture

    We’re a team based in Duhok, Kurdistan Region of Iraq. We made a deliberate choice to specialize rather than generalize. To go deep into Shopify’s architecture rather than spread across platforms.

    That specialization means we understand things like: why your TTFB is 1.9 seconds (spoiler: database queries), why your CLS fluctuates (reserve space for dynamic content), why that random app broke your add-to-cart button on mobile (event listener conflicts), and why your theme is slower today than six months ago (yes, ghost code).

    We’re not trying to be the biggest agency. We’re trying to be the one that technical ecommerce managers trust when their store’s performance is on the line, and they need people who actually understand what’s happening under the hood.

    Frequently Asked Questions

    What is Shopify ghost code?

    Ghost code is leftover JavaScript, CSS, and Liquid snippets that remain in your Shopify theme after you uninstall an app. Because Shopify’s uninstall process revokes app access instantly, the app cannot clean up its own code. These orphaned scripts continue loading on every page, slowing down your store.

    How do I find ghost code in my Shopify store?

    You need to manually inspect your theme.liquid file and all snippet files for references to apps you’ve already uninstalled. Look for script tags, link tags, and Liquid includes that reference app names or domains you no longer use. A Shopify performance audit can also identify these orphaned scripts.

    Why does my Shopify store get slower over time?

    The most common reason is accumulated technical debt from app residue (ghost code), redundant JavaScript libraries, outdated tracking pixels, and CSS bloat from quick-fixes. Each contributes to higher LCP scores and slower Core Web Vitals, gradually degrading performance without any single obvious cause.

    What are Shopify Theme App Extensions?

    Theme App Extensions are Shopify’s modern way for apps to add functionality to your store. Unlike legacy Liquid injections, Theme App Extensions are fully managed by Shopify, when you uninstall an app that uses them, all of its code is automatically removed. This eliminates ghost code entirely.

    Conclusion

    If any of this resonated, or if you’re dealing with Shopify ghost code, app uninstall cleanup, or unexplained performance issues, we’d love to connect.

    This is the work we do every day.

    CONTACT

    Fix your store. Book a free discovery call now!