Data Model
The full reference of all Shopify events, properties and customer data that Vendo tracks.
Last reviewed September 15, 2026
This page is the canonical reference for the Shopify events, event properties and data structures that Vendo tracks.
Event Overview
Vendo tracks events in two ways: client-side (Web Pixel) and server-side (pipeline). This table shows where each event comes from.
| Event Category | Client-Side | Server-Side |
|---|---|---|
| Page browsing (page/product/collection viewed) | Yes | — |
| Search | Yes | — |
| Cart actions (add/remove/view) | Yes | — |
| Checkout flow (contact/address/shipping/payment) | Yes | — |
| Checkout completed | Yes | Yes |
| Order fulfillment & delivery | — | Yes |
| Order refunds | — | Yes |
| Abandoned checkouts | — | Yes |
| Customer profile updates | Yes | Yes |
| Auto track events | Yes (theme) | — |
| Session recording & heatmaps | Yes (theme) | — |
| Push notification prompts | Yes (theme) | — |
Client-Side Events
The Shopify event registry sets which client-side events are available. Standard events are enabled or disabled for each destination. When the custom events option is enabled, Vendo can forward custom events.
Mixpanel, Segment and Customer.io receive the event names in the Event column. Google Tag Manager receives the GA4 event names in the Google Tag Manager column. Google Tag Manager does not receive custom events.
OneSignal events from the storefront do not include properties whose names start with $.
Customer.io receives client-side events only through the Vendo ingest API. Page Viewed arrives as a track event, not as a page call. Customer.io receives the page and attribution values in the event properties and in the event context.
Browsing Events
| Event | Google Tag Manager | Description | Key Properties |
|---|---|---|---|
| Page Viewed | page_view | Customer visits any page | $current_url, page_title, path_name, $referrer |
| Product Viewed | view_item | Customer views a product detail page | products[], $current_url |
| Collection Viewed | view_item_list | Customer views a collection page | collection_id, collection_title, products[] |
| Search Submitted | search | Customer performs a search | search_query, products[] |
Cart Events
| Event | Google Tag Manager | Description | Key Properties |
|---|---|---|---|
| Product Added To Cart | add_to_cart | Customer adds item to cart | products[], quantity, amount, currency |
| Product Removed From Cart | remove_from_cart | Customer removes item from cart | products[], quantity, amount, currency |
| Cart Viewed | view_cart | Customer views the cart page | products[], quantity, amount, currency |
Checkout Events
| Event | Google Tag Manager | Description | Key Properties |
|---|---|---|---|
| Checkout Started | begin_checkout | Customer initiates checkout | checkout_token, order_id, cart_total_amount, products[] |
| Checkout Contact Info Submitted | add_contact_info | Customer enters email/phone | email, phone, checkout_token |
| Checkout Address Info Submitted | add_shipping_info | Customer enters shipping address | shipping_address, email, phone |
| Checkout Shipping Info Submitted | add_shipping_info | Customer selects shipping method | shipping_amount, cart_total_amount |
| Payment Info Submitted | add_payment_info | Customer enters payment details | checkout_token, cart_total_amount |
| Checkout Completed | purchase | Customer completes purchase | order_id, email, cart_total_amount, products[], shipping_address |
Identification and Diagnostic Events
| Event in the Vendo app | Name sent | Description |
|---|---|---|
| Customer Logged In | Customer Logged In (Google Tag Manager: customer_logged_in) | Customer successfully logs in. Disabled by default. |
| Newsletter Registered | Newsletter Registered (Google Tag Manager: newsletter_registered) | Visitor submits a supported newsletter signup. Disabled by default. |
| Checkout Alert Displayed | alert_displayed | A checkout validation or warning alert appears. Disabled by default. |
| UI Extension Errored | ui_extension_errored | A Vendo checkout UI extension fails to load or crashes. Disabled by default. |
| Custom Events | The name the custom event was published with | Events published through Shopify Customer Events when custom forwarding is enabled |
To track more interactions, see Sending Custom Events.
Server-Side Events
Scheduled pipeline jobs make these events from Shopify’s backend data. To see how often the jobs run, check the connection status and job history.
The Event column in the tables below shows the name that Mixpanel receives. Key Properties shows the Mixpanel property names. Other destinations can use different names.
Event Names by Destination
| Event in the Vendo app | Mixpanel | Segment | Customer.io | OneSignal |
|---|---|---|---|---|
| Orders Received | Order Received | Order Completed | Order Received | order_received |
| Orders Fulfilled | Order Fulfilled | Order Fulfilled | Order Fulfilled | order_fulfilled |
| Orders Delivered | Order Delivered | Order Delivered | Order Delivered | order_delivered |
| Orders Refunded | Order Refunded | Order Refunded | Order Refunded | order_refunded |
| Orders Partially Refunded | Order Partially Refunded | Order Partially Refunded | Order Partially Refunded | order_partially_refunded |
| Checkout Started (Server) | Checkout Started (S) | Checkout Started | Checkout Started | checkout_started |
| Abandoned Checkouts | Cart Abandoned | Cart Abandoned | Cart Abandoned | cart_abandoned |
| Product Purchased | Products Purchased | Product Purchased | Not sent | Not sent |
| User Profiles (Identify) | Profile update (not an event) | identify call | identify call | User tags |
Test Orders
On Shopify development and partner test stores, Vendo also sends test orders as separate events:
- When Orders Received is on, Mixpanel receives
Order Received [Test]and OneSignal receivesorder_received_test. - When Product Purchased is on, Mixpanel receives
Products Purchased [Test].
Segment and Customer.io do not receive test-order events.
Order Events
| Event | Description | Key Properties |
|---|---|---|
| Order Received | New order created | shopify_order_id, order_id, email, cart_total_amount, products[], discount[], utm_source/medium/campaign |
| Order Fulfilled | Order marked as shipped | fulfillment_id, tracking_number, fulfillment_speed, products[] |
| Order Delivered | Order marked as delivered | shopify_order_id, delivery_date, delivery_speed |
| Order Refunded | Full refund issued | shopify_order_id, refund_amount, cancel_reason |
| Order Partially Refunded | Partial refund issued | shopify_order_id, refund_amount |
| Checkout Started (S) | First server-side checkout record for the session | checkout_id, email, cart_total_amount, products[], abandoned_checkout_url |
| Products Purchased | Per line item (disabled by default) | product_id, product_title, product_sku, product_price, product_quantity |
Abandonment Events
| Event | Description | Key Properties |
|---|---|---|
| Cart Abandoned | Checkout not completed | checkout_id, email, cart_total_amount, products[], abandoned_checkout_url |
Property Names by Destination
Segment, Customer.io and OneSignal use different names for some server-side properties.
| Mixpanel | Segment | Customer.io | OneSignal |
|---|---|---|---|
cart_total_amount (orders and checkouts) | total | total | cart_total_amount |
cart_total_amount (refunds) | total | original_total | cart_total_amount |
abandoned_checkout_url (Cart Abandoned) | checkout_url | checkout_url | checkout_url |
abandoned_checkout_url (Checkout Started (S)) | Not sent | Not sent | Not sent |
discount[] (discount codes) | Not sent (discount is the discount amount) | Not sent (discount is the discount amount) | Not sent (total_discounts is the discount amount) |
utm_source/medium/campaign | Not sent | Not sent | Not sent |
fulfillment_speed | fulfillment_speed_days | fulfillment_speed_days | fulfillment_speed_days |
delivery_speed | delivery_speed_days | delivery_speed_days | delivery_speed_days |
product_title (Products Purchased) | name | Not sent | Not sent |
product_sku (Products Purchased) | sku | Not sent | Not sent |
product_price (Products Purchased) | price | Not sent | Not sent |
product_quantity (Products Purchased) | quantity | Not sent | Not sent |
Profile Updates
Customer profile syncs are not events. They do not show in event reports.
- Mixpanel: Vendo sends a
$setprofile update with the Customer Profile Properties. Vendo also sends$create_aliasto link a known customer to an earlier ID. - Segment and Customer.io: Vendo sends an
identifycall with the customer traits. - OneSignal: Vendo sets user tags on the customer.
Common Properties
All client-side events include these properties automatically.
Identity
| Property | Type | Description |
|---|---|---|
distinct_id | String | User identifier (customer ID or device ID) |
$device_id | String | Anonymous device identifier |
$user_id | String | Shopify customer ID or email (when known). Only on Checkout Completed, Customer Logged In, Newsletter Registered and custom events that set it |
$insert_id | String | Unique event ID for deduplication |
Device & Browser
| Property | Type | Description |
|---|---|---|
$browser | String | Browser name |
$device | String | Device from the user agent (for example, iPhone) |
$os | String | Operating system |
$screen_height | Number | Screen height in pixels |
$screen_width | Number | Screen width in pixels |
language | String | Browser language |
Page Context
| Property | Type | Description |
|---|---|---|
$current_url | String | Full page URL |
page_title | String | Page title |
path_name | String | URL path |
$referrer | String | Referring URL |
Attribution
Vendo captures UTM parameters and click IDs from landing page URLs.
| Property | Type | Description |
|---|---|---|
utm_source | String | Traffic source |
utm_medium | String | Marketing medium |
utm_campaign | String | Campaign name |
utm_content | String | Ad content identifier |
utm_term | String | Paid search keyword |
gclid | String | Google Ads click ID |
fbclid | String | Meta/Facebook click ID |
msclkid | String | Microsoft Ads click ID |
ttclid | String | TikTok click ID |
fbc | String | Meta click ID from the _fbc cookie |
For the complete list of supported parameters, see Supported UTM Properties.
Checkout Completed includes profile_attribution_snapshot. The profile update that Vendo sends at checkout includes it too. The object has the first-touch and last-touch UTM values, click IDs and referrer domain that the browser stored. It also has the Meta browser IDs fbc and fbp. Vendo adds it only when the browser stored one of these values.
Metadata
| Property | Type | Description |
|---|---|---|
$source | String | Vendo - Shopify App. A custom event can set its own value. Mixpanel shows Vendo - Server for events from the Vendo ingest API |
vendo_tracking_version | String | Pixel version |
event_type | String | standard or custom |
shopify_event_id | String | Shopify event ID that Vendo routes the event by (for example, product_viewed, or all_custom_events for a custom event) |
shopify_routing_contract_version | Number | Version of the Vendo routing contract (1) |
vendo_runtime_instance_id | String | ID of the pixel runtime that sent the event |
Product Object
Client-side product events include a products array with this structure:
| Property | Type | Description |
|---|---|---|
id | String | Shopify product ID (GID format) |
title | String | Product title |
type | String | Product type |
vendor | String | Product vendor |
variant_id | String | Variant ID |
variant_title | String | Variant name (for example, Black / Medium) |
untranslated_title | String | Product title before translation |
variant_untranslated_title | String | Variant name before translation |
variant_image | String | Variant image URL |
variant_price | String | Variant price |
variant_currency_code | String | Currency code |
variant_sku | String | SKU |
quantity | Number | Quantity (Cart Viewed and checkout events) |
result_rank | Number | Position in search/collection results |
Customer Profile Properties
Vendo syncs customer profiles to destinations that support user properties (Mixpanel, Segment, Customer.io and OneSignal). Each destination uses its own property names.
| Mixpanel | Segment | Customer.io | OneSignal | Description |
|---|---|---|---|---|
$email | email | email | email | Customer email |
$first_name | firstName | first_name | first_name | First name |
$last_name | lastName | last_name | last_name | Last name |
$phone | phone | Not sent | Not sent | Phone number |
$created | createdAt | Not sent | customer_created_at | Account creation date |
shopify_customer_id | shopifyCustomerId | Not sent | Not sent | Shopify customer ID |
total_spent | totalSpent | total_spent | total_spent | Lifetime spend |
order_count | orderCount | order_count | order_count | Total orders |
verified_email | verifiedEmail | verified_email | verified_email | Email verified |
customer_tags | customerTags | customer_tags | customer_tags | Shopify customer tags |
first_order_date | firstOrderDate | first_order_date | first_order_date | First purchase date |
last_order_date | lastOrderDate | last_order_date | last_order_date | Most recent purchase |
email_marketing_consent_state | emailMarketingConsent | Not sent | email_marketing_consent | Marketing consent status |
marketing_state | marketingState | marketing_state | marketing_state | Marketing state |
tax_exempt | taxExempt | Not sent | tax_exempt | Tax exemption status |
Address Object
Client-side checkout events include shipping_address. Vendo sends Shopify’s checkout shipping address object without changes. It has these fields:
| Property | Type | Description |
|---|---|---|
firstName | String | First name |
lastName | String | Last name |
address1 | String | Street address |
city | String | City |
province | String | State/province name |
provinceCode | String | State/province code |
country | String | Country name |
countryCode | String | Country code (ISO) |
zip | String | Postal/ZIP code |
Example Payloads
For the BigQuery schema of client-side Shopify events, see BigQuery Client-Side Events. The page for each destination gives any additional field mapping.