Littledata’s Shopify to Segment connection uses a combination of client-side (browser) and server-side tracking to ensure 100% accurate data about your Shopify store in Segment. Littledata automatically integrates with Shopify and Shopify Plus sites to capture every customer touchpoint, including sales, marketing, customer and product performance data.
Client-side (device mode) tracking
During the installation process, Littledata applies a tracking script to all pages (theme.liquid) under your Shopify store, except for the checkout steps:
- Segment’s analytics.js library is loaded on all pages
- Creates a
littledataLayer
data layer for all pages - Minified tracking code, hosted on a content delivery network (CDN)
- Enables sending of client-side events to all Segment destinations which are enabled in ‘device mode’
- Segment’s anonymous ID is passed to our servers to ensure consistent user journey tracking
Server-side (cloud mode) tracking
During the Segment connection setup flow in the app, Littledata also applies a set of webhooks to your Shopify store. This means that each time Shopify pings us back and confirms the user action we know which event has to be sent by our servers, ensuring 100% accuracy. There are many advantages to this approach:
- Smaller script in the browser = faster page load
- No extra scripts on the sensitive and secure checkout pages
- Complete event capture for checkout flow, including sales and refunds/returns
- Accurate marketing attribution (sessions stitched together)
Note: Using a headless Shopify setup? Follow the setup steps for headless Shopify tracking with Littledata.
What can you track
These are the events that Littledata sends from Shopify to Segment. These events will show up as tables in your warehouse, and as regular events in your other Segment destinations.
Client-side events
Client-side events tracked by Littledata, via Segment’s analytics.js library, and passed on to any destination enabled in device mode.
Event Name | Description |
Page Viewed | User has viewed a page |
Product List Viewed | User has viewed a product as they scroll down the collection page |
Product Clicked | User has clicked a product within a product list |
Product Viewed | User has viewed a product page |
Product Image Clicked | User has clicked a product image |
Product Shared | User has shared a product via social links |
Thankyou Page Viewed | User has viewed the thank you page after completing an order * |
* This is less reliable than the de-duplicated Order Completed
event sent from Littledata’s servers, but you can use it in device-mode destinations to trigger a conversion. payment_method
and shipping_method
properties are not available with this event.
Server-side events
Note: Littledata’s Segment connection v2 was released in November 2020. Please reach out to our support team if you installed previously and now want the extra events
Server-side events are tracked by Littledata servers from Shopify and passed onto any destination in cloud mode.
Event Name | Description |
Product Added | User has added a product to the cart, and left it in the cart for more than 10 seconds |
Product Removed | User has removed a product from the cart |
Checkout Started | User has started checkout |
Checkout Step Viewed | User has viewed a step in the checkout |
Checkout Step Completed | User has completed a step in the checkout |
Customer Created | User added as a customer |
Customer Updated | Customer information updated |
Payment Info Entered | User has entered payment info |
Coupon Applied | Sent with Checkout Step Completed or Order Completed when user has applied a coupon |
Order Completed | Customer has completed an web order (excluding iOS, Android, POS and draft orders) |
Order Refunded | Web order has been refunded |
Order Cancelled (v2) | Admin has cancelled an order (including the cancel_reason ) |
POS Order Placed (v2) | User has placed an order via Shopify POS |
Payment Failure (v2) | User completed checkout step 3 but the payment method failed (i.e. the card details were valid but the charge did not succeed) |
Customer Enabled (v2) | User has confirmed their email address and created a Shopify customer account with verified_email set as true |
Fulfillment Created (v2) | Order fulfillment is created (including status , tracking_numbers and tracking_urls where the shipping integration allows) |
Fulfillment Updated (v2) | Order fulfillment status has changed (including status , tracking_numbers and tracking_urls where the shipping integration allows) |
User identity
In Littledata’s app you can choose which of the following fields you want to send as the userId
for known customers:
- Shopify Customer ID (default)
- MD5 email hash
- None
For example, using ’email’ allows you to match users across platforms that do not have access to the Shopify Customer ID. For Segment Personas we also send shopify_customer_id
as an externalID for advanced matching.
Identify calls
For every event where there is an identifiable Shopify customer (from both the client and the server) we also send an Identify call to trigger updates in CRM systems connected to Segment. This happens when the customer logs into the storefront, on the last step of the checkout, with the order, and also after purchase with any customer update in Shopify admin.
The following traits are included with an Identify call:
Property Name | Description | Property Type |
userId | Chosen user identifier, defaulting to Shopify Customer ID | Double |
firstName | Customer’s first name | String |
lastName | Customer’s last name | String |
Customer’s email address | String | |
phone | Customer’s phone number | String |
createdAt | Date customer record was created | Date |
description | Customer notes | String |
address | Customer’s primary address | String |
customerLifetimeValue | Total spend of customer on the Shopify store | Double |
purchaseCount | Number of orders by this customer | Integer |
marketingOptIn | marketing_opt_in field from Shopify customer | String |
tags | Custom tags applied to the customer | String |
state | Whether the customer account is enabled or disabled | String |
verified_email (v2) | Whether the customer has verified their email | Boolean |
Support for email marketing destinations
Email marketing platforms such as Klaviyo, Iterable and Hubspot require an email
property with any server-side event in order to associate then with a customer (they cannot use an anonymous ID). Littledata’s adds that email
property whenever an email address is set in the user traits()
object (in device-mode) or from the Shopify customer record (in cloud-mode).
Alias calls
To support seamless customer tracking in analytics destinations such as Mixpanel, Vero and Kissmetrics, Littledata ensures the pre-checkout anonymousId
is added as an alias of the userId
(used from checkout step 2 onwards).
Event properties
These are the properties which may be included in the events listed above.
Property | Description | Property Type |
userId | Chosen user identifier, defaulting to Shopify Customer ID | Double |
Shopify email address (after checkout step 2), or email submitted on a storefront form | String | |
order_id | ID of the order | String |
checkoutId | ID of the checkout session | String |
shipping | Shipping cost | Float |
tax | Order tax | Float |
subtotal | Total excluding tax and shipping | Float |
total | Total value of the order | Float |
affiliation | Affiliation of the order | String |
coupon | Comma-separated string of discount coupons used, if applicable | String |
currency | Currency of the order | String |
discount | Discounted amount | Float |
products | List of all the products at that stage of the funnel * | Array |
step | Checkout step | Integer |
payment_method | Payment gateway used in the checkout | String |
shipping_method | Shipping method chosen for checkout | String |
context[‘Google Analytics’].clientId | User’s Google Analytics Client ID | String |
context[‘Google Analytics’].geoid | User’s location | String |
context.uip | User IP address | String |
sent_from | Unique property to identify events sent by Littledata | String |
presentment_currency | User’s local currency | String |
presentment_total | Order total in local currency | String |
products
on Product Added and Product Removed events only contained the single product, not the whole cart.Product properties
Each product in the products
array, or Product Viewed and Product Added events, will have the following properties
Property | Description | Property Type |
product_id | Shopify product ID | String |
sku | Product SKU | String |
shopify_product_id | Also Shopify product ID | String |
shopify_variant_id | Shopify variant ID | String |
variant | Product variant name | String |
name | Product name | String |
category | Category of the product (defaults to all ) | String |
brand | Brand of the product | String |
list_id | ID of the product collection (for Product List Views and Product Clicks) | String |
list_name | Name of the product collection (for Product List Views and Product Clicks) | String |
list_position | Product position in the collection (for Product List Views and Product Clicks) | Integer |
price | Product price | Float |
quantity | Quantity of this product | Integer |
Subscription ecommerce events
Additional events available via Littledata’s ReCharge connection, and available in cloud mode destinations.
Event Name | Description |
Subscription Created | Customer has created a subscription |
Subscription Updated | Customer has updated a subscription |
Subscription Cancelled | Customer has cancelled a subscription |
Order Processed | Recurring order has been processed |
Charge Failed | Failed to charge customer |
Charge Max Tries Reached | Maximum tries to charge customer has been reached |
Payment Method Updated | Customer has updated the payment method |
Customer Update | Customer information updated |
Advanced device-mode settings
You can edit the LittledataLayer
object in your Shopify theme to manually change these advanced settings. For more information, see the Shopify tracker GitHub repository.
cookiesToTrack
Any cookie set on a landing page (e.g. a session identifier or marketing campaign name) can be sent on to Segment with an identify call.
CDNForAnalyticsJS
If you have a proxy CDN setup to load Segment’s AnalyticsJS library from your own domain you can specify it here.