TL;DR
Shopify orders created outside the storefront browser do not fire your conversion pixel. Shopify POS in-person sales, admin-created draft orders for wholesale or customer service, and API-created orders from subscription apps all bypass the Web Pixels API entirely. For most paid-ad merchants this is fine, because those orders weren't from ad clicks. But for omnichannel retailers, B2B and wholesale stores, and subscription-driven businesses, missing those orders means inflated CAC, broken attribution, and ad platforms optimizing on incomplete data. The fix is server-side capture via Shopify's orders/create webhook, which fires for every order. WeltPixel Conversion Tracking on the Plus plan does this across GA4, Meta, TikTok, Google Ads, and Reddit, with per-channel exclude toggles so you can decide which platforms should see admin and POS sales.
What "admin orders" and "POS orders" actually mean
Every Shopify order has a source_name field that records the order's origin. The values you'll see in your data:
-
web: standard storefront browser checkout. The customer landed on your store, added to cart, completed checkout in their browser. -
pos: Shopify POS app, in-person retail. The customer paid at the counter on the POS tablet. -
shopify_draft_order: admin-created draft. A merchant or staff member built the order manually in the Shopify dashboard (B2B, wholesale, customer service, invoiced orders). -
shopify: direct admin order creation without the draft flow. - App slugs like
recharge,bold,loop: orders created via the Shopify Admin API by subscription apps for recurring renewals. - Theme app names or custom values: orders from headless storefronts or custom checkout flows that don't use the standard Shopify browser path.
The Web Pixels API only runs in customer browsing contexts. That's a hard constraint: pixels need a browser. When a customer pays at the POS counter, the transaction is processed on the POS tablet running the POS app, not in a customer browser. When a sales rep takes a wholesale order over the phone and builds the draft in the admin dashboard, there's also no customer browser involved. When Recharge auto-creates the next month's subscription renewal via API at 3:00 AM, there's nothing for a pixel to attach to.
This isn't a Shopify bug. It's an architectural fact about how pixels work.
Six scenarios where back-office sales matter for ad attribution
1. Omnichannel retailers running Shopify POS in physical stores
A customer sees an Instagram ad for your product on Tuesday. On Saturday they walk into your retail location and buy it at the counter. Without admin-and-POS tracking, Meta has no idea that ad drove the sale. The customer is recorded as "saw the ad, didn't convert," and Meta optimizes away from that audience segment. The omnichannel attribution gap is real and well-documented in retail analytics.
Sending the POS purchase server-side to Meta gives the platform a complete picture. Whether you want to use first-party customer data to match the POS purchase to the original ad click is a separate question (it depends on whether you collected the customer's hashed email at point-of-sale), but the event firing is the prerequisite.
2. B2B and wholesale stores with admin-created draft orders
Wholesale orders typically don't go through the storefront. A sales rep takes the order over the phone, builds a draft order in the Shopify admin, sends an invoice, and marks it paid when the wire arrives. For high-AOV B2B operations, this is the bulk of revenue. None of it touches a pixel.
For B2B stores that run any paid acquisition (LinkedIn, sponsored content, retargeting), the gap between "leads generated by ads" and "revenue from those leads" is wide because the revenue-recognition events are admin-side, not storefront-side.
3. Customer-service-created orders after abandonment
Customer abandons checkout, calls support, support helps them complete the purchase manually in the admin. Common pattern in stores with phone-based support. The pixel fired on checkout_started but not on checkout_completed, because there's no browser at the moment of completion. Without admin-order capture, the abandonment looks complete (no purchase event), even though the order did close.
4. Subscription apps creating recurring orders via API
Recharge, Bold Subscriptions, Loop, Smartrr, and similar subscription engines create renewal orders directly through the Shopify Admin API on the merchant's behalf. There's no customer browser involved. For subscription-first stores, the renewal cohort is often 30 to 70 percent of monthly revenue. That entire chunk is invisible to browser-pixel-only tracking.
5. Headless or custom storefronts using the Storefront API
Stores running Hydrogen, Next.js Commerce, or custom checkout flows often create orders via the Storefront API rather than the standard Shopify checkout. Depending on how the checkout is wired, some of these orders may not trigger the Web Pixels API even though there's technically a browser. The source_name on the resulting order will reflect the integration name rather than web.
6. Bulk import or data migration orders
Backfilling historical orders from a previous platform during a migration creates a flood of "orders" in Shopify that aren't real-time conversions. These shouldn't fire ad-platform conversion events. They're not the result of recent ad clicks, and firing them as conversions would pollute Meta's and Google's optimization models with old data attributed to recent ad activity.
For these orders, you specifically want exclusion. Plus-tier per-pixel toggles give you this control.
Why browser pixels can't see any of these orders
The Shopify Web Pixels API runs in the customer's browser when the customer is on the storefront. Every standard pixel event (checkout_started, payment_info_submitted, checkout_completed, etc.) requires the customer to be loading pages in their browser. When the order creation event happens somewhere else (a POS tablet, an admin dashboard tab, a subscription app's cron job, a headless checkout API call), there's no browser session to fire from.
This is structural. It's not a limitation of any specific tracking app; it's a limitation of the pixel layer itself. Any app that bills itself as "browser-based pixel tracking" has the same blind spot for every non-storefront order.
The path that works is the server-side one. Shopify's orders/create webhook fires for every order, regardless of source_name. The webhook payload contains the order data the pixel would have had, plus the source_name field, plus the full customer record. From there, a server-side tracking app can fire the equivalent of a Purchase event to each ad platform's Conversions API.
What WeltPixel Conversion Tracking does
WCT subscribes to Shopify's orders/create webhook. For each order, it classifies the source as either storefront or non-storefront. The logic is:
An order is treated as storefront if
source_name === "web", OR if it's a draft order without a logged-in admin user (which catches the edge case of customers self-serving drafts in B2B portals or custom checkout flows). Everything else is admin/POS/API.
Storefront orders fire normally through the standard pixel-and-CAPI path with browser-side dedupe. Non-storefront orders go through a separate plan-tier gate.
On the Explorer plan (free, 100 orders/month cap), non-storefront orders are skipped entirely. No CAPI fire on POS, no CAPI fire on admin drafts, no CAPI fire on subscription renewals. The pixel doesn't see them either (it can't), and the server-side handler doesn't fill the gap.
On the Plus plan ($39/month) and the legacy grandfathered Grow plan, non-storefront orders DO fire CAPI by default across all five channels (GA4, Meta, TikTok, Google Ads, Reddit). The merchant can then turn off non-storefront firing on a per-pixel basis through the "Exclude Admin/API Orders" toggle in Advanced Settings.
The two-sided value
The Plus-tier value isn't just "we capture admin/POS orders." It's "we let you decide per channel whether to capture them."
A common configuration for an omnichannel store:
- GA4 (leave admin and POS firing enabled). GA4 is your source of truth for total business revenue, including all channels. POS sales should count toward revenue.
- Meta CAPI (exclude admin and POS). Meta's algorithm optimizes against the conversions you send it. If you send Meta a flood of admin orders that weren't driven by Meta ads, Meta's optimization gets noisy. Most merchants want Meta to only see ad-attributable conversions.
- TikTok Events API (usually exclude). Same logic as Meta.
- Google Ads (depends). If you're running Google Shopping for the in-store catalog, including POS makes sense. If you're running search ads driving online sales, exclude.
The point is that the toggle is per-channel. You're not forced into an all-or-nothing decision. Plus gives you the granularity; Explorer doesn't have admin/POS firing at all.
Industry context
Is server-side admin/POS capture unique to WCT? No. Elevar and Littledata both capture admin and POS orders server-side; their architectures are server-side by default. Stape can capture them too if the merchant wires the triggers in their sGTM container. The cheaper browser-pixel-focused apps (Trackify, WeTracked, much of Analyzify's lower tiers) typically don't, because their primary architecture is browser-side.
The differentiator for WCT in this space isn't the capability. It's the price-per-feature ratio (flat $39 instead of usage-scaling for Elevar/Littledata) plus the per-channel exclude toggle granularity. Many of the competing server-side tools require you to wire admin/POS exclusion at the platform side (in GA4 audience filters, in Meta event match rules) rather than at the firing source. WCT puts the toggle in the app.
Frequently asked questions
Does Shopify's native Google channel send POS orders to GA4? No. Shopify's native channel is built on the Web Pixels API, which only fires for storefront browser sessions. POS sales don't trigger the channel's GA4 events. POS revenue reaches GA4 only through server-side server-relayed paths.
What about Shop Pay accelerated checkouts? Are those "web"?
Shop Pay's accelerated checkout flows are tricky. On the primary domain (your store's checkout), the order's source_name is web. On Shop's hosted checkout domain (shop.app), pixel firing can be unreliable. For the full breakdown, see our Shop Pay tracking article.
Will admin orders pollute my retargeting audiences if I send them? On Meta and TikTok, yes. Admin orders sent as Purchase events will be included in any audience definition that uses "purchasers in last N days." That's why the per-channel exclude toggle exists. On GA4, the audience pollution is less consequential because GA4 audiences are typically used for analysis rather than ad targeting.
Can I retroactively send historical admin orders? No, at least not through WCT's standard webhook path. Webhooks only fire on new orders going forward. Historical backfill would need a separate one-time script firing events through each platform's batch endpoint, which isn't currently a WCT feature.
Does the new versus returning customer flag work for admin and POS orders too?
Yes. WCT looks up the customer's lifetime order count via Shopify's GraphQL customer.numberOfOrders field and sets the customer type to new or returning accordingly. This works the same way for admin and POS orders as it does for storefront orders, as long as the order has a customer.id (most do; truly anonymous POS walk-ins might not).
Read next
The closest related article is our Shop Pay tracking piece, which covers another non-storefront-pixel category. For the server-side architecture foundations, see our server-side GA4 article.
If your store has meaningful POS, wholesale, or subscription revenue, install WeltPixel Conversion Tracking on the Shopify App Store. Admin and POS order tracking with per-channel exclude toggles is included on the Plus plan ($39/month flat), alongside multi-pixel support, server-side GA4 refund tracking, new and returning customer signals, and priority human support.
Sources
- Shopify Web Pixels API documentation, shopify.dev/docs/api/web-pixels-api/standard-events
- Shopify Order resource documentation, shopify.dev/docs/api/admin-rest/2024-10/resources/order
- Shopify POS overview, help.shopify.com/en/manual/sell-in-person/about-shopify-pos