Data Model
This is the canonical reference for everything Vendo tracks from your Shopify store — all events, their properties, and the data structures used.
Event Overview
Vendo tracks events from two sources: client-side (Web Pixel) and server-side (pipeline). Use this table to understand which events come from where.
| 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
These 14 events are captured in real-time via the Shopify Web Pixel.
Browsing Events
| Event | Description | Key Properties |
|---|---|---|
| Page Viewed | Customer visits any page | $current_url, page_title, path_name, $referrer |
| Product Viewed | Customer views a product detail page | products[], $current_url |
| Collection Viewed | Customer views a collection page | collection_id, collection_title, products[] |
| Search Submitted | Customer performs a search | search_query, products[] |
Cart Events
| Event | Description | Key Properties |
|---|---|---|
| Product Added To Cart | Customer adds item to cart | products[], quantity, amount, currency |
| Product Removed From Cart | Customer removes item from cart | products[], quantity, amount, currency |
| Cart Viewed | Customer views the cart page | products[], quantity, amount, currency |
Checkout Events
| Event | Description | Key Properties |
|---|---|---|
| Checkout Started | Customer initiates checkout | checkout_token, order_id, cart_total_amount, products[] |
| Checkout Contact Info Submitted | Customer enters email/phone | email, phone, checkout_token |
| Checkout Address Info Submitted | Customer enters shipping address | shipping_address, email, phone |
| Checkout Shipping Info Submitted | Customer selects shipping method | shipping_amount, cart_total_amount |
| Payment Info Submitted | Customer enters payment details | checkout_token, cart_total_amount |
| Checkout Completed | Customer completes purchase | order_id, email, cart_total_amount, products[], shipping_address |
Want to track additional interactions? See Sending Custom Events.
Server-Side Events
These events are synced from Shopify’s backend APIs every 10–15 minutes.
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, reason |
| Order Partially Refunded | Partial refund issued | shopify_order_id, refund_amount, refunded_items[] |
| Products Purchased | Per line item (disabled by default) | product_id, title, sku, price, quantity |
Abandonment Events
| Event | Description | Key Properties |
|---|---|---|
| Abandoned Checkout | Checkout not completed | checkout_id, email, cart_total_amount, products[], abandoned_checkout_url |
Profile Events
| Event | Description | Key Properties |
|---|---|---|
| Set Property | Customer profile update | $email, $first_name, $last_name, total_spent, order_count |
| Alias | Links anonymous to known ID | distinct_id, alias |
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 (when known) |
$insert_id | String | Unique event ID for deduplication |
Device & Browser
| Property | Type | Description |
|---|---|---|
$browser | String | Browser name |
$device | String | Device type (Desktop, Mobile, Tablet) |
$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
UTM parameters and click IDs are captured 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 |
For the complete list of supported parameters, see Supported UTM Properties.
Metadata
| Property | Type | Description |
|---|---|---|
$source | String | Always Vendo - Shopify App |
vendo_tracking_version | String | Pixel version |
event_type | String | Event type identifier |
Product Object
Product-related events include a products array with this structure:
| Property | Type | Description |
|---|---|---|
id | String | Shopify product ID (GID format) |
product_id | String | Numeric product ID |
title | String | Product title |
type | String | Product type |
vendor | String | Product vendor |
variant_id | String | Variant ID |
variant_title | String | Variant name (e.g., Black / Medium) |
variant_price | String | Variant price |
variant_currency_code | String | Currency code |
variant_sku | String | SKU |
quantity | Number | Quantity (for cart/order events) |
result_rank | Number | Position in search/collection results |
Customer Profile Properties
Customer profiles are synced to destinations that support user properties (Mixpanel, Segment, Customer.io, OneSignal).
| Property | Type | Description |
|---|---|---|
$email | String | Customer email |
$first_name | String | First name |
$last_name | String | Last name |
$phone | String | Phone number |
$created | DateTime | Account creation date |
shopify_customer_id | String | Shopify customer ID |
total_spent | Number | Lifetime spend |
order_count | Number | Total orders |
verified_email | Boolean | Email verified |
customer_tags | Array | Shopify customer tags |
first_order_date | DateTime | First purchase date |
last_order_date | DateTime | Most recent purchase |
email_marketing_consent_state | String | Marketing consent status |
marketing_state | String | Marketing state |
tax_exempt | Boolean | Tax exemption status |
Address Object
Shipping and billing addresses use this structure:
| 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 complete JSON payload examples of each event, see the Mixpanel Integration documentation.