The short version
You can run the core of a Shopify code audit yourself, for free, in about an hour: back up the theme, then work outward to leftover app code, your apps, access and the legacy checkout layer.
Patch a modern Online Store 2.0 or Horizon theme with shallow, documented edits, and rebuild when the theme is vintage or buried in undocumented code, knowing a rebuild keeps your products, orders and collections but not theme settings, custom code or app tweaks.
A paid audit runs roughly $500 to $20,000 depending on scope, but each of those figures is one vendor's own listed price, not a market benchmark.
If you find redirects, altered templates, or accounts and apps you never added, treat it as a compromise and contact Shopify Support before any code work.
What's New Since Publication: Updated since publication · 5 changes
- Shopify's admin opens the themes page from Online Store, without a Themes submenuShopify's Help Center now says "From your Shopify admin, go to Online Store" to reach your themes; in August 2026 it said Online Store > Themes, and in our dev store on October 20, 2026, Online Store has no Themes item under it. We updated the admin path.
- Two audit price sources were rewrittenShopExperts rewrote its Shopify CRO cost and theme customization cost guides on October 19, 2026. It no longer prints a $500–$3,000 CRO audit range, a $500–$2,500 theme audit range, or a $75–$300 hourly rate. Our cost table now uses its package data instead: one-off CRO, UX and store audits have a median of $600, with the middle half at $325–$1,500, and theme-work hour packs work out at $30–$125 an hour. The theme audit row is gone, because the guide no longer prices one.
- October 1 passed: ScriptTag writes are closedSince October 1, 2026, the Admin API rejects new and updated ScriptTags. Existing storefront tags keep running until March 1, 2027, and the calls that list and delete them still work, so an audit can still find and clear yours. Shopify's non-Plus upgrade guide now describes August 26 as the deadline for non-Plus stores to upgrade, and its developer timeline says script tags stopped running on the Order status page that day, rather than describing an automatic upgrade. This page's timeline and wording now follow that, and two vendor hourly-rate links that had gone dead now point to a live ShopExperts rate.
- The non-Plus Thank-you deadline passed — that audit row became a findingAugust 26, 2026 has arrived. Per Shopify's upgrade guide, that was the deadline for non-Plus stores to upgrade their Thank-you and Order status pages, and script tags stopped running on the Order status page for non-Plus stores. For an audit this changes the verdict rather than the checklist: what used to be a dated liability to plan around is now something to look for in what already broke — tracking that stopped reporting, widgets that vanished from the Thank-you page.
- Shopify put an end date on the whole ScriptTags layerTwo dates now bound this layer, and the second one ends it. Shopify has deprecated script tags: under that deprecation, starting October 1, 2026, the Admin API rejects new and updated ScriptTags — the write calls return an error on every API version — and the deprecation runs to March 1, 2027, when Shopify stops injecting script tags into storefronts, the last surface where they still ran. The layer this audit teaches you to hunt is therefore finite: existing tags keep firing until the 2027 date, the calls that list and delete them survive both, and the replacements Shopify names are an app embed block in a theme app extension or a web pixel for analytics-only scripts. The ScriptTags section and the dated timeline now carry both dates.
A popup you deleted months ago still flashes on mobile. A product page loads a review widget from an app you stopped paying for. Or you've just taken over a store — bought the business, or inherited it from an agency that's gone quiet — and you have no idea what's actually inside the theme. Nothing is on fire, but nothing feels safe to touch, either. That uncertainty is exactly what a Shopify store code audit resolves: it tells you what's in there before you decide to live with it, fix it, or start over.
Something's Off in a Store You Didn't Build
Key takeaway
The reassuring part is that finding out what's in there is completely safe. Reading your theme code, scanning your app list, and checking access in the admin changes nothing — the code editor only writes changes when you click Save, so you can look at everything without risk. A code audit is just a structured walk through each of those layers — theme code, leftover app residue, access, and the ageing checkout layers — to decide what to keep, fix, or rebuild.
One boundary worth setting up front: this is a code-and-health audit, not an SEO one. Duplicate URLs, canonicals, and crawl issues are a separate job — our guide to a Shopify technical SEO audit covers that side. And if you're buying a store rather than building one, treat the code as part of due diligence: acquisition guides stress confirming the source code is clean and transferable before you pay.
When You Actually Need One
Key takeaway
You don't audit a store for fun — you do it when one of these is true. See which of the six situations below matches yours; most readers land on at least two.
What's Hiding Inside the Theme
Key takeaway
An audit works in layers, from the code inside your theme outward to the apps and accounts around it. Start inside the theme, where three things tend to hide: an ageing architecture, leftover app code, and invisible scripts.
Which Theme Generation Are You On?
Key takeaway
Every Shopify theme belongs to one of three generations, and which one you're on shapes the whole fix-versus-rebuild decision. Vintage themes use the original, pre–Online Store 2.0 architecture, aren't sold in the Theme Store anymore, and — for Shopify's free vintage themes — don't receive updates beyond security fixes. Online Store 2.0 themes brought sections on every page and dynamic sources; the latest generation adds theme blocks, including the Horizon family. If you're unsure how to tell them apart or whether to upgrade, our guide to Shopify Online Store 2.0 breaks the architectures down.
Theme Generation → Audit Implication
| Generation | How to tell | What it means for your audit |
|---|---|---|
| Vintage (pre–OS 2.0) | Built on the original theme architecture, from before the mid-2021 Online Store 2.0 shift; no sections on most pages; free vintage themes only get security fixes | A rebuild is usually the honest call — vintage themes aren't sold in the Theme Store and won't gain modern features |
| Online Store 2.0 (Dawn era) | Sections on every page, dynamic sources, metafields | Usually fixable — patch the theme and migrate app code to app blocks where possible |
| Theme blocks (Horizon family) | Theme blocks; Horizon or another recent theme | Modern base — point the audit at ghost code and app bloat, not the architecture |
Ghost Code: The Residue Apps Leave Behind
Key takeaway
Here is the trap that catches most inherited stores. When you uninstall an app, does it clean up after itself? Often, no — and Shopify says so plainly.
Uninstalling apps often leaves the code edits, or ghost code, behind in the theme, which can cause quality and performance issues and takes merchants off their theme upgrade paths.
Shopify draws a sharp line between modern and legacy integrations. Apps built as theme app extensions add app blocks that are removed automatically and entirely when you uninstall them. Older apps worked differently — they added snippets to the theme and injected JavaScript into your layout, and some apps add code to your theme that isn't automatically removed when you uninstall the app. That leftover is what practitioners call ghost code.
Even an app built this way can leave one switch behind. When we tested a bundles app on a development store in September 2026, its app embed stayed switched on in both themes after the final uninstall. The widget had already gone from the storefront, so the embed was empty, but it stayed on until we switched it off ourselves in the theme editor under App embeds. That was one app on one store, so treat it as a quick check, not a rule — the full uninstall log is in our Kaching Bundles test.
In practice it looks like orphaned snippet files with app-branded names — a leftover loox-reviews.liquid or privy-popup.liquid — and render tags that point at snippets which no longer exist. One agency names popup, email-capture, review, and chat apps as the usual culprits for leftover code. The damage is rarely one dramatic file; as one store audit put it, it's accumulation — layers of dead scripts from tools swapped out over the years.
Page builders are one case some vendors document themselves: PageFly and Replo each list theme files to delete by hand, and our landing page guide sets out what happens to your pages and theme when you remove a page builder.
ScriptTags and Injected Trackers: The Invisible Layer
Here is the practical version. If a tracker still fires after you've removed the app, it's almost always theme-injected code you can find by searching the theme (step 3 of the checklist below) — when an app is uninstalled from a shop, all of the script tags that it created are automatically removed along with it, so a live ScriptTag rarely lingers.
The complication is that a ScriptTag — remote JavaScript an app loads into your storefront — has no built-in admin screen that lists it (the Customer events page only shows Web Pixels API apps), so for anything still hidden after your own search, a developer queries the Admin API.
There is now an end date on this whole layer, and it changes what “fix it” means. Shopify has deprecated the mechanism, and on March 1, 2027 it will stop injecting script tags into storefronts. That is the last surface where they still ran, which Shopify says outright: storefronts are the last place script tags still run, since they already stopped working on the Order status page. The same deprecation closed the write side earlier: starting October 1, 2026, the Admin API rejects new and updated ScriptTags, on every API version, so pinning an old one buys nothing.
The read and delete calls survive both dates, which is the part that matters for an audit: a developer can still list what you have and remove it. What you should not accept after this is a developer proposing to “just add a script tag” for new tracking — the replacements Shopify names are an app embed block in a theme app extension, or a web pixel if the script only collects analytics or conversion data. An admin-created custom app can't use either, so Shopify's guidance there is to move the script into the theme, in a custom Liquid block where possible. Both dates are in the timeline below.
Beyond the Theme: Apps, Access, and Legacy Layers
Key takeaway
Your App and Access Inventory
Key takeaway
Move outward from the code to what surrounds it. This is the fastest part of the audit to do yourself, and often the quickest money saved.
Collaborator accounts are the classic blind spot: they're Shopify Partners you allowed in, and collaborator accounts don't count toward your store's user limit, so they don't show up where you'd expect to count heads. Review them, and remove anyone whose work is long finished. Deciding what the ones you keep should still be able to see is a separate call — our guide to who gets into your Shopify admin works through it by permission category.
App bloat is the other quiet drain. One audit specialist who reviewed 100 stores put the median app spend at $580 a month, with the top quarter over $1,200 — one person's sample, not a market benchmark, but a useful gut check. Unused apps also cost speed: one audit describes a retired size-guide app that still fired on every product page for a feature no one used.
To measure that on your own storefront, Shopify's built-in Web Performance report charts your Core Web Vitals against every app install and theme change. For the structural speed patterns behind those numbers — and a store-wide pattern audit — see what the best Shopify stores do differently.
The Dated Liabilities: checkout.liquid and Shopify Scripts
Key takeaway
Some of what an audit finds isn't messy — it's expiring. Shopify has been retiring the old ways apps and themes hooked into checkout, and each has a date attached. If your inherited store leans on any of them, check the dates: most have already passed, and the last one is still ahead.
If your store customized the Thank-you or Order status pages, that's the highest-priority dated item. On a non-Plus plan that customization lived in additional scripts and script-tag apps — checkout.liquid was always a Plus-only file — and the new pages replace it: August 26, 2026 was the deadline for non-Plus stores to upgrade. What replaces it, and what a migration costs, is the whole subject of our guide to checkout extensibility.
Likewise, any discount, shipping, or payment logic that ran on Shopify Scripts already stopped on June 30, 2026 — silently. If an inherited store's rules quietly changed, that is often why; our guide to the Scripts-to-Functions migration maps each piece to its replacement.
Pulling the whole map together, here is what an audit typically surfaces — how serious each finding is, and whether it's a do-it-yourself fix or a job for a developer.
Red Flags at a Glance
| What the audit finds | Severity | Who fixes it |
|---|---|---|
| Render/include tags pointing at snippet files that no longer exist | Breaks pages | DIY after backup, or developer |
| Stray script tags hard-coded into theme.liquid | Slows the store | Developer |
| Hard-coded prices or currency in the theme | Breaks with Shopify Markets | Developer |
| Deprecated {% include %} tags | Tech debt | Theme Check finds them; developer replaces them |
| Unknown ScriptTags, redirects, or admin users you didn't add (triage this first) | Possible compromise | Secure first, then Shopify Support |
| Two apps doing the same job | Wasted spend | DIY |
| A collaborator or staff account you don't recognize | Access risk | DIY — remove it |
| Thank-you/Order status customizations — additional scripts and script-tag apps on any plan, checkout.liquid on Plus | Expired Aug 26, 2026 (non-Plus) | Developer |
| Logic that depended on Shopify Scripts | Already dead | Developer or app |
| A vintage theme with heavy custom code | Upgrade blocker | Developer (rebuild) |
Severity and ownership are editorial guidance for a non-technical merchant, not a Shopify classification.
Fix or Rebuild? A Decision Framework
Key takeaway
With the map in hand, the big decision is a fork: patch the theme you have, or rebuild on a modern one. Neither is automatically right.
Lean toward a fix when your theme is a modern Online Store 2.0 or Horizon-generation theme, the customizations are shallow and documented, and the problems are isolated — a few ghost snippets, a duplicate app, one broken section. Lean toward a rebuild when the theme is vintage, the code is deep and undocumented, ghost code has accumulated for years, or you were planning a redesign anyway. Rebuilding on a current theme resets that debt to zero.
A rebuild sounds drastic, but it doesn't touch your catalog. Your products, collections, menus, pages, and blog posts aren't changed when you switch themes — they live in the admin, separate from the theme. What you rebuild is theme-specific: theme settings, section and block layout, text, code customizations (including app-added code), and templates. If a rebuild is your route, our Horizon theme guide covers migrating from Dawn to the current generation.
If the audit points to a rebuild rather than a patch, budget that separately. One agency lists a custom Shopify rebuild at $5,000–$20,000 and patching an existing theme at $2,000–$10,000+; another places a configured pre-built theme at $3,000–$5,000 and a fully custom build at $10,000–$20,000. Those are single vendors' figures.
For the full build-budget picture — parts, scenarios, and rates by region — see our guide to Shopify store development cost.
Not sure which fork is yours? Answer five quick questions about your theme, your code, and how you want to handle it — and get the route that fits, from a free DIY cleanup to a full rebuild.
Fix, Rebuild, or Clean Up: What's Your Route?5 questions → your cleanup route
The Free DIY Audit You Can Run Today
Key takeaway
Whatever route the quiz pointed you to, start here. Even if you'll hire a professional, these free checks tell you — and them — exactly what you're dealing with, and they cost nothing but an hour in your admin. Steps one through seven apply to every store; the last one — the legacy checkout and Scripts layer — matters most on an older store you inherited. Tick each off as you go; your progress saves on this device.
Your Free DIY Store Code AuditWork top to bottom. Back up first, then move from the theme code outward to apps, access, and the legacy checkout layer.
Your Free DIY Store Code Audit
Work top to bottom. Back up first, then move from the theme code outward to apps, access, and the legacy checkout layer.
Duplicate your live theme so you have a frozen, restorable copy before you look at or change anything.
Before you tick this off
- Duplicated the current live theme
- Named the copy with today's date
- Confirmed the backup opens in the editor
Open Online Store, then Edit code, and scan layout/theme.liquid for stray script tags and hard-coded snippets.
Before you tick this off
- Opened the theme code editor
- Scanned theme.liquid for unfamiliar script tags
- Noted anything hard-coded you don't recognize
Search the theme for the names of apps you've already removed, across theme.liquid, snippets, sections, and custom JavaScript files.
Before you tick this off
- Listed the apps you've uninstalled
- Searched the theme for each app's name
- Flagged leftover snippets and render tags to missing files
List every installed app, flag any that duplicate each other's job or that you no longer use, and note the monthly spend.
Before you tick this off
- Listed all installed apps
- Flagged duplicate-function and unused apps
- Totalled monthly app spend
Check both staff and collaborator accounts, remove anyone you don't recognize, and confirm two-step authentication is on.
Before you tick this off
- Reviewed staff accounts
- Reviewed collaborator accounts
- Removed unknown access and confirmed two-step auth
Review any legacy custom apps created in the admin — new ones can no longer be created there — and the store data their access tokens are allowed to reach.
Before you tick this off
- Opened Settings, then Apps, then the Legacy custom apps section
- Reviewed each custom app's API scopes
- Revoked or noted anything unexpected
Read your Core Web Vitals and the change-impact chart to see how apps and theme edits have affected speed over time.
Before you tick this off
- Opened the Web Performance report
- Noted your LCP and INP scores
- Checked the timeline for changes that hurt speed
Look for customizations on the Thank-you or Order status pages — additional scripts and script-tag apps on any plan, checkout.liquid only if you're on Plus — and any logic that depended on Shopify Scripts.
Before you tick this off
- Checked for additional scripts, or checkout.liquid if you're on Plus
- Checked the Thank-you and Order status pages
- Noted anything tied to Shopify Scripts
After you've duplicated the theme, it's safe to remove the obvious dead ends yourself — for example, a render or include tag that points at a snippet file which no longer exists throws a guaranteed error, so deleting that one reference only fixes things. Stop, though, at any live Liquid you don't fully understand, or CSS and JavaScript you can't trace to a source. That is where a wrong deletion breaks a working page — hand it to a developer instead.
How to Run Shopify Theme Check on Your Theme
Key takeaway
The DIY checklist reads the theme screen by screen; Theme Check reads it line by line. It is Shopify's free linter for the Liquid and JSON inside a theme. It detects errors and enforces Liquid best practices, and Shopify gives examples of what it catches: syntax errors, missing templates, unused variables and snippets, unknown and deprecated tags, and performance issues.
It runs through the Shopify CLI, which also builds and runs themes locally, so the work is getting the CLI and a local copy of your theme. If a terminal isn't your thing, use Download theme file in the theme's actions menu (Shopify emails you a .zip), unzip it, and open the folder in Visual Studio Code with the Shopify Liquid extension, which includes Theme Check and underlines problems in the editor.
npm install -g @shopify/cli@latest) or, on macOS, with Homebrew. It needs Node.js and Git on your machine — Shopify lists the minimum versions on its Shopify CLI reference.shopify theme pull, which retrieves the theme files from Shopify. Add --store with your store URL, then --live for the published theme or --theme with a theme ID or name. An empty folder matters: by default, pull can delete local files that don't exist in the remote theme. The first run prompts you to log in with the store owner account or a staff or collaborator account that has theme permissions.shopify theme check, or point it at another folder with --path. Results print in the terminal, and each one links to the documentation of the check it failed.A few options on the theme check command are worth knowing before you run it:
--listshows which checks are enabled.-Cor--configswaps in a preset such astheme-check:recommendedortheme-check:all, overriding any.theme-check.ymlfile in the theme.--initgenerates a.theme-check.ymlfile, where a developer can enable, disable, or re-rate individual checks.--fail-levelsets the minimum severity that makes the command exit with an error code, which matters when Theme Check runs in CI rather than by hand.-aor--auto-correctfixes offenses automatically, but only for the few checks that support it — more on that below.
Reading the Results and Handing Them Off
Key takeaway
Severity is Shopify's measure of "the relative importance of a check to the functionality and optimization of your theme," in three levels: error, warning, and info. The checks reference lists every check with its severity — ParserBlockingScript, for instance, is an error, while OrphanedSnippet, UnusedAssign, and RemoteAsset are warnings. Read the check's own page before ranking a finding: severity says how much the rule matters to Shopify, not what a given line costs your store.
Theme Check Findings → Audit Meaning
| Check | What it flags | What it means for your audit |
|---|---|---|
| MissingTemplate | A render, section, or include tag pointing at a file that doesn't exist | The dead-reference red flag above — the one cleanup you can do yourself after a backup |
| DeprecatedTag | The old {% include %} tag; Shopify's example replaces it with render | Tech debt, not an outage — a developer swaps it |
| OrphanedSnippet | Snippets that exist but are never referenced in the theme | Candidates for the ghost-code review — confirm the source before deleting |
| ParserBlockingScript | Script tags without defer or async, which block page rendering until the script loads | A speed finding — trace each script to its app or tracker first |
| RemoteAsset | Assets hosted on third-party domains | Check whether each domain belongs to an app you still use |
| LiquidHTMLSyntaxError | Liquid and HTML syntax errors | A developer fix — the template itself is malformed |
| UnusedAssign | Variables that are defined but never used | Low-priority cleanup for whoever next edits the file |
Auto-correct is not a shortcut to a clean theme. The checks reference marks only a few checks as auto-correctable, and the flag changes the files in the folder you ran it on — for a missing template it creates an empty file rather than removing the dead tag. Treat it as a developer's tool, not a cleanup button.
The report is a brief, not your to-do list. The one class you can act on yourself is the dead reference covered in the callout above; anything that touches live Liquid, scripts, or app code goes to a developer, along with the saved output. If you'd rather understand the code than lint it, our explainer on Shopify Liquid covers the language itself.
If You Suspect the Store Was Hacked, Secure It First
Key takeaway
Sometimes an audit turns up something worse than mess. Unknown redirects, template changes you didn't make, admin users or apps you never added — these aren't cleanup items, they are signs the store may be compromised. If that is what you are seeing, stop the audit and switch to securing the store. Two-step authentication is among the steps below, and if you are wondering whether you were ever obliged to have it on, our FAQ on whether Shopify requires two-step authentication separates the cases where the platform forces it from the ones where it is left to you.
If you think your account has been hacked or compromised, then contact Shopify Support immediately.
Then, if you can, change your login email password and your Shopify password, fix two-step authentication, and review finances, staff, apps and orders — the order and the details are in our FAQ on what to do if your Shopify account is hacked.
Once you're back in control, restore the theme from a known-clean backup rather than trying to clean the live one by hand. If you can't tell what was changed, that's the point to bring in both Shopify Support and a developer.
The steps above lock the store back down; they are not a malware investigation. For a confirmed breach — especially one involving customer data — involve Shopify Support and a developer experienced in incident response, and don't rely on a checklist alone.
What to Demand From an Auditor
Key takeaway
If the audit is beyond what you want to do yourself, the quality of what you hire is decided by what you demand up front. Across agencies that publish their audit format, the good ones are consistent: one documents each finding with a recommended fix, an effort estimate, and an impact projection; another prioritizes critical issues first. The output should be a fix list ranked by impact, not a page of generic advice.
Give the auditor access scoped to what the review needs, and revoke it once the report lands — the same hygiene you'd apply to any outside contractor. For the full process of finding, vetting, and briefing someone, see our guide to hiring a Shopify developer.
And if you're not sure whether you need a quick cleanup, a fix, or a full rebuild in the first place, our Shopify development guide routes you to the right specialist in about a minute.
How Much Does a Shopify Store Code Audit Cost?
Key takeaway
There is no official price list for a code audit, and the honest answer is that it depends on scope and on who you ask. The ranges below come from individual vendors' own pages — useful for orientation, not a market rate.
Audit Price Ranges by Type
| Audit type | Listed price (one source) | Source |
|---|---|---|
| Independent technical audit | $500–$5,000 | kaspianfuad |
| Full-store, multi-layer audit | $2,000–$5,000 | kaspianfuad |
| Agency audit (including Plus) | $5,000–$20,000 | kaspianfuad |
| One-time CRO, UX or store audit (43 marketplace packages) | $325–$1,500 for the middle half; median $600 | ShopExperts |
| Productized audit (audit-only, 7–9 business days) | $699 sale / $799 list | NinjaNutz |
Each figure is one vendor's own listed price, or for ShopExperts the spread of packages listed on its marketplace in October 2026, not a market benchmark or official Shopify data. The same marketplace, ShopExperts, says the 17 theme-work hour packs its experts list come to $30 to $125 an hour, with a median of $60. Verify current pricing on each vendor's page.
After the Audit: Keep the Store Auditable
Key takeaway
The point of an audit is to never need a bad one again. A little discipline keeps your store legible, so the next review takes an hour, not a week.
The single highest-leverage habit is version control. Shopify's official GitHub integration syncs your theme code to and from a repository, so every change is tracked and reversible — even if you never write code yourself, it gives you a history of who changed what. This walkthrough shows how to set it up without being a developer:
Backups matter too: duplicate the theme before every edit, and prune old copies so you stay under your plan's theme limit — 20 themes on Basic, Grow, and Advanced, and up to 100 on Shopify Plus. A duplicated theme is not a store backup, though: what Shopify restores for you and what it never will is a separate question, and we work through it in backing up a Shopify store.
The Bottom Line
Key takeaway
There is no single “store code audit” that fits everyone. What is fixed is the order of operations: look before you touch, know which generation your theme is, and separate a messy store from a compromised one. Get those right and the path is obvious — miss them and you either overspend on a rebuild you didn't need or keep living with problems you can't see.
Frequently Asked Questions
Front-end developer specializing in Shopify since 2017. Experienced in building custom Liquid themes, optimizing storefront performance, and integrating third-party apps. Directs the editorial process behind Ecom Store Pro: sets its topics and the rules every AI-written page must pass before publication.
This page was written by AI. Separate AI agents that did not write it check its figures and claims against official sources and test its links and interactive tools. A human editor sets the site's editorial direction, topics and rules and checks that pages are complete and display correctly, but does not check their facts or edit their text. Details may change — always confirm critical data at shopify.com.
Editorial PolicySome links in this article are affiliate links. If you sign up for a Shopify store through these links, we may earn a commission at no extra cost to you. Read our full advertising policy.
