Open Settings, then Apps and sales channels, on a Shopify store that has traded since 2022. Count the rows. Now open your theme code and search for the word pixel. On an older store the second number is often the larger one, because Shopify’s own help pages say some apps add theme code that uninstalling never removes.
That gap is the Frankenstack. A Frankenstack is a storefront carrying third-party code nobody chose, firing events nobody reads, into accounts nobody checks. It is an operations problem, not a branding one.
A martech stack audit is a written inventory of every piece of third-party code that runs on your storefront and checkout: what loads it, what event it sends, where that event lands, and who pays for it. You have a Frankenstack the moment that inventory runs longer than your installed app list.
This is for the operator who inherited the store, not the team that just launched
You run a Shopify or Shopify Plus store that has changed theme, agency or owner at least once. Somebody before you installed a heatmap tool, two review apps and a tag manager. You cannot say which of them still runs on a product page today.
This is not for a store launched in the last six months on one theme with five apps. Your inventory is short enough to read in an afternoon, and nothing has been abandoned yet. Come back after your first replatform.
Count what runs on the page, not what sits in your app list
Your app list is a billing record. It does not tell you what executes when a shopper loads a product page. Third-party code reaches a Shopify storefront by four routes, and only two of them are visible from the Apps screen.
An app embed block is code an app ships inside your theme, switched on and off in the theme editor. A script tag is a file an app asks Shopify to inject on every page. A custom pixel is tracking code pasted into Settings, Customer events. A theme snippet is code somebody pasted straight into a Liquid file by hand.
| Route | Where you check it | What happens when the app is uninstalled |
|---|---|---|
| App embed block | Online Store, Themes, Customize, App embeds | Stops running with the app. |
| Script tag from an app | Not listed in admin, read the page source | Stops with the app. Shopify stops injecting all script tags on 1 March 2027. |
| Custom pixel | Settings, Customer events | Keeps running until you delete it. |
| Theme snippet pasted by hand | Online Store, Themes, Edit code, search for pixel and gtag | Keeps running until you delete it. |
Work the routes in that order. Write one row per finding: the route, the vendor, the event it sends, and the person who asked for it. Rows with nobody in that last column are your first candidates to cut.
That inventory tells you what runs. It does not tell you whether the numbers coming out are right. Checking events against real orders is analytics and attribution work, which is the measurement side of what Autonomous Technologies builds for Shopify operators. It is a separate pass with a separate owner.
Shopify has already set the dates that force half of this cleanup
You do not have to win an argument about the oldest code on your store. Shopify has published the dates it stops working. Two of those dates have already passed. Additional Scripts was the box in checkout settings where stores pasted tracking code by hand. Shopify Plus is Shopify’s enterprise plan, and it hit the first deadline a year before everyone else.
| What stops working | Date | Who it applies to |
|---|---|---|
| checkout.liquid and Additional Scripts on the Thank you and Order status pages | 28 August 2025 | All stores. |
| Script tags on the Thank you and Order status pages | 28 August 2025 | Plus stores. |
| Script tags on the Thank you and Order status pages | 26 August 2026 | Non-Plus stores. |
| scriptTagCreate and scriptTagUpdate return a user error | 1 October 2026 | Every app. |
| Shopify stops injecting script tags into storefronts | 1 March 2027 | All stores. |
Those rows come from Shopify’s own checkout.liquid documentation and from its script tag deprecation changelog, posted 24 August 2026. Both were read on 21 September 2026.
Code that only ever measured something is not worth migrating twice. Shopify’s guidance is plain. Replace a script tag with an app embed block. If the script only collects analytics or conversion data, use a web pixel instead. A web pixel is Shopify’s own sandboxed container for tracking code. Decide which of the two each leftover is before you move it. Delete the ones that were only reporting to a dashboard nobody opens.
Two tags reporting the same order is worse than one reporting nothing
A stack with no tracking gives you a blank. A stack with two tags on the same order gives you a number that is wrong and confident, and you will spend money against it.
Shopify names this risk directly in its pixel migration guide: a common issue when migrating is tracking the same event more than one time. It happens when old code stays in theme files or Additional Scripts after the new pixel goes live. Both fire. Both report.
The reverse defect is quieter and harder to catch. On a measurement rebuild for a US legal software team, the form-start event was firing on page load rather than on user action. Every visitor looked like a lead. The same property had no key events configured at all, so a live paid checkout was not represented as purchases anywhere in the reporting.
So your audit needs a second column after “does it fire”. It needs “does it fire when the thing actually happened”.
Buy something from your own store before you delete anything. Place one real order, then read every destination the stack reports it to: your Shopify reports, your ad accounts, your email tool, your analytics property. Write down which saw it once, which saw it twice, and which invented it. One test order will teach you more than the app list ever will.
Uninstalling an app does not delete its code, and does not always stop the bill
Shopify’s uninstall guidance is direct on both points. Some apps add code to your online store theme that is not automatically removed when you uninstall the app. Shopify tells you to check the app’s listing, or ask the developer, before you remove it.
On money, the same page says uninstalling a paid app cancels future recurring charges, but you might still be billed for the current billing cycle. Apps that charge outside Shopify keep charging until you cancel with the vendor yourself.
That makes the order of operations matter more than the decision to cut.
- Read the app’s uninstall notes before you touch anything.
- Duplicate your live theme and delete the leftover code in the copy.
- Test the copy: a product page, the cart, and one real order.
- Publish the copy, then uninstall the app.
- Cancel any subscription billed outside Shopify.
An app you uninstalled without reading its uninstall notes is not gone. It is unsupported, and it is still on the page.
Weigh every leftover against the 200 milliseconds a shopper can feel
Speed is where this stops being tidiness and starts being money. Interaction to Next Paint, or INP, measures how long your page takes to respond after a shopper taps or clicks. Google publishes the bands, so you do not have to invent a threshold.
| Interaction to Next Paint | Google's verdict | What it means for the cleanup |
|---|---|---|
| 200 ms or less | Good responsiveness | Cut leftovers for cost and accuracy, not for speed. |
| Above 200 ms, up to 500 ms | Needs improvement | Remove leftovers first. Measure again before buying anything new. |
| Above 500 ms | Poor responsiveness | Treat the stack as a revenue defect, not a chore. |
Those thresholds come from web.dev’s INP reference, last updated 2 September 2025. Measure on a phone, on a product page and on the cart, before and after each removal. That is how you learn which app was the cost rather than guessing.
What breaks during the cleanup, and who owns each piece
Nothing here is risk free. Every route you touch is feeding something, and the person who notices the break is rarely the person who made it.
| What you touch | What breaks if you get it wrong | Who owns it |
|---|---|---|
| Custom pixels in Settings, Customer events | Conversion reporting in your ad accounts goes quiet mid-campaign. | Whoever runs paid media. |
| Theme snippets in Liquid files | A product page or the cart stops rendering. | Your theme developer. |
| App embed blocks | A visible feature disappears: reviews, badges, upsells. | The merchandising owner. |
| Subscriptions billed outside Shopify | You keep paying after the code is gone. | Finance. |
| The inventory document itself | Six months on, nobody can say which tags are deliberate. | The operations lead. |
Give the inventory a named owner and a review date. The rule that keeps a stack clean is not a tool. No new app goes on without a row in that document, naming what it sends and who reads it.
Martech stack audit questions Shopify operators ask
What is a Frankenstack, in one sentence?
A Frankenstack is a storefront running third-party code that accumulated one app at a time, where nobody can name what each piece sends or who reads it. The test is simple: list what actually runs on a product page, and compare it with your installed app list.
Will uninstalling an app remove its code from my theme?
Not always. Shopify’s own help pages state that some apps add code to your online store theme that is not automatically removed when you uninstall the app. App embed blocks and script tags stop with the app. Hand-pasted theme snippets and custom pixels do not.
How do I find tracking code that is not listed anywhere in the Shopify admin?
Open a product page in a browser, view the page source, and read the script sources. Then check Settings, Customer events for custom pixels, and search your theme code for pixel, gtag and connect. Script tags injected by apps only show up in the page source.
Which leftover should I remove first?
The one that reports the same order twice, because it is actively making your numbers wrong. After that, remove anything with no named owner. Leave anything touching cart or checkout until you have tested it on a duplicate theme.



