TL;DR
This is the pre-season pass, not the post-install one. It assumes your pixels already fired at least once and asks a different question: which of the nine destinations will behave differently from the others when volume triples. Nine channels, three checks each, plus one shared setting that quietly removes subscription renewals from every report when someone switches it on. The value here is the asymmetry. One channel has no test mode, one sends purchases only, one has no begin-checkout event, two route live traffic to a validation path while test mode is on, and refunds reach exactly one destination.
Key Takeaways
- Google Ads has no test or debug mode of any kind, so its only pre-season proof is a real order that shows up in the conversion column the next day.
- Snapchat and Pinterest test modes are per-pixel settings, not per-session ones. Turning either on diverts that pixel's real customer traffic to a validation path, so use a second pixel instance instead.
- Reddit's event set has no begin-checkout equivalent, and Google Ads sends purchases only, so a funnel comparison across all nine channels is never apples to apples.
- Every channel has an "exclude admin, POS and API orders" switch that defaults to off. On a subscription store, turning it on also stops renewal orders, which can be half your order count.
- All nine destinations send the Shopify order total including tax and shipping with discounts netted, in the shop's base currency, never recomputed from line items. A per-channel value gap is that platform's definition talking.
- Refund events reach GA4 only, cancellations reach nothing, and no destination gets an alert when sending stops. The pull-based accuracy view is what you check, and you have to open it.
- OpenAI's ads API documents a 30-day click attribution window and a validation call rather than a test console, plus an endpoint that returns a sample of events from roughly the last 15 minutes [1].
Is this the same as the post-install checklist?
No, and the difference decides whether this afternoon is worth spending.
The post-install list answers "did the install work": theme app embed present, a test purchase visible in GA4, Meta's browser and server events deduplicating, a single order reconciled end to end. That list is already written, it covers six channels, and it is the right place to start if you installed anything in the last month. Read the ten things to verify after install first and come back. If something is already broken and you need the recovery sequence rather than a checklist, the pixel audit walkthrough is the one to run.
This list assumes all of that passed months ago. It asks instead which channels will diverge under November volume, because the answer is not uniform and no generic checklist can carry it. Shopify's own BFCM 2025 report put the platform peak at $5.1 million per minute on Black Friday [2], which is the whole argument for doing this in September: the same broken check costs a rounding error today and a real number then. Two more hand-offs so this page stays out of their territory: the mechanics of shared event IDs live in how event_id prevents double counting, and the technique for testing without dirtying live numbers is in how to test server-side conversion events without polluting live reports. Dates are somebody else's job too: the freeze calendar sits in what to lock and when, peak-hour breakage in why tracking breaks during flash sales, the hour-by-hour trust order in which ad numbers to trust, and audience timing in audiences are built in September.
The nine-channel grid
| Destination | Funnel events available | Purchase dedup key | Test surface |
|---|---|---|---|
| GA4 | Full funnel, plus the only refund event | Transaction ID equals the numeric Shopify order ID | Debug mode flag |
| Meta | Full funnel | Shared checkout event ID, order-derived fallback | Test event code |
| TikTok | Full funnel | Shared checkout event ID, order-derived fallback | Test event code |
| Google Ads | Purchase only | Click identifier, no shared event ID | None |
| Full funnel | Shared checkout event ID | Test mode flag, per pixel | |
| Snapchat | Full funnel | Shared checkout event ID | Test mode routes to a validation endpoint |
| No begin-checkout event exists | Shared checkout event ID | Test identifier | |
| ChatGPT Ads | Five events, page view deduped browser and server | Shared checkout event ID | Validation call at credential save |
| Klaviyo | Purchase, keyed differently | Order name, not the numeric ID | Klaviyo's own activity feed |
The Klaviyo row receives no campaign, flow or UTM value from a tracking app at all, so the revenue Klaviyo attributes to email comes from Klaviyo's own click and open signals. Campaign and UTM values ride the GA4 purchase instead. Nothing is broken there, it is simply a different question than the one the eight ad rows answer.
How do you run the three checks in an afternoon?
One real order, followed through the stack, answers all three questions on every channel you run.
- In Shopify admin, go to
Settings → Customer eventsand confirm the app's pixel is listed and connected. - Place a live order on the storefront as a customer would, with a real payment method and a discount code applied. Note the order's numeric ID from its admin URL and its order name from the order list. You need both, because different destinations key on different ones.
- Open your tracking app's per-pixel delivery view and confirm the order is counted as sent for every pixel you expect. Skipped is not failed: a skip means the app recorded a reason, such as the instance being off, credentials missing, the order scoped to another Shopify Market, or no usable tracking data on the order. Read the reason rather than the count.
- Open each platform's own surface for that order: GA4's realtime report, the event details in Meta and TikTok Events Manager, the Google Ads conversion column the next morning. The mechanics of each are in the post-install checklist linked above. The one thing to settle here is GA4's transaction ID, which carries the numeric order ID and not the
#1001order name. - Compare the value each platform reports for that single order against Shopify's order total. Write down the differences now, while you know they are correct, so a November difference has a baseline to sit against.
A recorded baseline turns a panicked November question into a lookup.
Why do the nine channels not behave alike?
Each platform's own API decides what it will accept, and those APIs disagree with each other more than their marketing pages suggest.
The sharpest instances, all of them current: Google Ads takes purchases and nothing else, so no add-to-cart or begin-checkout comparison against Meta is available at any price. Reddit's event registry has page visit, view content, search, add to cart and purchase, with no begin-checkout, so a Reddit funnel has one fewer step by construction. ChatGPT Ads has five events, and only the page view is sent from both the browser and the server, so a browser-only blocked visitor loses a different set of events there than on Meta. Snapchat and Pinterest test modes are pixel-level configuration, so switching either on sends that pixel's real customer traffic down a validation path where nothing gets recorded. The clean way to test those two is a second pixel instance, which is why the second instance exists.
Then the tier reality, because it changes which rows apply to you at all. On the free plan the destination set is GA4 only and you get a single pixel instance. Every other channel in the grid, plus multiple instances, plus refund events, needs the paid plan.
The setting all nine share, and what it quietly removes
One switch exists on every channel, defaults to off, and costs more than any other item here when someone flips it in a hurry.
It is the "exclude admin, POS and API orders" toggle. The intent is sensible: stop counting a phone order you keyed in by hand as an ad conversion. The classification behind it is broader than the label reads. A storefront order means a web checkout. Everything else falls on the other side, which includes point of sale, the Shop app, marketplace orders, headless and Storefront API orders, orders created by an app, and subscription renewals. On a subscription store, renewals can be half your order count, so switching that toggle on in October can halve your reported conversions in November with no error anywhere to show you why.
The decision is straightforward once the classification is visible. If you sell subscriptions, leave it off. If you key in a meaningful number of manual orders and do not run subscriptions, turn it on and note the date so you can read the step in the data later. Either way, check it before the freeze rather than during the season, because a toggle change mid-sale is indistinguishable from a tracking failure when you look at the chart afterwards.
Why does a platform's number differ from Shopify's?
Because of that platform's own definition, not because of your data. This inverts the usual advice, and it saves the most time.
All nine destinations receive the same figure: the Shopify order total, tax and shipping included, discounts netted, in the shop's base currency, never recomputed from line items. Currency travels with it as a matched pair. So when a platform's reported revenue disagrees with Shopify's, the input was identical and the difference is downstream: attribution windows, that platform's own revenue definition, its deduplication, its modelling.
There is one deliberate exception worth knowing about, because it looks like a bug in a spreadsheet. At least one platform's documentation asks for a figure before tax and shipping. Sending the order total anyway is a signed-off choice for cross-channel consistency, so every destination gets one number you can reconcile against Shopify rather than nine near-misses. Merchants who "fix" that gap by recomputing values per platform end up with nine numbers that no longer agree with each other or with finance.
What none of the nine will tell you
Three limits sit underneath all of the above, and you have to go looking for each of them.
There is no alerting. The delivery and accuracy view refreshes when you open the app, when you press refresh, or via a once-a-day safety net. Nothing emails you when a channel stops sending, so "no news" carries no information in either direction. During BFCM that means putting a look at the numbers on the calendar, morning and evening, with a name against it.
The recent-events stream covers eight of the nine channels and never Google Ads, and it shows the last handful of successful events only. A channel failing completely shows an empty list, which reads exactly like a quiet hour. Check the per-pixel sent count for the day instead, where untracked orders count against accuracy rather than disappearing.
Refunds reach GA4 and nowhere else, and order cancellations reach nothing at all. If your November return rate matters to a bidding decision, that reconciliation is manual on every ad platform. Plan the spreadsheet now rather than in December.
If you would rather see all nine per-pixel send counts, skip reasons and value checks in one table instead of nine dashboards, that view is what WeltPixel Conversion Tracking [3] gives you, with the exclude-admin-orders setting per channel where you can see what it is set to before the freeze.
FAQ
How long does the nine-channel check actually take?
Budget an afternoon for the first pass, most of it spent waiting for platform dashboards to catch up rather than clicking. The Google Ads row carries into the next day because there is no test surface to shortcut it.
Can I test Snapchat and Pinterest without affecting live traffic?
Not with a single pixel. Their test modes are per-pixel settings, so live customer events follow the same validation path while test mode is on. Use a second pixel instance for testing and leave the production instance untouched.
Which channels miss funnel events that the others send?
Google Ads takes purchases only. Reddit has no begin-checkout equivalent in its event set. ChatGPT Ads has five events and sends only the page view from both browser and server. Everything else in the grid carries the full funnel.
Should I turn on "exclude admin, POS and API orders" before BFCM?
Only if you do not sell subscriptions. The classifier counts subscription renewals, POS, Shop app, marketplace and headless orders as non-storefront, so on a subscription store the switch removes renewals from every destination.
Does a value gap between Meta and Shopify mean my tracking is wrong?
Usually not. Every destination receives the same Shopify order total with tax and shipping in and discounts netted, so a gap is that platform's revenue definition, attribution window or modelling. Record the size of the gap on a single known order now, before the season, and compare against that.
Sources
- OpenAI Ads developer documentation, "Conversion tracking" (30-day click attribution window;
"validate_only": trueto validate a request without saving events; event monitoring endpoint returning a sample of recent events from roughly the last 15 minutes), developers.openai.com/ads/conversion-tracking, accessed September 21, 2026 - Shopify, "BFCM 2025 data" ($14.6 billion in sales, a 27% increase from 2024, a peak of $5.1 million per minute, 81+ million consumers, cross-border orders at 16% of all global orders), published December 2, 2025, shopify.com/news/bfcm-data-2025, accessed September 21, 2026
- WeltPixel Conversion Tracking, Shopify App Store listing (nine integrations, plan tiers), apps.shopify.com/weltpixel-conversion-tracking, accessed September 21, 2026