1. Is the pixel connected?
Go to Settings, then Customer events, and look at the Status column. Shopify's help center (checked October 2026) is clear that a pixel has to be connected before it tracks anything. Pixels you've saved but not switched on sit under Disconnected pixels.
To fix it, open the pixel, save your code, click Connect and confirm. Disconnecting a pixel later doesn't delete it, so it's safe to switch one off while you test another.
2. Test it with the Shopify Pixel Helper
Open the pixel and click Test. Shopify opens your storefront with the Pixel Helper, which lists every event your pixel receives. Click through the store: page_viewed on each page, product_viewed on a product, product_added_to_cart, checkout_started, and finally checkout_completed after a test order.
A green dot means your subscription worked and your code ran. A red dot means the event arrived but your code threw an error. Uncaught errors are listed there too, which is usually the fastest way to find a typo or a missing pixel id.
- Only one custom pixel can be tested at a time.
- You can't edit the pixel while the helper is open. Save, close the helper tab, and start the test again.
- The event log clears on every new page, so watch it as you go.
- Shopify notes the helper doesn't work on headless storefronts or stores in private mode.
3. Is consent holding it back?
Each custom pixel has its own customer privacy settings. If permission is set to Required for marketing or analytics, the pixel waits until the visitor agrees in your cookie banner. In the Pixel Helper this shows as "Pixel is awaiting consent".
If you use a third-party cookie banner, it has to pass the visitor's choice to Shopify through the Customer Privacy API. Shopify warns that without that sync, the pixel might not fire even after the visitor accepts. Old cookies can also keep an earlier choice in place, so clear them before you test again.
4. Errors inside the sandbox
Custom pixels run in a sandbox, separate from your theme. Code that worked in theme.liquid doesn't always work there unchanged, and a single error stops the rest of the callback.
- Replace placeholder ids from code templates (like YOUR_PIXEL_ID) with your real one.
- Make sure the code subscribes to the events you need. A Purchase only goes out if something listens to checkout_completed.
- To see everything the pixel receives, subscribe to all_standard_events and log it to the console.
- If a vendor's script doesn't load, check your browser's network tab for its URL. In Chrome's console you can pick the pixel's own frame to see its errors.
5. Counting twice after a migration
Many stores moved their tracking into custom pixels from older places: theme.liquid, the checkout's additional scripts, or checkout.liquid on Shopify Plus. If the old code is still there, the same event can be sent twice. Shopify advises removing or changing existing pixel code before you add a custom pixel. Also check that an app, like a sales channel app, isn't sending the same pixel id.
6. What a custom pixel can't fix
Even a perfect custom pixel runs in the buyer's browser. checkout_completed only fires when the end of checkout loads in that browser. Buyers who close the tab after paying, pay through a redirect and don't come back, decline consent or block scripts don't send it. That's a limit of browser tracking, not of your code.
Settl closes that gap from the other side. Shopify tells Settl the moment an order is paid, and an hourly check picks up anything that slipped through. The purchase then goes server-side to Meta, TikTok, Google (GA4 and Google Ads), Snapchat, Pinterest, X, Microsoft Advertising and Reddit, with the saved ad click and the same event id as the browser, so each platform counts it once. Your custom pixels can stay as they are.