Shopify Checkout Extensibility Broke Your Tracking: What to Check
Shopify quietly changed the single most important page in your entire funnel, and most store owners found out when their return on ad spend looked too good to be true. If your conversion counts dropped, your cost per purchase collapsed to something suspiciously low, or your ad platforms suddenly report a fraction of the orders you can see in your Shopify admin, this is almost certainly why. The checkout is where the money is measured, and Shopify moved it.
The mechanism is deprecation. Shopify retired checkout.liquid and the additional scripts fields that stores used for years to hardcode their Meta Pixel, GA4, and Google Ads tags. When your store migrated to checkout extensibility, those scripts stopped running, and nobody sends you an email when a pixel goes silent. The orders keep flowing. The tracking does not. Right now this is the most common source of silent conversion loss we see on Shopify, and it is expensive precisely because everything else still looks normal.
What Shopify actually deprecated and when
For most of Shopify's history, the checkout was a Liquid template you could edit directly through checkout.liquid, and both the checkout and the order status (thank you) page exposed an "Additional scripts" text box. Marketers pasted their tracking snippets there because it was the last page a buyer saw after paying, which made it the natural place to fire a purchase event with the real order total.
Checkout extensibility replaced that model. checkout.liquid is deprecated, and the additional scripts fields are deprecated with it. Shopify Plus stores were pushed to migrate first, with hard deadlines, and non Plus stores were moved onto the new checkout as well. The old customizations do not carry over. Any raw script you left in checkout.liquid or in an additional scripts box simply stops executing once the new checkout is live. There is no error, no warning banner in most cases, and no gap in your order data. The only visible symptom is downstream, in your analytics and your ad accounts.
Why your hardcoded pixels went silent
The old approach worked because you had direct access to the page. You could drop a <script> tag on the order status page, read the Shopify checkout object for order details, and call fbq('track', 'Purchase', ...) or push a purchase event to the GA4 data layer right there. It was fragile, but it fired.
Checkout extensibility removes that direct access. You no longer own the checkout markup, so there is nowhere to paste a raw tag. Third party scripts are not allowed to run arbitrarily on the checkout for security, performance, and privacy reasons. This is the core reason your tracking broke: the specific technique that every tutorial taught you, pasting a snippet on the thank you page, is the exact technique Shopify removed. If your purchase events lived only in those boxes, they are gone.
The sandboxed Web Pixels environment changes the rules
Shopify's replacement is the Customer Events API, also called Web Pixels. Instead of writing script that runs on the page, you register a pixel that runs inside a sandboxed web worker isolated from the storefront DOM. Your code subscribes to a defined set of customer events, such as checkout_completed, product_added_to_cart, and page_viewed, and receives structured event data including order value, currency, line items, and customer information subject to permissions.
The sandbox is the important part. Because your pixel runs in an isolated worker, it cannot touch the page's DOM, cannot read arbitrary cookies, and cannot run the classic browser snippets that assume full page access. Many vendor tags were written to manipulate the DOM or read globals directly, so they do not work as is inside the sandbox. You either use a version of the tag built for this environment, load it through the sandbox's network calls, or move that measurement server-side. Consent also runs through Shopify's Customer Privacy API, so a pixel set to respect consent will not fire until the shopper has granted the relevant permissions.
What breaks, platform by platform
The failure is not limited to one tool. Every tag that lived on the old checkout or thank you page is affected in the same way, but the fix differs slightly per platform. Here is the pattern we see most often, and the correct replacement for each.
| Old method | Why it broke | New method |
|---|---|---|
| Meta Pixel Purchase in additional scripts | Raw fbq snippet no longer runs on checkout | Custom pixel firing Purchase on checkout_completed, plus Conversions API server-side |
| GA4 purchase via hardcoded gtag or dataLayer | Script tag removed with checkout.liquid | Custom pixel sending the purchase event to GA4, or GA4 via a server-side tag |
| Google Ads conversion tag on thank you page | Global site tag no longer present at checkout | Custom pixel with the Google Ads tag, ideally paired with Enhanced Conversions |
| TikTok Pixel CompletePayment in scripts box | Raw pixel code blocked in new checkout | Custom pixel firing CompletePayment on checkout_completed, plus TikTok Events API |
| GTM container hardcoded on checkout | Container snippet stripped on migration | GTM loaded through a custom pixel or moved to server-side Google Tag Manager |
| Post purchase upsell tracking scripts | Order status additional scripts deprecated | Subscribe to checkout_completed in a custom pixel |
| Affiliate and attribution tags in scripts box | Same deprecated additional scripts field | Custom pixel or the vendor's Shopify app using Customer Events |
Read the middle column carefully. Every row breaks for the same underlying reason, which is why this is a single fix applied consistently rather than seven unrelated bugs. If you have been chasing each platform separately, that is the tell.
How to re-implement each conversion correctly
The clean path is to add a custom pixel under Settings then Customer events, and subscribe to checkout_completed. From that event you read the order total, currency, transaction ID, and line items, then call each platform's tracking function with that data. This gives you one place that fires Meta's Purchase, GA4's purchase, Google Ads, and TikTok's CompletePayment from a single reliable trigger, using real order values rather than guessed ones.
For Meta and TikTok specifically, do not stop at the browser pixel. Add the server-side connection, the Meta Conversions API and the TikTok Events API, and send the same purchase from your server or through a middleware. When you send the same conversion from both the browser and the server, you must deduplicate. For Meta, send a shared event_id along with a matching event_name on both the pixel event and the Conversions API event so Meta collapses them into one. Skipping deduplication double counts every sale and corrupts your optimization data, which is its own expensive failure.
For Google Ads and GA4, pair the setup with Enhanced Conversions, which sends hashed first party data such as email and phone so Google can match conversions it would otherwise lose to cookie limits. Make sure Consent Mode v2 is wired up so the ad_storage, analytics_storage, ad_user_data, and ad_personalization signals reflect the shopper's actual consent state, because without those signals Google throttles or models your conversions and your reported numbers drift from reality. If you would rather not maintain browser pixels at all, a server-side tagging setup that receives the checkout_completed event and forwards clean, consent aware conversions to each platform is the most durable option, and it survives future checkout changes better than any browser tag.
If you want the underlying diagnostic method rather than just the Shopify specific fix, our conversion tracking broken audit guide walks through isolating exactly where an event dies, and if GA4 is your primary concern, why GA4 is not tracking purchases covers the event level failures that persist even after you migrate. Both apply directly here.
How to confirm the fix actually fired
Do not trust the admin toggle. Place a real test order and verify each platform independently. Open GA4 DebugView and confirm a purchase event arrives with a value and currency attached. In Meta Events Manager, use the Test Events tool and confirm a single Purchase with the right value, and check that the browser and Conversions API events deduplicated into one rather than showing as two. For Google Ads, confirm the conversion action records and that Enhanced Conversions shows as active. For TikTok, confirm CompletePayment in the Events Manager. Then reconcile a full day of Shopify orders against what each platform reports for the same window. If the counts line up within a small margin, the migration is repaired. If they do not, you still have a leak.
Find out what your tracking is hiding
If your Shopify store migrated to checkout extensibility and your numbers have looked off ever since, you are very likely spending on ads that cannot see the sales they generate. Our conversion tracking repair service rebuilds your Meta, GA4, Google Ads, and TikTok tracking on Customer Events and server-side connections, deduplicates every conversion, and reconciles the result against your real Shopify orders so you can trust the numbers your optimization depends on. Book an audit and we will tell you exactly which events are firing, which are silent, and what it is costing you.
FAQ
Why did my Shopify conversion tracking stop working?
Shopify deprecated the checkout.liquid file and the additional scripts field where most stores hardcoded their Meta, GA4, and Google Ads tags. When you migrated to checkout extensibility, those scripts stopped loading on the checkout and order status pages, so no purchase events fired. The fix is to re-implement each conversion through the Customer Events (Web Pixels) API or a server-side connection.
What is the Customer Events API in Shopify?
Customer Events, also called the Web Pixels API, is Shopify's approved way to run marketing and analytics pixels after checkout extensibility. Your pixel code runs in a sandboxed environment that subscribes to standard events like checkout_completed instead of injecting raw script into the page. You add a custom pixel under Settings then Customer events, or install an app pixel.
Does checkout extensibility affect the order status page scripts?
Yes. The additional scripts box on the order status page is deprecated alongside checkout.liquid, and any code left there will stop running once your store moves to the new checkout. Anything you placed there for post purchase tracking, upsells, or third party tags needs to move to a custom pixel or a server-side setup.
How do I know if my Shopify purchase tracking is actually broken?
Place a real test order and watch GA4 DebugView and the Meta Events Manager Test Events tool for a purchase event with revenue. If no purchase appears, or the value and currency are missing, your tracking is broken. Comparing Shopify order counts against the conversions reported in each ad platform for the same window will confirm the gap.