How to Measure Checkout Drop-Off on Shopify When You Can't Script the Checkout

|Dan Giura
How to Measure Checkout Drop-Off on Shopify When You Can't Script the Checkout

TL;DR

The common assumption is that Shopify locks checkout measurement behind a plan or an app. It does not. Six checkout events are documented and current, they reach custom pixels as well as app pixels, and alert_displayed even reports the validation warnings that cause the stall [1][3]. The restriction is on the instrument: pixels run in a sandbox, arbitrary JavaScript in checkout is gone, customer fields are gated by protected-customer-data access, and consent can withhold the events entirely [2][3][4]. Every real limit on your funnel comes from one of those four, and each has a workaround or an honest caveat.

Key Takeaways

  • The six checkout events on Shopify's standard events page are checkout_started, checkout_contact_info_submitted, checkout_address_info_submitted, checkout_shipping_info_submitted, payment_info_submitted and checkout_completed, with no plan restriction stated [1].
  • alert_displayed "records instances when a user encounters an alert message, whether it's an inline validation message on an input field or a warning banner" [1], which turns a drop-off count into a drop-off reason. Few setups subscribe to it.
  • Custom pixels do collect events on "checkout and post-purchase pages" [3], so a step funnel is available without an app.
  • App pixels run in a strict sandbox and custom pixels in a lax one, and Shopify states plainly that "Adding and using custom pixels is unsupported by Shopify" [2][3].
  • GA4's ecommerce canon has begin_checkout, add_shipping_info, add_payment_info and purchase and no contact-step event [5], so a GA4 funnel always has fewer rungs than Shopify's bus.
  • Build the funnel on users or on order-joined counts, not on sessions, because the purchase can land in a different session from the checkout that produced it and flattens the last step.
  • No cross-store completion-rate benchmark is valid, because checkout configuration, one-page step collapse, post-purchase upsells and consent-region mix each change the denominator.

What can you collect from Shopify's checkout?

More than most merchants think, and the list is public.

Event What it marks
checkout_started The shopper entered checkout [1]
checkout_contact_info_submitted Contact form submitted [1]
checkout_address_info_submitted Mailing address submitted [1]
checkout_shipping_info_submitted Shipping method chosen [1]
payment_info_submitted Payment details submitted [1]
checkout_completed Order created [1]
alert_displayed An alert or validation warning appeared [1]

Shopify's standard events page documents 15 standard events, and nothing on it states a plan requirement for the checkout six [1]. That matters because the question "which plan do I need for checkout funnel data" runs into the documentation's silence rather than a tier.

The middle of that list is where the caveat lives. With one-page checkout, contact, address and shipping selection can happen on a single screen, and the step events may collapse or arrive in a tighter cluster than the six-step list implies. Shopify does not publish a statement about one-page event ordering, so confirm it with a test order on your own store rather than treating it as a rule.

Where the real restriction sits

The instrument is what Shopify locked down. Four constraints, in the order they will bite you.

Sandboxing comes first. Shopify's Web Pixels API documentation describes app pixels running in a "strict sandbox" and custom pixels in a "lax sandbox", and the custom pixels help page says that "Not all pixel functionality works in the sandbox" [2][3]. Custom pixels get analytics, browser and init, and unlike app pixels they have no access to the settings property [2].

Second, arbitrary JavaScript in checkout is over for everyone. Checkout extensibility replaced it with a fixed event set and UI extensions. If you are still reconstructing what that change did to your measurement, what broke and what did not in checkout extensibility is the shorter read than the changelog.

Third, customer fields on those events are gated. The personal fields carried by checkout events depend on an app's approved protected-customer-data access, so identity-based segmentation of the contact and address steps is not universally available. The field-by-field map lives in what customer data is available in Shopify web pixel events.

Fourth, consent. Shopify's Customer Privacy API defines four processing purposes, Preferences, Analytics, Marketing and Sale of Data, and it "is used to apply consent decisions to Shopify-managed surfaces, like pixels, audiences, and checkout" [4]. In regions where consent is not required, the documented default "is to allow all processing purposes" [4]. So where a shopper in a consent-required market declines, those events never report, and the size of that gap tracks your traffic mix.

Shopify also states plainly that custom pixels are unsupported [3]. Read that as a maintenance warning: custom pixels work, and you own them when they break.

Why does GA4 undercount the checkout funnel?

Because the purchase can land in a different session from the checkout that produced it, a funnel exploration built on sessions loses the last step against the first. The mechanism has its own walkthrough in why a purchase starts a new GA4 session on Shopify.

The correction is small and worth doing before you draw any conclusion from a funnel report. Build the exploration on users rather than sessions. Read step-to-step ratios, so payment_info_submitted divided by checkout_started, rather than comparing absolute totals across steps. And where the number has to be exact, join event counts to your Shopify order export by order ID rather than trusting the analytics total.

There is also a canon mismatch to plan around. GA4's recommended ecommerce events are begin_checkout, add_shipping_info, add_payment_info and purchase [5], with nothing for the contact or email step. Shopify's bus has that step; GA4 has no standard home for it. If you want it in GA4, it arrives as a custom event, and the full GA4 ecommerce canon on Shopify shows which rungs are native.

alert_displayed, the rung with a reason attached

This is the part of the topic nobody uses, and it is the best available answer to "why did they stop".

