Server-side tracking for Shopify. No apps. No checkout restrictions. No signal loss.
Shopify merchants lose tracking data at every turn: checkout.shopify.com breaks cookies, theme apps bloat page load by seconds, and Shopify's new checkout extensibility model restricts third-party scripts. Datafly Signal replaces all of it with a single 4.2KB script and server-side webhooks.
800KB+
Average tag payload
Typical Shopify store loads 800KB+ of third-party analytics JavaScript before the first meaningful paint.
40%+
Safari mobile users
Safari dominates mobile shopping. ITP caps client-side cookies at 7 days, fragmenting every returning visitor.
Broken
Checkout domain cookies
checkout.shopify.com is a different domain. Client-side cookies set on your storefront do not carry over.
15+
Apps per typical store
Each Shopify app injects its own JavaScript. 15 apps is typical for a mid-market store, each adding load time.
Why Shopify tracking is uniquely broken
Shopify's architecture creates tracking challenges that other platforms don't have. These are structural problems, not configuration issues.
Checkout domain breaks tracking
checkout.shopify.com is a separate domain. Client-side cookies from your storefront never reach checkout. Post-purchase attribution dies at the most critical moment.
App bloat kills performance
Each Shopify app injects its own scripts, stylesheets, and tracking pixels. 15 apps means seconds of extra load time, tanking Core Web Vitals and conversion rates.
Checkout extensibility limits
Shopify's new checkout model restricts third-party JavaScript execution. Analytics tags that worked in legacy checkout may stop working entirely as Shopify migrates merchants.
How Signal works with Shopify
A dual-track architecture that captures the complete customer journey — storefront browsing via Datafly.js and checkout completions via Shopify webhooks — then links them server-side.
Track 1: Storefront
Install Datafly.js as a single script via your Shopify theme or custom pixel. 4.2KB gzipped. Collects all storefront interactions.
- page_view on every navigation
- product_viewed on PDP load
- add_to_cart from buy buttons
- collection_viewed on listing pages
- search on search interactions
Track 2: Webhooks
Shopify webhooks deliver checkout and order events directly to Signal server-to-server. No browser involved. No checkout domain problem.
- orders/paid on purchase completion
- checkouts/create on checkout start
- refunds/create on order refund
- orders/fulfilled on shipment
- customers/create on registration
Cross-domain identity resolution. Signal's Identity Hub links storefront sessions to webhook events using customer email, enabling complete attribution from first page view to purchase — even across checkout.shopify.com. Zero reliance on Shopify apps for analytics.
End-to-end architecture
Two data sources, one processing pipeline, every vendor delivered server-to-server.
Storefront
Datafly.js
4.2KB gzipped
Checkout + Orders
Shopify Webhooks
Server-to-server
Identity resolution + Pipeline transformation + Delivery
GA4
Meta CAPI
TikTok
Google Ads
One webhook, multiple destinations
This pipeline config transforms a Shopify orders/paid webhook into both a GA4 purchase event and a Meta CAPI Purchase event simultaneously. Identity is resolved server-side by linking the customer email from the webhook back to the storefront session.
- Single webhook triggers multiple vendor deliveries
- Customer email resolves to stored storefront session IDs
- GA4 gets session_id and _ga cookie from identity link
- Meta CAPI gets _fbp, _fbc, IP, and user agent from identity link
- All PII automatically SHA-256 hashed for Meta
- Line items mapped to vendor-specific product formats
# shopify-order-paid.yaml — Webhook to GA4 + Meta CAPI
name: shopify_order_paid
trigger:
event: webhook
conditions:
- field: source
operator: equals
value: shopify
- field: topic
operator: equals
value: orders/paid
pipelines:
# GA4 Measurement Protocol — purchase event
- integration: google-analytics-4
transform:
mapping:
- source: id
target: transaction_id
- source: total_price
target: value
- source: currency
target: currency
- source: line_items
target: items
transform: array_map
fields:
- source: sku
target: item_id
- source: title
target: item_name
- source: price
target: price
- source: quantity
target: quantity
enrichments:
- type: identity_link
source: customer.email
resolve: session_id
- type: vendor_id
vendor: ga4
cookie: _ga
output:
format: ga4_measurement_protocol
event_name: purchase
validate: true
# Meta Conversions API — Purchase event
- integration: meta-conversions-api
transform:
static:
- target: event_name
value: Purchase
- target: action_source
value: website
mapping:
- source: total_price
target: custom_data.value
- source: currency
target: custom_data.currency
- source: line_items
target: custom_data.content_ids
transform: pluck
field: sku
user_data:
- source: customer.email
target: em
transform: sha256_normalise
- source: customer.phone
target: ph
transform: sha256_normalise
- source: customer.first_name
target: fn
transform: sha256_normalise
- source: customer.last_name
target: ln
transform: sha256_normalise
enrichments:
- type: identity_link
source: customer.email
resolve: [_fbp, _fbc, client_ip, user_agent]
output:
format: meta_conversions_api
validate: trueWhat you can remove
Signal replaces the client-side JavaScript from all of these Shopify apps and services. One 4.2KB script instead of 625KB+ of third-party code.
Google Analytics app
80KB
Meta Pixel app
60KB
TikTok Pixel app
45KB
Google Ads conversion tag
50KB
Hotjar
120KB
Lucky Orange
90KB
Klaviyo tracking
50KB
Snapchat Pixel
35KB
Pinterest Tag
40KB
Triple Whale Pixel
55KB
Before
625KB+
10 separate scripts
After
4.2KB
One script, all vendors
Remove the tag bloat from your Shopify store
See how Datafly Signal replaces 15+ analytics apps with a single 4.2KB script and server-side webhooks. Faster pages, complete attribution, zero checkout restrictions.