Every other event in the funnel tells you where the shopper was when they left. alert_displayed tells you what the store said to them: an inline validation message on a field, or a warning banner [1]. A drop-off spike at the shipping step with a matching spike in alerts is a configuration problem you can fix this afternoon. The same spike with no alerts is a pricing or shipping-cost problem, which is a different meeting.

Subscribe to it alongside the six, send it with the alert text or type as a parameter, and put it in the same report as the step counts. It is a documented event with a report-ready parameter, and it goes unused.

ui_extension_errored sits next to it on the same page [1] and is worth the same treatment if you run checkout UI extensions.

Can you compare your completion rate to another store's?

No, and the reason is mechanical rather than philosophical.

Four things change the denominator between any two Shopify stores. Checkout configuration differs, so the number of steps a shopper passes through differs. One-page checkout can collapse the middle steps, as above. Post-purchase upsells move checkout_completed to the first upsell page, which changes what "completed" counts, and where post-purchase upsell revenue goes covers that displacement. And consent-region mix determines how many sessions produce events at all [4].

Change any one of those and the same shopper behaviour produces a different completion rate. A benchmark from a case study or an app's marketing page describes that store's checkout configuration. Your own trend line, measured the same way month over month, is the comparison that survives.

Verify the funnel on your own store

Do this once, with a real test order, before you trust any dashboard.

  1. Go to Settings → Customer events in the Shopify admin and note which pixels are active. App pixels appear from their apps; custom pixels are listed separately.
  2. Open your storefront, add an item, and start checkout with the browser console open.
  3. Watch the event sequence as you move through contact, address, shipping and payment. Write down which of the six events actually fire and in what order on your checkout, since one-page checkout may not produce all six discretely.
  4. Deliberately trigger a validation error, a bad postcode is easiest, and confirm whether alert_displayed fires.
  5. Complete the order, then check GA4 in Reports → Realtime for purchase and confirm whether the session ID changed between payment_info_submitted and purchase. GA4 DebugView on Shopify is the faster surface for this if you have it configured.
  6. Repeat once from a consent-required region with consent declined, and record which events disappear. That difference is your funnel's blind spot, and it is the number to keep next to the report.

If you want the last rung captured without depending on the browser, WeltPixel Conversion Tracking [6] sends the completed-order step to GA4 and your ad platforms from Shopify's order record, with browser events respecting Shopify's Customer Privacy API signals.

For the sandbox itself in plain language, the Shopify Web Pixels API guide for marketers is the least painful introduction.

FAQ

Are Shopify's checkout events restricted to Shopify Plus?

No. Shopify's standard events documentation lists the six checkout events with no plan restriction stated anywhere on the page [1].

Can a custom pixel see checkout events, or only an app pixel?

Both can. Shopify's help documentation says custom pixels collect events on "checkout and post-purchase pages" [3]. Custom pixels run in a lax sandbox and have no access to the settings property, and Shopify notes that custom pixels are unsupported [2][3].

Why does my GA4 checkout funnel show more checkouts than purchases even on completed orders?

Usually because the purchase falls into a new session after the payment redirect, so a session-scoped funnel cannot connect the two. Rebuild the exploration on users, or join to your Shopify order export by order ID.

What is a good checkout completion rate for a Shopify store?

There is no valid cross-store number. Checkout configuration, one-page step collapse, post-purchase upsells and consent-region mix each change the denominator, so compare your own store month over month instead.

How do I see why shoppers abandon a specific step?

Subscribe to alert_displayed, which records the alerts a shopper encounters, from an inline field validation message to a warning banner [1], and report it beside the step counts. Alerts spiking with drop-off points at a configuration fault; drop-off without alerts points at cost or trust.

Sources

  1. Shopify.dev, "Web Pixels API standard events" (15 standard events including checkout_started, checkout_contact_info_submitted, checkout_address_info_submitted, checkout_shipping_info_submitted, payment_info_submitted, checkout_completed, alert_displayed "records instances when a user encounters an alert message, whether it's an inline validation message on an input field or a warning banner", ui_extension_errored; no plan restriction stated), shopify.dev/docs/api/web-pixels-api/standard-events, accessed September 10, 2026
  2. Shopify.dev, "Web Pixels API" (app pixels in a strict sandbox, custom pixels in a lax sandbox), shopify.dev/docs/api/web-pixels-api, accessed September 10, 2026
  3. Shopify Help Center, "Custom pixels" (events collected on checkout and post-purchase pages; analytics, browser and init APIs; no access to settings; "Not all pixel functionality works in the sandbox"; "Adding and using custom pixels is unsupported by Shopify"), help.shopify.com/en/manual/promoting-marketing/pixels/custom-pixels, accessed September 10, 2026
  4. Shopify.dev, "Customer Privacy API" (four processing purposes: Preferences, Analytics, Marketing, Sale of Data; applied to Shopify-managed surfaces including pixels, audiences and checkout; allow-all default where consent is not required), shopify.dev/docs/api/customer-privacy, accessed September 10, 2026
  5. Google Analytics 4 developer documentation, recommended ecommerce events (begin_checkout, add_shipping_info, add_payment_info, purchase), developers.google.com/analytics/devguides/collection/ga4/reference/events, accessed September 10, 2026
  6. WeltPixel Conversion Tracking, Shopify App Store listing, apps.shopify.com/weltpixel-conversion-tracking, accessed September 10, 2026

Ready to upgrade your tracking?

Server-side tracking for Magento and Shopify — accurate data, better attribution, full privacy compliance.